nieuwe VOSIM-oscillator in C

olaf

Ouwe rot
Lid sinds
14 juli 2002
Berichten
524
hoi,

binnenkort ga ik beginnen met het programmeren van een VOSIM-oscillator in C. heeft iemand ervaring met VOSIM-oscillatoren? ik heb de volgende parameters in mijn hoofd via welke je m moet kunnen gaan aansturen.

1. frequentie
2. aantal blokken (golfvormen) per cycle
3. spreiding van deze blokken (van tegen elkaar aan tot totaal verspreid over een cyclus)
4. breedte van de cyclus-decay
5. vorm van de cyclus-decay
6. duty-cycle
7. golfvorm van elk blok

verder zit erover te denken om aan al deze parameters nog een soort van deviatiefactor toe te voegen die je zowel per blok als per cyclus kunt instellen.

ook denk ik erover om een mogelijkheid tot externe triggering toe te voegen maar de manier waarop heb ik nog niet duidelijk. mijn idee nu is dat ik het zo programmeer dat het aantal samples tussen twee triggers wordt gemeten en vervolgens de frequentieparamter hiervan wordt afgeleid. dan loop je echter wel altijd een trigger achter.

hebben jullie nog suggesties? bijvoorbeeld voor andere parameters. of bijvoorbeeld voor welke parameter ik voorrang moet verlenen boeven welke andere (als je bijvoorbeeld de breedte opvoert en je hebt een niet al te grote spreiding moet ik het dan zo programmeren dat je de breedte niet kunt verhogen of moet de spreiding dan toenemen?)

alle suggesties zijn welkom. zijn er verder nog mensen die ervaring hebben met C?

weet iemand iets van wiskundige formules voor golfvormen? ik wil kunnen interpoleren tussen een spike-hol-sinus-bol-blok golfvorm. en dat via 1 paramter. het zou mooi zijn om een formule te kunnen aansturen die al deze vormen kan geven...

ideeen? hij moet binnen twee maanden af :-)
 
Ik weet niet wat een VOSIM oscillator is, maar ik heb wel wat ervaring in C. (edit: ja ok 'met C' bedoelde ik ;) sorry )

Als ik ergens mee kan helpen, en als ik tijd heb dan kan je altijd PB'en.

Bij deze :)
 
Laatst gewijzigd:
Ja: ik speel nu de sample getiteld "lachend publiek", in C.

;)
 
Re: nieuwe VOSIM-oscillator in C

Origineel geplaatst door olaf
weet iemand iets van wiskundige formules voor golfvormen? ik wil kunnen interpoleren tussen een spike-hol-sinus-bol-blok golfvorm. en dat via 1 paramter. het zou mooi zijn om een formule te kunnen aansturen die al deze vormen kan geven...
Ik weet wel iets van wiskundige formules voor golfvormen! Wat bedoel je met "spike", "hol" en"bol" (die andere 2 snap ik wel)?
 
