WaveWizard

reatime of niet-realtime

reatime of niet-realtime

Ik weet de beperkingen van de modulaire synthese maar ondanks dat heb ik na 35 jaar nog steeds die aha-erlebnissen. Overigens houden jouw posts hier mij jong. Ik zie ze als een prikkelende manier om naar het zelfde te kijken.

Die aha bij modulair - ook na 35 jaar - verbaast mij niet; als ik naar jouw patches luister, denk ik wel eens aan Robert Moog die tijdens een concert waarin een van zijn eigen synth's voor 't eerst werd gebruikt, verbijsterd uitriep: "But that's impossible to do with a Moog!!" Ook jouw patches maken soms het onmogelijke mogelijk! Verder maakt het geen principieel verschil of een systeem modulair van opzet is of niet. Een programmeertaal is ook modulair. Veel wezenlijker is de vraag of een klankopwekkingssysteem realtime is of niet. Voor zover ik weet zijn de meeste modulaire systemen realtime.

Dat modulair realtime is, betekent dat je altijd direct een klinkend resultaat hebt en dat het systeem onmiddellijk reageert op elke verandering, bijv. draaien aan een potmeter. Dat is precies het gedrag dat je van een synthesizer of een akoestisch muziekinstrument gewend bent. Een enorm voordeel, zeker, en soms, voor beginners, een must.
Bij een niet-realtime systeem, zoals WaveWizard, is dat heel anders. Daar maak je eerst alle instellingen (de patch), drukt op een startknop, waarna het systeem begint te rekenen en het klinkende resultaat opslaat op een digitaal geluidsspoor. De interactie is dus veel minder direct. Maar het voordeel hier is dat je "het geluid nog hebt". Je kunt er direct een wav van maken, wat bij modulair vaak alleen maar met een extern programma, of misschien zelfs alleen maar via de line-out van de geluidskaart mogelijk is.

Daar zit ook nog een heel andere kant aan, waar je in de populaire synth-media maar zelden over hoort. Dat een systeem realtime is en geluid direct weer "vergeet", betekent ook dat het zich alleen maar "causaal" kan gedragen. Elke module in een patch kan alleen maar reageren op dingen die al gebeurd zijn, niet op dingen die nog gaan komen. Met een niet-realtime systeem kan dat wèl. Je kunt bijvoorbeeld filteren "naar de toekomst". Daardoor wordt een veel breder gebied van de signaalverwerking toegankelijk voor audio. Bij beeldverwerking is filteren "in twee richtingen" heel gewoon. In een afbeelding is ruimte wat bij geluid de tijd is. Het verschil tussen tijd en ruimte is dat ruimte symmetrisch is en de tijd niet. In de ruimlijke dimensies van een afbeelding kun je bewegen in twee richtingen: heen en weer van links naar rechts, op en neer van boven naar beneden. De tijd daarentegen stroomt altijd dezelfde kant op: van verleden naar toekomst (althans in ons huidig universum, vermoeden sommige kosmologen). Er zijn voorbeelden te noemen waarin ook bij audio symmetrische, anticausale bewerkingen nieuwe mogelijkheden bieden. In mijn afstudeerscriptie heb ik een voorbeeld daarvan geanalyseerd en toegepast, nl. het uitmiddelen van set's van filtercoëfficiënten bij LPC-vocoding, wat de geluidskwaliteit enorm verbetert.

Het niet-realtime zijn van een systeem maakt het dus in principe veel krachtiger, onafhankelijker van processorsnelheid, robuuster. Niet-causale bewerkingen kunnen de geluidskwaliteit soms verhogen.
 
