Aufgrund einer Nachfrage in diesem thread: Beitrag "Digital Waveguide Oscillator - Octave?" Hier ist eine einfache Möglichkeit, mit wenig Rechenaufwand einen ausklingenden Zupfklang, wie bei Zitter, Gitarre oder ähnlich zu erzeugen. Je nach Einstellung kann es aber auch ganz anders klingen. Urspünglich ist es mal auf einem 8Bit Controller der 90er gelaufen. Die Methode funktioniert mit einem rückgekoppelten RAM, wie es auch der Karplus-Strong verwendet und gehört auch zu den dort angefragten "wave guide"-Verfahren. Allerdings verwendete ich damals mehrere Schleifen und eine negierte Rückführung, welche einerseits ein symmetrisches Signal erzeugte und andererseits zusammen mit den Filtern eine Stabilisierung der Funktion durch Verluste ermöglichte. Die Rückkopplungen wurden dazu verwendet, bestimmte Frequenzen zu betonen, wie es auch die eingespannte Seite tun würde. Insbesondere kann man damit die Musikalität des Signals beeinflussen. Je nach Abgriff kann man dabei auch phasenbewegte Oberwellen erzeugen. Diese sind zwar zunächst nicht unbedingt hörbar, wirken sich aber auf die lokale Amplitude aus und damit auf nachgeschaltete nichtlineare Stufen in Synthesizern. Begrenzer z.B. können damit flexibel angesteuert werden. Im Beispiel wurde die zweite Oberschwingung (Abgriff bei n/2) positiv - und die dritte Oberwelle (Abgriff n/3) negiert rückgeführt, um dem durch die Rückkopplung bei n insgesamt aufgeprägten Rechteckverhalten die erste Fourierfrequenz zu nehmen. Damit kann man im Gegensatz zu einer Rückführung mit EQ die Schärfe des Klangs sehr fein einstellen. Die Rückführungen wurden mit z.B. Faktoren 64, 128 etc. dividiert, um sie abzuschwächen. Das geht heute sicher etwas feiner. Zur Erklärung: In der ersten Summation werden die Signale zusammengeführt. Es ist dabei darauf zu achten, dass nicht mehr, als ein Wert von 100% entsteht, weil der Filter sonst aufschwingt. 100% sind der maximale Binärwert, mit dem gespeist wurde, seinerzeit 16 Bit signed INT. Die zweite Summation aus neuem und altem Wert realisierte einen einfachen IIR-Filter. Das kann man bei den heutigen Möglichkeiten eines AVR auch anders mit einem FIR lösen, wenn man Rechenzeit spendieren möchte. Wird z.B. mit 0,998 (statt 0,999) und 0,001 gearbeitet, wird das System mit jedem Durchlauf etwa 0,1% Energie verlieren. Um bei einer Ganzzahlrechnung die möglichen "Ecken" durch die Rechenfehler etwas zu glätten, kann man beim Rückführen statt z.B. des Wertes n/2, zusätzlich auch einige Nachbarn verwendeen und den Teiler entsprechend anpassen. (angedeutet in der Grafik mit den Zusatzpfeilen). Mit dem genauen Abgriff kann man etwas Spielen: Nimmt man z.B. ein 64er RAM und greift jeweils 4 Werte, um sie zu glätten, dann wirkt die Rückwirkung über (63 ... 60) - (3...0) ca. 60 Speicherplätze. Damit wären Teiler von 2,3,4,5 und 6 möglich, um musikalisch interessante Oberwellen zu erzeugen. Man kann nun die Abgriffe punktgenau setzen (Zwischenplätze per Interpolation) oder gezielt leicht an der richtigen Oberwelle vorbei designen. Damit entsteht eine zusätzliche Glättung / Schwebung. Ist ein wenig schwer zu beschreiben. Für das genaue Tuning der Frequenzen und Oberwellen braucht man wenigstens die 6fache Zahl (Faktoren 1,2,3) der sonst üblichen Speicherplätze. Diese finden sich z.B. in dieser Tabelle: Beitrag "Re: CPLD als Top Octave Generator nutzen?"
Wie bei dem KP-Algo auch, wird das RAM mit einem Impulsfile geladen, dessen Oberwellen sich langsam abbauen. Die Energie wird - soweit sie nicht durch Verluste abgebaut - in die NF umgesetzt. Als Ladekurve für 64 Speicherzellen wurde im Beispiel eine gespannte Saite verwendet, deren Punkte sich ausgehend von der Mitte mit Startwert 99 näherungsweise so beschreiben lässt: Y(32) = 99; Y(x) = 0,905 * Y(X-1) -0,5. Die erste Hälfte gespiegelt. Dann ergibt sich die erste Periode in der Kurve im Bild links oben. Weiter hinten sind dann die sich ergebenden Schwingungen dargestellt, wie sie sich dem Sinus nähern. Anders, als der KP emitiert der Algo immer wieder auch die zweite und vor allem die dritte Oberwelle. Damit wird der Klang hinten nicht stumpf.
Ich bin mit dem link in den falschen Beitrag gerutscht. Die Tonfrequenzen werden weiter unten gelinkt: Die notwendigen Teiler für eine gute Tonleiter findet man bei den grünen hier: http://www.96khz.org/htm/pldmodularorgan.htm
Hallo Jürgen, Du könntest hier vielleicht noch einen Beispielton einstellen, damit man das ganze auch mal hören kann.
Die Frage habe ich kommen sehen. Die Tönchen, die ich damit gemacht habe, sind seinerzeit auf einem TMS320 gelaufen, teilweise in der Chammi: http://www.96khz.org/htm/chameleonsynth.htm Da habe ich aktuell nichts an isolierten Aufnahmen parat. Ich könnte aber mal was im FPGA-Synthie nachstricken. Standardmäßig habe ich das nicht drin, da schon vor langer Zeit rausgeworfen, weil die Klangqualität eben nicht so dolle ist und heute dank Rechenpower auf flexbilere Verfahren zurückgegriffen werden kann. Es ist halt eine Rechenzeitspartechnik.
Sodele, auf die Schnelle eine Aufnahme mit 5 Sounds gestrickt mit dem hier: http://96khz.org/images/beatmorph2.gif Die Ladekurve ist eine logarithmisch abfallende Funktion von 1 bis praktisch 0 samt Spiegelung. 12ms lang. Rückkopplungen bei 4ms und 6ms. 1. Purer Klang der Exponentialfunktion und einfacher Rückführung 12ms mit Simple-EQ im "KP-Modus". 2. Gleiche Kurve mit 4ms (dritte Oberwelle) und angepasstem EQ. 3. Gleiche Kurve mit 6ms (zweite Oberwelle) und angepasstem EQ. 4. Sonderabgriff bei 12ms und 11.9ms -> Schwebung / Phasing 5. Nur die 2. und 3. Oberwelle ohne Grundwellenabgriff
Und weil es soviel Spass macht, noch eines mit einem Dreifach Feedback RAM: (Die Sample RAMs von oben einfach hintereinander geschaltet). 4 Töne: 1. Rauschen von 12ms, mit einfachem Feedback 0,99 auf linken und rechten Kanal mit Panning 25%, also leichtes Stereo - überwiegend noch Mono. 2. Jetzt das Feedback 1 auf 11,9ms einstellen, d.h. 2 Abgriffe für linken / rechten Kanal getrennt -> Phasing Stereo Sound Diesen Doppelausgang des ersten RAMs in das zweite geben und ab jetzt in Stereo, also zweimal parallel prozessieren: 3. Feedback mit 4ms auf den einen Kanal, 6ms auf den anderen Kanal. Beide mit 50% hinzumischen Es entstehen starke Betonungen der 3. und 2. Oberwelle Diesen Doppelausgang des zweiten RAMs in das zdritte geben und wieder zweimal parallel prozessieren: 4. Ein Echo mit 499ms und 749ms bei maximalem Panning links und rechts. Entspricht bei den 4 Sekunden Länge einem rhytmischen Takt. Die 1ms Offset gegenüber dem theoretischen Wert erzeugen noch einen weiteren Stereoeffekt, da die Reflektion auf der Gegenseite etwas früher eintrifft, als der repetierte Klang aus dem Mono. Mit mehr, als 12ms kann man auch Lücken erzeugen, d.h. man lässt der Adresspointer doppelt so weit laufen. Erzeugt Scattering und untertönige Frequenzen. Auch mit den Echos kann man noch spielen. Braucht halt etwas RAM. Zumindest die beiden ersten Stufen müssten sich mit einem AVR leicht machen lassen. Die EQs sind einfach IIR, jeweils händisch angepasst, damit der typische Gitarrenanschlag entsteht.
Danke für die Beispiele, sie klingen ganz interessant. Julius O.Smith III hat die Waveguides hier ziemlich ausführlich behandelt: https://ccrma.stanford.edu/~jos/pasp/
Die Idee mit dem Karplus-Strong ist ja ziemlich alt und das wave guiding gründet sich irgendwo darauf (oder umgekehrt). Benutzt das eigentlich jemand aktiv? Ich kenne kein Keyboard, wo es eine solche Funktion hat.
Carl schrieb: > Julius O.Smith III hat die Waveguides hier ziemlich ausführlich > behandelt: Die dort gezeigte Version des KS hat aber den Nachteil, dass die Dämpfung nur dadurch vollzogen wird, dass Rundungsfehler bei der Addition der beiden Samples wirken (sollen / können). Das macht etwas unangenehme spektrale Fehler und ist sehr hart. Ich hatte da von Anfang an immmer IIR-Filter drin. Diese sind an der Stelle sehr audiotauglich. Rolf S. schrieb: > Benutzt das eigentlich jemand aktiv? https://www.ugoaudio.com/index.php/vst-plugins http://www.vst4free.com/free_vst.php?plugin=Phyzmod&id=1638 Win32 ... naja. Gibt aber auch einen für Ableton auf YT. Kenne ich aber nicht. https://www.youtube.com/watch?v=YLwDKyOHhAY So wie sich das Video anhört, klingt das weder nach eine Gitarre, noch nach einer brauchbaren SynGit für Electro. Hat eher klangliche Züge der 8-Bit-Ära.
Jürgen S. schrieb: > wie es auch die eingespannte Seite tun würde. Saite :-) Jürgen S. schrieb: > Die Methode funktioniert mit einem rückgekoppelten RAM, wie es auch der > Karplus-Strong verwendet und gehört auch zu den dort angefragten "wave > guide"-Verfahren. Waveguides arbeiten aber so, dass es eine invertierende und eine nicht invertierende Reflektion gibt. Die ist bei dir nicht zu finden. Karpuls-Strong ist auch insoweit anders, als dass das Signal positiv zurückgeführt wird und nicht wechselt. Carl schrieb: > Waveguides hier ziemlich ausführlich Oder hier: https://www.dsprelated.com/freebooks/pasp/Digital_Waveguides.html
Martin K. schrieb: > Waveguides arbeiten aber so, > Karpuls-Strong ist auch insoweit anders, Deshalb hatte ich meine Architektur auch nicht so genannt. Schaut man sich den KP genauer an, dann arbeitet er mit einer RAM-Vorbelegung, die angeblich aus perfektem Rauschen besteht. Wenn das aber keinen offset hat, dann bekommt man nur einen zufälligen Inpuls in das System. Die Anfangsamplitude ist nicht so klar definiert. Deshalb arbeiten WG gerne mit einem offsetbehafteten Signal in der oberen Hälfte und einem invertierenden Pfad. Die Welle läuft dann positiv hin und her. Ich (brauche nicht, aber) verwende gegenüber dem KP einen Offset und habe die doppelte Aussteuerung mit gut definierter Anfangsamplitude. Durch die generell invertierenden Rückführung, brauche ich auch nicht den doppelten Pfad, wie bei klassisches wave guides und mein Ton ist damit im Vergleich bei gegebener RAM-Länge eine Oktave tiefer. Positiv formuliert: Ich komme für die gleiche Frequenz mit dem halben RAM aus. Nachteil: Ich kann die Tonhöhe ihn nur halb so genau ganzzahlig tunen. Zudem habe ich das theoretische Problem, dass der Anfangsimpuls bei einem KP doppelt so lang ist. (Bei den WGs i.d.R. auch). Nachteil 1 ist bei der einfachen Tonerzeugung keiner und kann bei höheren Ansprüchen durch die ohnehin notwendige Interpolation mit gelöst werden. Nachteil 2 erledige ich in der Praxist damit, dass ich das RAM mit einem variabel langen Impuls vorbelege. Der kann kürzer sein, als die RAM-Länge oder auch länger und damit das RAM länger anregen, als es zeitlich wirkt. Es gibt zwar ein overlap in Form einer Stufe, die kann aber per Sprung-Modulation oder einem einfachen Fenster entschärft werden. Damit ist meine Transiente wesentlich besser gestaltbar und auch nicht von der RAM-größe = Tonhöhe abhängig.
Jürgen S. schrieb: > und mein Ton ist > damit im Vergleich bei gegebener RAM-Länge eine Oktave tiefer. Ist das patentiert oder sonst in einer Weise geschützt?
Harald E. schrieb: > Ist das patentiert oder sonst in einer Weise geschützt? Da ist mir nichts bekannt. Es gibt dazu eine Reihe von Abwandlungen. Meine hatte ich seinerzeit auf der Webseite publiziert, ein Patent wäre abgelaufen. Das Originalpatent ist glaube ich aus den 80ern und schon zweimal abgelaufen. Die Methode ist auch nicht mehr Standard in der Wellensynthese, weil das einfacher und besser geht. Will man nämlich eine Frequenz sehr genau einstellen und auch noch mit Vibrato versehen, muss man den rückgeführten Wert stark filtern und zwischen-interpolieren, um Phasensprünge zu vermeiden. Im FPGA geht das halt sehr einfach, weil man extremen Bandbreiten-overhead hat.
Nachtrag dazu: Die Idee von K/S ist von 1984 und das Patent von 1987. Es bezieht sich auch ausdrücklich auf die Anwendung in der Musik, da die beiden Grundfunktionen, nämlich IIR-Filter und RAM-Delay natürlich weit bekannt waren. Solche Filteranordnungen wurden zuvor schon in der Radar- und HF-Technik benutzt. Gitarre hatte halt noch keiner damit gemacht :-) Weitere Infos zum Nutzung und Funktion solcher WG-Filter: Beitrag "Re: VCF für μC-Synthesizer - wave guide filtering"
Jürgen S. schrieb: > Nachteil: Ich kann die Tonhöhe ihn nur halb so genau ganzzahlig tunen. Folgt man den Beschreibungen der Columbia-Seite ist das auch nicht zwingend erforderlich. Es würde mit einem Filter auch per Zwischeninterpolation zu zu machen sein. Für mich stellt sich damit die Frage wozu überhaupt soviele Speicherstellen benötigt werden, wenn doch interpoliert werden kann / muss. ?
Jemand schrieb: > Folgt man den Beschreibungen der Columbia-Seite ist das auch nicht > zwingend erforderlich. Was, die Ganzzahligkeit der Speicherstellen? >Es würde mit einem Filter auch per Zwischeninterpolation zu machen sein. Generell ja, man kann das beliebig genau machen, wenn man interpoliert und genau das machen die meisten wave guide Verfahren ja auch. Dieser Algo wurde aber erfunden, um nicht oder wenig rechnen zu müssen. >Für mich stellt sich damit die Frage wozu überhaupt soviele > Speicherstellen benötigt werden Meine unter anderem, weil digitale Filter um so genauer sind, je mehr Samples sie bei der Berechnung ins Spiel bringen. Ansonsten bringt der Filter selber wieder seine Charakteristik in den Klang hinein. Praktisch braucht man bei FIRs z.B. eine Länge, die in Anrechnung der Abtastfrequenz zu einer Zeitspanne führt, die in der Größenordnung Periode derjenigen Welle liegt, oberhalb der man filtern möchte. Man kann aber einen CIC nehmen und hinnehmen, dass dessen Oberwellen in dem Signal betont werden. Damit das aber sinnvoll passiert, muss die Länge um so genauer stimmen. Oder man interpoliert besser, dann aber macht der CIC wieder keinen Sinn.
J. S. schrieb: > je mehr > Samples sie bei der Berechnung ins Spiel bringen. Durch die Zahl der Samples steigt aber diesbezüglich die Genauigkeit nur in sehr engen Grenzen, weil ein Sample bekanntlich eine fest definierte Periode definiert, z.B. bei 1/44kHz etwa 20us. Das lässt sich also nicht beliebig verfeinern.
Ja klar, ab einer gewissen Länge des Filters wird das nicht mehr genauer. Ab da muss man eben die Samplefrequenz erhöhen. Allerdings möchte ich nochmal herausstellen, dass die Genauigkeit der Periode nicht direkt durch die Samples, sondern die Koeffizienten des Filters bestimmt werden und da lassen sich durchaus subsample-Werte einstellen. Es braucht natürlich ordentliche FIR-Koeffizienten und nicht einfach nur lineare Interpolation.
Das ganze verhält sich wohl, wenn man mal über die Symmetrie-, Spiegel-, Rückwärts, Rekursiv-, oder Happy-Schnippel-Orgien, oder den mathematischen Problemen wie Nullstellen usw. usw. hinwegsieht, ähnlich wie Multisamples. Samples selber sind sowieso immer statisch, weswegen es sich empfiehlt, mit möglichst feinen Auflösungen zu arbeiten. (Ein Multi-Sample verhindert zumindest ganz gut den Micky Maus-Effekt, aber ein sehr fein aufgelöstes Multisample, also jede Taste auf dem E-Klavier hat ein eigenes Sample, bleibt weiterhin ein Sample, und so auch statisch. Dem muss man anderweitig, und zwar mit allem, (wirklich allem!) was man so zur Verfügung hat, entgegenwirken, sonst bleibt das ganze statisch und .. naja, tot irgendwie.) Ein anderer, wirklich erfolgreicher Weg ist ja auch noch Physical Modelling wo sich dann auch Vorteile ergeben, je genauer die "Auflösung" ist, bzw. je höher die Anzahl der Parameter. Oder noch platter: Lautstärke-Regler, stufenlos vs 10 Einstellmöglichkeiten. Beim Korg Poly 61 gab es jeweils nur 7 Stufen mit Tipp-Tastern für z.B. Filter und Resonanz. Allerdings gab es bei Korg auch Umbau-Kits (auf analog). Technisch gesehen hätte auch eine höhere Auflösung und ein Drehregler gereicht. Andererseits: der Poly 61 Synth klingt sehr gut und hat nützliche Arpeggiatior-Goodies - und macht so die etwas eingeschränkte Situation einigermaßen wett. (https://www.youtube.com/watch?v=LTrk4X9ACtw)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.