WaveWizard

En hier een Claviaanse gedachte daarover:
 

Attachments

  • Roland_Kuit_Dtest Phaser.jpg
    Roland_Kuit_Dtest Phaser.jpg
    23,5 KB · Bekeken: 179
  • Delay test Phaser.pch2
    1,1 KB · Bekeken: 202
analoog en digitaal, denk ik zo.....
( het complete filtergedeelte analoog, en de delay digitaal)

:mega:

Moet het circuit dan niet een DA- en een AD-converter hebben, waarin het signaal, vanwege de feedbacklus van de All Pass, voor en na elke delay-doorgang getransformeerd wordt van digitaal naar analoog en weer terug? Treedt daarbij geen signaalruis-fout op die bij elke doorgang verder toeneemt?
 
:eureka:
Als je er een paar van achter elkaar zet, heb je Schroeder-galm!
(Ik vraag me af hoe Schroeder zelf dat eigenlijk deed in de jaren 60, een delaylijn zonder ad/da...)
 
hij heeft ook ad/da converters gebruikt, die had je toen ook al ( waren alleen een beetje prijzig...:D)
:mega:

:eureka:
Als je er een paar van achter elkaar zet, heb je Schroeder-galm!
(Ik vraag me af hoe Schroeder zelf dat eigenlijk deed in de jaren 60, een delaylijn zonder ad/da...)
 
Thx audiocollage.
Een van de meest gebruikte bronnen over galm, waarop ook het Feedback Delay Network van WaveWizard is gebaseerd: https://ccrma.stanford.edu/realsimple/Reverb/.:mega:

Dat was wel een goeie link, maar niet wat ik bedoelde.
Moet zijn:
https://ccrma.stanford.edu/~jos/pasp/Artificial_Reverberation.html

Dat pasp is een afkorting van Physical Audio Signal Processing van Julius Orion Smith, al vele malen genoemd, het boek over Physical Modeling van muziekinstrumenten. Naast papieren versie ook geheel online, gratis.
 
Stuursignalen in WaveWizard

Stuursignalen in WaveWizard

Nog even die vreselijk lange formule van #579:
Code:
S2[n] = -a*sin(w*n)*S1[n] + S1[n-(N+0,001*n)] + a*sin(w*n)*S2[n-(N+0,001*n)]


Het is gemakkelijker om zo'n regel code te bedenken en neer te schrijven dan om naderhand terug te lezen.
Dat is een van de vele redenen waarom zulke lange coderegels niet echt zijn aan te bevelen. Een andere reden is dat nu in één formule twee berekeningen twee maal worden uitgevoerd. Daarom is het beter om stuursignalen apart aan te maken, zodat ze ook geen rekentijd meer vragen. Door de automatische interpolatie-eigenschap van WaveWizard kun je gemakkelijk quasi-continue stuursignalen bouwen, zoals al eerder beschreven, zie https://www.synthforum.nl/forums/showpost.php?p=1539260&postcount=265 en #267.
Ook kun je de buffer waarin je een stuursignaal aanmaakt een meer toepasselijke naam geven. Daarmee komt er voor die lange formule boven een veel korter, beter leesbaar en ook aanzienlijk sneller alternatief:

Code:
maak twee stuursignalen:
a[n] = a*sin(w*n)   
N[n] = N+0,001*n

Hiermee wordt het All Pass:
Code:
All Pass filter:
S2[n] = -a*S1[n] + S1[n-N] + a*S2[n-N]

tijdvariant All Pass filter:
S2[n] = -a[n]*S1[n] + S1[n-N[n]] + a[n]*S2[n-N[n]]
 
Brom verwijderen

Brom verwijderen

Op YouTube een serie lectures over akoestiek van de Koreaanse hoogleraar Yang-Hann Kim, met verrassende gezichtspunten, en hier en daar ook heel grappig. Helaas gaat er in lecture 4 iets mis met de transmissie van het dasspeld-microfoonsignaal; dat geeft een brom (blokgolf, 60 Hz) waarvan de sterkte afhangt van bewegingen:

Yang-Hann Kim Lecture 4-1: Forced response of string vanaf 30'
https://www.youtube.com/watch?v=W_B04ZsZX3k

Hieronder de WaveWizard code waarmee de brom wordt verwijderd. Het is een toepassing van het delay-feedforward filter van #547 (https://www.synthforum.nl/forums/showpost.php?p=1735931&postcount=547).

WaveWizard kent geen directe audio input streaming. Een van de redenen daarvan is dat er genoeg software (bv. Audacity) beschikbaar is die dat wèl kan en waarmee je kunt opslaan als WAV, die je dan vervolgens in WaveWizard via een code-instructie automatisch kunt openen.
Het voordeel van openen via een code-instructie is dat die instructie de tijdsduur van het bestand, uitgedrukt in aantal samples, opslaat in de systeemvariabele WAV_lengte die je dan verderop in de code kunt gebruiken, bijv. om het aantal bewerkingen in te stellen dat het filter moet uitvoeren. Je kunt dus code schrijven waarin je het aantal signaalbewerkingen kunt vastleggen in een variabele, waarvan je de waarde niet eens hoeft te weten of op te zoeken.

Open eerst het audio-bestand Kim Met Brom.wav:

Code:
Declareer bromfreq; N

Open WAV
  WAV naam   Kim Met Brom.wav
  vanaf      0
  duur       ?
  buffer     S1[0]

Als je slechts een fragment wil inladen, kun je de lengte daarvan (in smp) aangeven bij 'duur'. Als je het hele bestand wilt inladen, weet je meestal niet precies hoe lang het duurt; dan zet je een vraagteken achter 'duur'. In beide gevallen geeft de instructie de systeemvariabele WAV_lengte terug die het aantal samples, in dit geval van het bestand 'Kim Met Brom.wav'.

Het filterproces waarmee de brom wordt uitgeschakeld is een echo van 1/60 sec die van het directe signaal wordt afgetrokken:

Code:
bromfreq = 60 Hz 
N = Fs/bromfreq

Bewerk signaal
  n0          0
  n1          WAV_lengte
  Bewerking   S2[n] = S1[n] - S1[n-N]

Een andere nieuwe functie is dat je een wav-bestand ook via een code-instructie kunt opslaan:

Code:
WAV Opslaan
  WAV Naam   Kim Zonder Brom.wav
  bron       S2[0]
  duur       WAV_lengte
 
Dit is toch pure schoonheid!

Kan het nog mooier, vraag je je dan af. Het antwoord is verrassend: jazeker, het kan nog veel mooier!:P

Omdat het hier gaat om een brom die bestaat uit een blokgolf is een bewerking mogelijk die exact even simpel is en even snel, maar die de vervorming met 50% reduceert! In de code hieronder worden alleen de oneven harmonischen verwijderd. De even harmonischen mogen blijven want die zitten niet in het bromsignaal (blokgolf).

Let op de subtiele verschillen in de waarde van N en de formulering van het kamfilter:

Code:
bromfreq = 60              ! in Hz
N        = 0,5*Fs/bromfreq

Bewerk signaal
  n0          0
  n1          WAV_lengte
  Bewerking   S2[n] = S1[n] [B]+[/B] S1[n-N]    ! plusteken!!
 
Die "kam" is niks anders dan de "spectrum-foto" van een echo. Je kunt dat ook zonder wiskunde beredeneren. Als een toon een periode heeft die N samples duurt en je trekt van die toon een echo van af die eveneens N samples later komt, dan trek je a.h.w de toon af van zichzelf en hou je stilte over. Maar aangezien die toon boventonen heeft, weet je dat al die boventonen door het echo-effect buiten gevecht worden gesteld. Nu zien boventonen er in het spectrum uit als paaltjes die op onderling gelijke afstanden staan. Dus het echo-effect is een heel raar filter: geen low stop, of high stop of band reject, maar letterlijk een kam met tanden op onderling gelijke afstanden en verspreid over het gehele spectrum.