Dat anti causal filtergebeuren is geweldig en zeker maakt het een niet realtime systeem veel krachtiger dan een realtime modulair systeem met Lp, Hp, Bp filters enz. Nu is de G2 niet zo maar een gewoon modulair systeem. Voor in SoundLab II heb ik filter experimenten gedaan die behoorlijk ver gaan. Dus filters gemaakt en werkend in de sample-toekomst met 8-16 coördinaten(poly-phase) . Wel is het helaas zo dat mn ideen beperkt worden door de te weinig DSP kracht van de G2 en eigenlijk de editor omdat dit ook voor de Demo opgaat. Ik hoop dus dat Clavia over een tijdje een monster G2 uitbrengt waar dit soort dingen dan +/- 12%DSP kracht verbruiken i.p.v. de nu 70-90%.
 
Laatst gewijzigd:
...
Wel is het helaas zo dat mn ideen beperkt worden door de te weinig DSP kracht van de G2 en eigenlijk de editor omdat dit ook voor de Demo opgaat.


Juist die inperking van ideeëen waarmee een realtime systeem altijd noodzakelijk gepaard gaat, heeft mij in 2002 doen besluiten om WaveWizard niet verder te ontwikkelen in de richting van een modulair systeem, maar meer de kant op te gaan van Matlab. Dan maar niet-realtime! Het zijn de ideeëen waar het om gaat, niet de chipjes, zeg ik altijd maar.

Bij mijn afstudeerproject, in '96, werkte ik met Atari Falcon, die was uitgerust met een Motorola DSP56000. Ik implementeerde alles opnieuw in DSP assembler: de FFT, LPC met Durbin-Levinson, frequency warping filter, lattice filter, en moest eerst een infrastructuur leggen, met om te beginnen een 96 bits vermenigvuldiger, want die 56000 was fixed point. Het was spectaculair allemaal, en voor die tijd ongelooflijk snel, maar ik wist tegelijkertijd: dit was eens maar nooit weer! Ben toch niet zo achterlijk om bij elke nieuwe DSP-chip weer al die assembler-zut opnieuw te gaan aanmaken of aanpassen! Dacht ook vaak aan de wijze woorden van Paul Berg: "I don't want to become a second Koenig!" Dat bracht hem op LISP. Mij op C++. En verder alleen maar: ideeëen, ideeëen, ideeëen!
 
Er is er NU AL een die dat zegt!:D

Treed ik toch nog in het voetspoor van de grote maestro (Koenig, wel te verstaan)!:kroon:
 
Ik kom nog even terug op wat ik in #121 zei:
Dat een systeem realtime is en geluid direct weer "vergeet", betekent ook dat het zich alleen maar "causaal" kan gedragen. Elke module in een patch kan alleen maar reageren op dingen die al gebeurd zijn, niet op dingen die nog gaan komen. Met een niet-realtime systeem kan dat wèl. Je kunt bijvoorbeeld filteren "naar de toekomst".
Daar moet ik aan toevoegen dat elk modulair systeem waarin data gebufferd kunnen worden (zodat een zekere latency ontstaat) voorwaarts, "anti-causaal" filteren in principe mogelijk is. Daar is dan geen extra DSP-kracht voor nodig.
 
Dat "kijken in de toekomst" lijkt me heel erg interessant.

(Ik zat bv meteen te denken aan een combinatie van perceptie codering en lossless codering om veel grotere compressie toe te kunnen passen zonder hoorbare effecten.)

Kan je een geluidsvoorbeeldje geven van "anti-causaal" signaal processing?
 
Dat "kijken in de toekomst" lijkt me heel erg interessant.

(Ik zat bv meteen te denken aan een combinatie van perceptie codering en lossless codering om veel grotere compressie toe te kunnen passen zonder hoorbare effecten.)

Kan je een geluidsvoorbeeldje geven van "anti-causaal" signaal processing?