Ik zou voor de spikes (bedoel je deze in de bijlage?) even een bestaand iets pakken - Absynth heeft een hele mooie waveshaper. Anders werkt ZynAddSubFX wel aardig - wat je nodig hebt is denk ik niet een formule maar iets waar je mee vooruit kunt qua FFT. Bij Absynth kun je de golfvorm tekenen en dan kijken hoe de harmonischen eruit zien; bij ZynAddSubFX kun je gelijk met harmonischen werken (al weet ik niet of 'ie een waveform display heeft).

Overigens staat het principe van VOSIM hier uitgelegd (je hebt wel een (Micro)modular nodig):

http://www.clavia.se/nordmodular/Modularzone/VOSIM.html
 

Attachments

  • spikes.png
    spikes.png
    14,5 KB · Bekeken: 102
bedankt jongens. yoozer, die tekening die jij hebt bijgevoegd geeft inderdaad die holle golfvorm weer. van daaruit wil ik naar een spike-, ofwel een impuls (0,0,0,0,1,-1,0,0,0,0) kunnen, of de andere kant op naar een sinus en dan door naar een blokgolf. ik heb al een formule

a/a-cos t

die geeft geloof ik de mogelijkheid om van hol naar bol te gaan. ik wil fft trouwens vermijden. ik vind het juist leuk dat ik in c gewoon een periodieke-getallenreeks als golfvorm kan laten klinken. ik wil dus gewoon in het tijdsdomein blijven en niet naar het frequentiedomein gaan. ik denk ook niet dat ik dat zo een twee drie kan programmeren. en ik weet wel wat van fft's van normale golfvormen maar niet van fft's van vosim golfvormen. (het resultaat laat ik zeker even weten). vanuit fft zou voor mij dus de verkeerde kant op zijn, ik ben juist benieuwd wat het spectrum doet als ik een reeks impulsen (plat-spectrum) met een verschillende amplitude (afhankelijk van de cycle-decay) periodiek laat klinken. qua klanken schijnt vooral de holle en bolle golfvorm mooi te worden hoorde ik.

als het me trouwens niet met formules gaat lukken dan ga ik het via tabellen doen die ik interpoleer maar dat lijkt me minder fraai..

ooh ja, over die vraag wat ik precies met die golfvormen bedoel:
-bol is een sinus
-spike is een pure digitale impuls 0,1,-1,0
-hol is zoals die tekening van yoozer
-blok is 1,1,1,1,1,1,-1,-1,-1,-1,-1,-1,1,1,1,1,1,1,-1,-1,-1,-1,-1,-1, enz

kan je daar iets mee Meinte37?
 
ooh ja, hol is zoals de onderste tekening van yoozer, bedoel ik....
 
Origineel geplaatst door olaf
kan je daar iets mee Meinte37?
Op zich kan ik daar wel "iets" mee, maar het is wel handig wat meer van je project te specificeren: vaste sample rate?, hoeveel processorkracht beschikbaar (realtime of niet)?, wat voor parameters wil je precies hebben?. Ik kan nl. wel wat formules spuien, maar het is volstrekt afhankelijk van je implementatie of die bruikbaar zijn of niet.
 
he meinte!

ja, ik wil gebruik maken van een vaste sample-rate. verder wil ik het inderdaad real-time implementeren.

de parameters die ik in mijn hoofd waren:

1. frequentie
2. aantal blokken (golfvormen) per cycle
3. spreiding van deze blokken (van tegen elkaar aan tot totaal verspreid over een cyclus)
4. breedte van de cyclus-decay
5. vorm van de cyclus-decay
6. duty-cycle
7. golfvorm van elk blok

hiervan lijken me alleen de parameters 1 en 6 (en dus 7 maar dat was de algemene vraag van deze thread) van belang. ik wil de duty cycle per golfvormblok kunnen bepalen. vergelijkbaar met een de klassieke duty-cycle van een square-wave.

hoe denk je dat de implementatie het meest effectief is? ik heb nu twee ideeen:

a. aan het begin van een cyclus een golfvorm met een formule samenstellen en deze opslaan. hierna realtime uit deze "tabel" lezen waarbij de
parameters 1 tot en met 6 op deze tabel worden toegepast. heb ik deze parameters duidelijk beschreven?

b. totaal realtime. als ik dit wil doen dan moet ik dus alle parameters in 1 keer in 1 formule verwerken. ik weet niet of dit mogelijk is?

ik ben erg(!!!!) benieuwd!! kan je hier wat mee?
 
nog twee opmerkingen:

a. gisteren hoorde ik iets over tchebychef-polynomen. moet ik daarmee aan de slag?

b. de 7e parameter wordt een parameter die (hoewel natuurlijk discreet omdt we digitaal werken) bijna continu moet werken, zodat je vloeiend van een impuls naar een holle, (naar een driehoek?), naar een sinus, naar een blok kan interpoleren. ik heb zelf het idee dat dit niet met 1 parameter in 1 formule kan. ben je het daarmee eens? zo ja, dan moet ik dus verschillende formules gebruiken die voor verschillende waarden van de parameter gelden. misschien kan het wel met twee formules of niet? van hol naar sinus en van bol naar sinus waarbij ik de uiterste waarden (pure blok en pure impuls) misschien niet in een formule moet stoppen maar anders moet implementeren?
 
Je wilt de verschillende typen golfvorm continue kunnen varieren, begrijp ik. Daar zijn (heel veel) verschillende manieren voor, bijv. zou je de verschillende golfvormen kunnen mixen, m.a.w. simpelweg optellen met een constante weging ervoor -natuurlijk wel zo dat het aantal dB's (RMS) constant blijft. Dan houd je de harmonische content gelijk ook onder controle. Het hangt helemaal van de methode af hoe je spectrum varieert.

Je hebt 4 golfvormen waartussen je wilt varieren, maar wil je dat in 1 parameter (zoja, in welke volgorde) of in 4 parameters (dan is mixen makkelijk)?

Chebyshev-polynomen (of hoe je het ook maar moge spellen) is een klasse polynomen (tamelijk makkelijk uit te rekenen, veel makkelijker dan een "gewone" sinus) met een bepaalde eigenschap die ze heel geschikt maken om functies heel goed te benaderen, veel beter dan je zou "mogen" verwachten. Ik weet niet zo 1-2-3 hoe goed deze methode is aan te passen naar een familie van functies (1- of 4-parameterfamilie).
 
hoi meinte,
ik wil hiervoor 1 parameter gebruiken. de volgorde die ik in mijn hoofd had (omdat ie grafisch vloeiend overloopt) is impuls-hol-(eventueel driehoek)-sinus-blokgolf. de "mix"-manier heeft niet mijn voorkeur.

gisteren sprak ik trouwens iemand die dacht dat de golfvorm van een vosim-oscillator er minder toe doet dan de aansturing van de klassieke vosim-parameters. dit lijkt me sterk, maar is toch interessant. hij suggereerde verder dat het inderdaad interessant zou kunnen zijn om de decay-vorm en factor ook te kunnen instellen. weet je daar ook een formule voor. van heel scherp aan het begin (de linkeronderkant van een O zeg maar) tot aan vlak aan het begin en steil aflopend aan het eind (de rechterbovenkant van een O)

verder zit ik nog met de vraag van hoe ik de deviatie van de verschillende paramters wil implementeren. als ik bijvoorbeeld een decay-factor heb van 0,9 per blok en ik voeg hier een parameter toe waarmee je de deviatie kan instellen, bijvoorbeeld een deviatie van 0,05. zal ik het dan zo implementeren dat ik de computer een random-waarde neem tussen 0,85 en 0,95 laat kiezen of zal ik met een statisch-principe gaan werken (die klokvorm, ben even de naam kwijt) en hoe kan ik hiervoor een parameter bedenken? misschien een parameter die staat voor de standaard-afwijking. dus hoe groter die wordt hoe groter de standaard-deviatie? wat vind jij?
 
Hoi,

de vosim is af. ik heb m geimplementeerd als object in max-msp met de volgende inputs:

- basisfrequentie
- formantfrequentie
- aantal formanten
- decay van formanten
- golfvorm (spike - sinus - blokgolf)


de implementatie met de interpolatie tussen sinus en blokgolf is nog sjit. ik heb het als het ware gewoon golfvormen gemixed waardoor je al snel hoekjes in je golfvorm krijgt die het geluid te veel overheersen. ik ben dus nog steeds op zoek naar een formule waarmee je het kan doen. ik hoorde iets over een inverse tangent en iemand anders noemde een sigmoid. weet iemand daar wat van? ik wil dus met 1 parameter via die formule van de ene golfvorm naar de andere kunnen interpoleren.
 
Back
Top