Heel bijzonder voor een filter is dat het kamfilter in staat is om punten op de frequentie-as, dus enkelvoudige sinustonen, te verwijderen, en wel volledig te verwijderen. Dit terwijl bekende synth-filters, zoals band pass of low stop, werken op aaneengesloten frequentiegebieden; die worden bovendien niet volldig verwijderd, maar slechts verzwakt (wel kan die verzwakking een toon volledig onhoorbaar maken).

Met een filter een bepaalde frequentie volledig uitschakelen is uitsluitend mogelijk met een feedforwardfilter, dus (eenmalige) echo-feedforward. Met echo-feedback gaat dat niet!

Als de echotijd gelijk is aan N samples, dan telt de kam ook N tanden, van 0 Hz tot de Samplingfrequentie.
Dus hoe langer de echo duurt des te meer tanden de kam heeft.

Nog een ander punt: als je een echo van het directe signaal aftrekt dan ligt de eerste tand altijd bij 0 Hz, d.w.z. dat de 0 Hz-component (DC) wordt verwijderd. Maar als je een echo bij het directe signaal optelt, dan ligt bij 0 Hz een maximum, d.z.w. dat de 0 Hz-component twee maal zo sterk wordt.

Hieronder twee kamfilters vergeleken. De blauwe grafiek heeft een echotijd die de helft korter is dan die van de rode, en heeft dus slechts de helft van het aantal tanden (nulpunten). Daarmee kun je met het minde vervorming een blokgolf verwijderen dan met de rode, want daarmee haal je ook even boventonen weg die niet in de blokgolf zitten.
.
attachment.php
 

Attachments

  • Kam Even_Oneven Amplitude respons.jpg
    Kam Even_Oneven Amplitude respons.jpg
    44,1 KB · Bekeken: 183
WaveWizard kent geen directe audio input streaming. Een van de redenen daarvan is dat er genoeg software (bv. Audacity) beschikbaar is die dat wèl kan en waarmee je kunt opslaan als WAV, die je dan vervolgens in WaveWizard via een code-instructie automatisch kunt openen.

Dat wil zeggen: WaveWizard kent wèl directe audio input streaming voor geluidsfragmenten korter dan 8 minuten.
Na een klik op de Record knop kun je geluid dat gelijktijdig door andere software (bijv. YouTube of Clavia NM) wordt afgespeeld, registreren op de sporen van WaveWizard.

Voor het bewerken van geluid met onbeperkte tijdsduur kun je gebruik maken van een lus-constructie waarin de nieuwe functie WAV Opslaan Append is opgenomen.
 
@WW, volg de thread nog steeds, bedankt nog voor je uitgebreide antwoord eerder.. goed verwoord ook. Thx! De flexibiliteit van de Wizard is me weer wat duidelijker geworden

@Roland, aan de Pacarana? ben zeer benieuwd wat je daar allemaal uit gaat halen, gezien (met de kennis van) de NM2 en hoe diep je die hebt uitgeplozen.
Wat fijn dat je die combinatie gevonden hebt met de NM2, Paca en instrumenten.. lijkt me een droom setup

Ben je er al lang mee bezig? is de Pacarana bijv al te horen in een nummer tussen je online Muziek?
 
Jim's Spaarbank

Jim's Spaarbank

@WW, volg de thread nog steeds, bedankt nog voor je uitgebreide antwoord eerder.. goed verwoord ook. Thx! De flexibiliteit van de Wizard is me weer wat duidelijker geworden

Thx Sander! :)


Jim's Spaarbank hanteert een bijzondere manier van renteberekening.
Je krijgt elke dag 97% rente bijgeschreven over het saldo van gisteren, maar daar wordt 98% van het saldo van eergisteren van afgetrokken.

attachment.php


Is het lucratief om een rekening bij Jim te openen?
Stel je legt op dag[0] een bedrag van 1000 euro in.
Op dag[1] is je saldo: 1,97 X 1000 - 0,98 X 0 = 1970 euro.
Op dag[2] is je saldo: 1,97 X 1970 - 0,98 X 1000 = 2900 euro.
...

Op dag[n]: 1,97 X dag[n-1] - 0,98 X dag[n-2] euro.

In de eerste week groeit het saldo als volgt:

Code:
                        saldo
 dag 0    0    -    0 = 1000   
 dag 1    0    -    0 = 1970   
 dag 2    3880 -  980 = 2900   
 dag 3    5714 - 1930 = 3784   
 dag 4    7454 - 2842 = 4611   
 dag 5    9085 - 3708 = 5377   
 dag 6   10592 - 4519 = 6073

Wow!! Kassa! Direct een rekening openen bij Jim! Toch?
Nee natuurlijk...
Na 45 dagen sta je meer dan 6000 euro rood...

De bewerking:
dag[n] = 1,97 X dag[n-1] - 0,98 X dag[n-2]
is dezelfde bewerking als die je uitvoert wanneer je met de computer de trilling van bijv. een stemvork maakt. Alleen zitten er dan 44100 "dagen" in elke seconde!

Bij een stemvork is ook sprake van een "eenmalige inleg". Die 1000 euro is een eenmalige puls, tik waarmee je de stemvork laat trillen. De stemvork slurpt vervolgens de energie van jouw puls al trillend geheel op. Wat je uiteindelijk overhoudt is stilte. Zo ook wiebelt je saldo op de bank van Jim richting nul.

Deze berekening noemen ze een recursie ("terugloop"), want tijdens de berekening maak je gebruik van de vorige uitkomst(en), in dit geval die van gisteren en eergisteren.
De recursie y[n] = a*y[n-1] - b*y[n-1] is de snelste manier om met een computer een sinusgolf te maken, die eventueel (zoals in dit geval) ook kan dempen. De frequentie en de dempingstijd regel je via die twee "rentepercentages" a en b.

reso-filter
Als je tussentijds ook geld kunt inleggen of opnemen, dan wordt de berekening:

y[n] = x[n] + a*y[n-1] - b*y[n-1]

waarin x[n] het inputsignaal is(inleg en opname zijn dan de positieve of negatieve uitwijkingen van een digitale geluidstrilling) en y[n] het outputsignaal.
Daarmee beschik je dan over een resonerend filter!
Daarom is die "rente volgens Jim" niets anders dan een digitale resonator.
 

Attachments

  • Jims_Bank.jpg
    Jims_Bank.jpg
    64,7 KB · Bekeken: 201
Verbijsterend, he, dat je met zo'n simpele "rente"-bewerking een (al dan niet gedempte) sinusvormige trilling kunt maken!
Hieronder een plaatje van de saldo-ontwikkeling van de eerste 200 renteberekeningen.

attachment.php


Is dit verloop wel echt sinusvormig? En is er wel echt sprake van een exponentiële demping, zoals bijv. die van een stemvork? Ja, gemakkelijk te bewijzen ook, als je de sinus ziet als projectie van een cirkelvormige beweging. (Het bewijs is heel kort en elegant als je gebruik maakt van complexe getallen.)

Stel nou, dat je op deze manier het geluid van een stemvork wilt maken, welke "rentepercentages" moet je dan gebruiken? Daarvoor zijn twee eenvoudige formules die direct voortvloeien uit dat bewijs.

Noem je de rentepercentages A en B, dan geldt dat:

A = 2*r*cos(2*pi*f/Fs)
B = -r*r

Hierin komen drie variabelen voor: r, f en Fs:

r is de dempingsfactor; daarvoor kun je elk getal kiezen dat groter is dan 0 en kleiner dan 1.
Hoe dichter r bij 1 ligt, des te langer de uitklinktijd.
Kies je r = 1, dan krijg je een pure, ongedempte sinus (dus uitklinktijd oneindig lang).

f is de frequentie van de sinustoon.
Bij een stemvork is f = 440 Hz.

Fs de samplingfrequentie.



Code:
!****************
! Preset Stemvork
!****************

Declareer A; B; r; f

f = 440
r = 0,99995

A = 2*r*cos(2*pi*f/Fs)
B = -r*r

S1[0] = 1000
Bewerk signaal
  n0          1
  n1          10 * Fs
  Bewerking   S1[n] = A*S1[n-1] + B*S1[n-2]
 

Attachments

  • Saldo volgens Jim.jpg
    Saldo volgens Jim.jpg
    8,1 KB · Bekeken: 179
Back
Top