Dat "anti-causale" klinkt al gauw een beetje geleerd, zie het maar als "anticiperend". Anticipatie is iets heel natuurlijks. Bij athletiek zie je hoogspringers altijd zo mooi de sprong eerst in gedachte maken en "uitrekenen". Bij spraak die je door een time-stretcher haalt hoor je duidelijk dat tijdens het uitspreken van de ene klank, de lip- en tongspieren zich al in de mondstand van de volgende klank beginnen te zetten. Zelfs met een primitieve granulaire stretch is dat al duidelijk te horen: http://muziekexact.nl/NLT/Weerbericht_granulair_tijdstrek_factor_3.mp3. De weerman zegt: "ditwassu tennowesjoenaal",
(de bijbehorende WaveWizard-preset: http://muziekexact.nl/NLT/Granulaire_Synthese.pdf)

Alle vormen van signaalanalyse, zoals bijv. LPC of de short-time Fourier transform, zijn (noodzakelijk) granulair van aard, d.w.z. dat je een signaal opdeelt in losse (al dan niet gewindowde) fragmenten. Over elk fragment afzonderlijk doe je een berekening. Bij LPC levert elke berekening een set filtercoëfficiënten. Als je ruis door een filter haalt dat door zo'n set coëfficiënten wordt gedefinieerd, dan hoor je de klankkleur van het betreffende fragment. Zo kun je bijvoorbeeld een hardop uitgesproken zin vervangen door een fluister- of deep-throat-zin.

Nu is het natuurlijk zo dat hiermee een geluid wordt gerepresenteerd door een discrete reeks filters of spectra. De re-synthese zal daarom altijd een "klapperend" geluid maken. Klinkt onnatuurlijk en primitief. Een van de dingen die je bij LPC-filters kunt doen is interpoleren tussen de coëfficiënten van twee opeenvolgende frames en daaruit nieuwe, "tussenliggende" filters aanmaken. Al doende handel je dan dus "met voorkennis": het tussenfilter heeft een glazen bol en "weet" wat er in de toekomst gaat komen. Dat levert heel mooie, gladde klanken op, zonder braampjes en shit.

Een voorbeeldje zul je zelf kunnen maken met de LPC-functies in de upgrade versie die hoop ik in sept a.s. gereed is. (LPC zit al 15 jaar in WaveWizard, maar de functie "slaapt"; er moet een gebruikersinterface worden gebouwd die veel simpeler en tegelijk ook krachtiger is en daar denk ik nog over na.)
 
...
Nu is het natuurlijk zo dat hiermee een geluid wordt gerepresenteerd door een discrete reeks filters of spectra. De re-synthese zal daarom altijd een "klapperend" geluid maken. Klinkt onnatuurlijk en primitief. Een van de dingen die je bij LPC-filters kunt doen is interpoleren tussen de coëfficiënten van twee opeenvolgende frames en daaruit nieuwe, "tussenliggende" filters aanmaken. Al doende handel je dan dus "met voorkennis": het tussenfilter heeft een glazen bol en "weet" wat er in de toekomst gaat komen. Dat levert heel mooie, gladde klanken op, zonder braampjes en shit.
WaveGuide7 met alle respect, ook voor deze complexe materie, maar... kan men d.m.v. dit 'reduceren geen meer constante factoren' afleiden, ik bedoel : het aantal benodigde 'controlled filters' het type (bvb. LP en HP) en hun steilheid ?
Wat zouden de mogelijke obstakels bij zo'n opzet zijn indien niet of moeilijk uitvoerbaar ?
Zo worden bij simulaties van de menselijk stem meestal ook maar een beperkt aantal formanten gebruikt (en zijn de fysieke bewegingen ook niet zo snel, behalve bij superman :P) dus...
 
Er zijn bij LPC twee manieren om de vloeiendheid van het gegranuleerde signaal te verhogen:
(1) interpoleren tussen de coëfficiënten van de filters van twee opeenvolgende frames. Dit is wat ik hierboven al noemde.
(2) de frames laten overlappen. Dat geeft een betere geluidskwaliteit, maar is kostbaarder qua rekentijd. (Overigens is de LPC-berekening via het Durbin-Levinson algoritme heel erg snel en PC's van tegenwoordig zijn dat ook.)

Bij telecommunicatie heb je inderdaad aan slechts 3 of 4 formanten genoeg om goed verstaanbare spraak te krijgen. Maar mijn vader had dan ook altijd even een paar seconden nodig om te horen of hij mij dan wel één van mijn broers aan de lijn had. Die meer individuele stem-eigenschappen zitten vooral in de hogere formanten (boven 5 kHz) en die wil je natuurlijk bij toepassing in muziek of sound design graag meenemen.
Het aantal formanten is trouwens bij LPC minder relevant dan hun onderlinge afstand. Aangezien die bij spraak globaal ongeveer 1000 Hz is, geldt als vuistregel dat het aantal filtercoëfficiënten gelijk is aan de samplingfrequentie gedeeld door 1000. Voor CD-geluid komt dat dus neer op zo'n 44 coëfficiënten. Daarmee ligt dan de kwaliteit van het filter vast en dus de mate van klankgelijkenis met het origineel. Neem je minder coëfficiënten, dan worden met name de dalen tussen de formantpieken minder diep - dat is ook precies de zwakte van LPC: de antiresonanties (dips in het spectrum die zich vooral voordoen bij nasale klanken) komen er toch al wat bekaaid van af.

Dan is er, met name voor de meer creatieve, muzikale toepassing van LPC, nog het punt van het filtertype dat je in de re-synthese gebruikt. LPC an sich levert uitsluitend een canoniek filter, waarbij alle coëfficiënten bijdragen aan alle formanten. Verander je slechts één coëfficiënt, dan kun je het hele filter al op stang jagen en zelfs instabiel (en dus onbruikbaar) maken. Er valt dus niks leuks mee te sturen.
Maar dat is nou het mooie van DSP! Beschik je eenmaal over zo'n canoniek LPC-filter, dan kun je dat op verschillende manieren omrekenen naar andere structuren die juist voor sound design veel beter aanstuurbaar zijn en die een heel directe rol spelen in de klank-compositie. Heel spectaculair is de omrekening naar een lattice-filter waaruit vervolgens een fysisch model van het spraakkanaal kan worden berekend. In principe kun je daar de ruimtelijke vorm van mond en keelholte mee wijzigen en op die manier letterlijk iemand laten praten "met een aardappel in de keel".
Ook kun je het LPC-filter omrekenen naar een cascade van simpele resonantie-filters, die elk precies één formant voor hun rekening laten nemen. Op mijn eindexamen heb ik een voorbeeld laten horen waardoor de AA-klank veranderde in een meer bekakte AAèè-klank. Ik zit daarom te piekeren hoe ik zo'n LPC-formantcascade op een zo gebruiksvriendelijk mogelijke manier in WaveWizard kan implementeren. Ben er nog niet uit.
 
Erg inpirerend onderwerp WaveGuide. Gisteren begonnen met deze puzzle. :)
Toch zijn deze dingen ook te doen in de G2. Alleen niet in 1 patch. Wel als performance.(2 slots of meer). Met de delay lines zijn buffers te maken waarin je samples kan opslaan. Let wel, de G2 kan deze niet 'onthouden' bij het uitzetten. Dat canoniek filter is ook te doen. Denk b.v. hierin aan het bouwen van een vocoder met bpf's. Deze nemen dan de formanten voor hun rekening. En als laatse een slot voor de resynthesis patch. Deze patches kunnen naar elkaar geroute worden via de diverse slots.
Indertijd heb ik met de Nord Modular(voorloper van de G2) een virtuele spraakpatch gebouwd. Een strottenhoofd model met modulatie mogelijkheden. Hier een voorbeeld waarmee de spraakpatch bestuurd word met de I-Cube in Londen:
http://electro-music.com/avis/roland_kuit-1.avi.
 
Over second Koenig gesproken, hier zien we een second Waisvisz! :)

In 1995 sprak ik Waisvisz na een optreden in toenmalig O42, hier in Nijmegen. Hij werkte uitsluitend met sample-manipulaties, ongeveer in de richting van wat we niet zo lang geleden bespraken hier, in de Glitch draad. Ik was in die tijd volop bezig met mijn afstudeerproject over LPC en terwijl hij op het podium aan 't werk was, gingen er duizend koortsachtige gedachten door mijn hoofd. Na afloop maakten we een praatje en vertelde ik hem over de klankmogelijkheden van LPC in combinatie met de hardware controlers die hij gebruikte. Wat ik bedoelde te zeggen ging in de richting van jouw avi, hierboven...!

Wel is het zo dat met LPC meer uitgesproken spraakformantstructuren mogelijk zijn en een grotere verscheidenheid aan modulatie- en manipulatiemogelijkheden. Ik kom daar later op terug als de LPC-functie klaar is, maar hier al vast een voorbeeldje dat illustratief is voor het verschil tussen de traditionele kanaalvocoder die uit een aantal banddoorlaatfilters bestaat en LPC. De zin "maan, zaag, Fien, vier, hut, juf, ring, Wim, koek, schoen" wordt tijdens het LPC-analyseproces opgedeeld fragmenten van ongeveer 20 msec. Voor elk fragment wordt een filter gemaakt, waarvan de klank overeenkomt met dat fragment. Voor elke seconde geluid worden dus 50 verschillende filters gemaakt. Tegen elk filter afzonderlijk kun je "een tikje geven" door een puls op de input te zetten. Op de output hoor je de impulsrespons, een extreem kort geluidje waarvan de klankkleur gelijk is aan die van het fragment. In dit geluidsvoorbeeld worden enkele honderenden opeenvolgende LPC-filters achtereenvolgens aangetikt, eerst met grote tussenpozen en dan steeds sneller. Zo hoor je de pulsresponsies geleidelijk overgaan in verstaanbare spraak, alsof iemand spreekt met toenemende toonhoogte. Ook de meer individuele kernmerken van de stem worden hoorbaar. Het lijkt zelfs even alsof je duidelijk stembanden hoort, terwijl het puur die opeenvolging van pulsresponsies is.
 

Attachments

  • Buzz_LPC_Maan_zaag.mp3
    1,4 MB · Bekeken: 132
eeuwig stijgen de Shepards...

eeuwig stijgen de Shepards...

Psycholoog Shepard construeerde een kort signaalfragment (van bijv. 10 sec) waarin je een stijgende toon hoort, maar waarvan toch het begin- en eindpunt spectraal gezien identiek zijn, zodat je de indruk krijgt dat de toon onbeperkt lang voortgaat met stijgen als je het fragment steeds herhaalt. Jean Claude Risset gebruikte het omgekeerde effect (een eeuwig dalende toon) in de compositie "Computer Suite from Little Boy" (de eerste atoombom, Hiroshima) om het eindeloze vallen van de bom uit te beelden.
Het is een audio-illusie waarvan ook optische varianten bestaan, zoals de "barbers pool", die je soms nog wel eens aan de gevel van kapperszaken ziet. Zo'n kapperspaal is gelijk ook een goed "recept" voor het maken van Shepard tonen, want het is in principe de afbeelding van het sonogram van een Shepard toon en dat heeft de volgende eigenschappen:

(1)
de frequentiecomponenten dienen op gehoormatig gelijke afstanden van elkaar te liggen. Daarom worden meestal octaven gebruikt, maar het effect klinkt "voller" als je het octaaf opdeelt in 3 grote of 4 kleine tertsen. Let wel: je kunt dus niet zo maar een willekeurige harmonische toon maken, zoals bijv. een blok of zaag, want daarvan zijn de onderlinge afstanden wel gelijk op een lineaire, maar niet op een logaritmische frequentie-as. Alleen die laatste correspondeert met gehoormatig gelijke afstanden.

(2)
de toon moet exponentieel stijgen. Lineaire stijging is onmogelijk. Deze fout wordt vaak gemaakt. Je hoort dan altijd een plotseling verandering in de stijging van de tonen. Onderstaande figuur laat zien wat er gebeurt als je twee kopieën van een lineair stijgende frequentiecomponenten naast elkaar legt. Exponentiële stijging is in muziek de norm, zie toetsen piano of effect pitch bender, want exponetiële stijging doet voor je gehoor juist "lineair" aan.

(3)
de tonen moeten voor je gehoor gelijkmatig in- en uitfaden. De omhullende van het volume moet dus symmetrisch zijn als je uitgaat van een logaritmische frequentie-as.
(4) als basis-toon kun je zowel een sinus gebruiken als ruis die door een zeer steil-flankig banddoorlaatfilter is gehaald.

Je kunt een Shepardtoon goed beschouwen als een "canon in de priem", zoals Vader Jacob. De "melodie" is hier een expontieel stijgende sinustoon die heel geleidelijk eerst harder en dan weer zachter wordt. Een Shepard ontstaat door meerdere van zulke "melodieën" op onderling gelijke tijdstippen te laten inzetten en te mixen. Er bestaat dan dus helemaal geen laspunt...

Hieronder de WaveWizard preset waarin de sinustoon als basis is gebuikt (ook de ruis-versie zit in de code en kun je activeren door het uitroepteken te verwijderen bij de ruis-code en een uitroepteken te plaatsen voor de sinuscode). Het geluidsvoorbeeld is eveneens de sinusvariant. Elke volgende "stem" zet in als de vorige een vierde deel van het octaaf heeft afgelegd (en dus een kleine terts is geklommen).
 

Attachments

  • Shepard Glissando_2.mp3
    2,1 MB · Bekeken: 141
  • Preset_Shepard glissando 2.txt
    4 KB · Bekeken: 158
  • sonogram foute Shepard.jpg
    sonogram foute Shepard.jpg
    106,5 KB · Bekeken: 150
  • Barber-pole.gif
    Barber-pole.gif
    228,1 KB · Bekeken: 141
(1) de frequentiecomponenten dienen op gehoormatig gelijke afstanden van elkaar te liggen...
(2) ... Lineaire stijging is onmogelijk. Deze fout wordt vaak gemaakt. Je hoort dan altijd een plotseling verandering in de stijging van de tonen.
(3) de tonen moeten voor je gehoor gelijkmatig in- en uitfaden...
Hieronder toch een voorbeeld van die onmogelijke "Lineaire stijging ...", deze is reeds 3 maal ge-loop-ed.
Een niet-gelust-origineel staat op m'n website in wav-formaat (Zie : Een eeuwige stijgende toon... met verdere uitleg).
WaveGuide7, laat de luisteraar nu maar verder zelf oordelen of deze eeuwig lineaire stijging onmogelijk is of niet. :engel:
 

Attachments

  • 3 x stijgende toon.mp3
    980,4 KB · Bekeken: 158
Wel, beste audio, aangezien ikzelf ook een luisteraar ben :) kan ik je vertellen dat in jouw Shepard op tijdstippen 20 en 40 seconde alle octaven plotseling een duwtje in de rug krijgen en sneller beginnen te stijgen dan daarvoor.
Dat is met lineaire stijging dan ook onvermijdelijk....
 
Wel, beste audio, aangezien ikzelf ook een luisteraar ben :) kan ik je vertellen dat in jouw Shepard op tijdstippen 20 en 40 seconde alle octaven plotseling een duwtje in de rug krijgen en sneller beginnen te stijgen dan daarvoor.
Dat is met lineaire stijging dan ook onvermijdelijk....
De wave-file is 20 seconden lang, nadien wordt deze gewoon terug vanaf de start herhaalt (loping dus). Alles verloopt constant aan éénzelfde snelheid.
Luisteraars die over CoolEdit of andere software beschikken die de wav-file in een perfecte loop kunnen weergeven zullen dit ook kunnen vaststellen.
 
Back
Top