Erleuchtet von Max Skripten (nun gut, von seinen Ideen zur Iteration in Core und ich habe auch bisher nur das eine Skript einige Male gelesen) und gut erholt, sollte ich die Skripte noch mal und noch viel intensiver durchgehen. Aber schon das erste Skript, was ich "durchgearbeitet" habe, hat mir regelrecht einen Schub verpasst.
Jetzt bin ich geradezu in Implementierungswut und muss mich leider auch manchmal fragen: Ist das nützlich? Wozu brauche ich das?
Bspw. habe ich ein Makro gebastelt, dass zwei Arrays faltet und das Ergebnis in einem neuen Array ablegt. Ein anderes berechnet das Betrags- und Phasenspektrum. s.u.
Daneben habe ich noch viele andere nützliche Operationen auf Arrays.
Aber irgenwie will mir kein konkreter Einsatzzweck einfallen. Also mir ist klar, welch Anwendung diese Techniken haben. Nur ich muss mir noch eine Herangehensweise überlegen, wie man damit was in Echtzeit anfangen kann.
Wer rumspielen mag, der kann ja mal andere Wellenformen in die Tables ("conv" bzw. "DFT", zu finden in der Event Core Cell) laden.
Grüße Benni
Edit: DIe Strukturen befinden sich noch in Testphase, sind also nicht sehr gepflegt.
Operation auf Arrays (Partials Framework)
Moderator: herw
- Rampensau
- meister
- Beiträge: 192
- Registriert: 6. Dezember 2009, 20:32
Operation auf Arrays (Partials Framework)
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Einstieg und Weiterführendes in Core:
OSZILLATOREN [1] BASISWELLEN, OSZILLATOREN [2] ALIASING, OSZILLATOREN [3] WAVETABLES
OSZILLATOREN [1] BASISWELLEN, OSZILLATOREN [2] ALIASING, OSZILLATOREN [3] WAVETABLES
- herw
- moderator
- Beiträge: 3123
- Registriert: 13. März 2006, 18:28
- Wohnort: Dortmund
Re: Operation auf Arrays (Partials Framework)
sieht interessant aus, muss ich mir mal in den nächsten Tagen ansehen.
Ich habe so eine Ahnung, dass du nun hier weiter machen solltest: aber da bist du schon weiter, als ich es zur Zeit bin.
ciao herw
Ich habe so eine Ahnung, dass du nun hier weiter machen solltest: aber da bist du schon weiter, als ich es zur Zeit bin.
ciao herw
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
- Rampensau
- meister
- Beiträge: 192
- Registriert: 6. Dezember 2009, 20:32
Re: Operation auf Arrays (Partials Framework)
Daran habe ich mich bisher noch gar nicht rangetraut. Ich habe mir eigentlich vorgenommen, vorher die anderen Libs kennen zu lernen, bevor ich mich an die Partials wage. An den Modulbezeichnungen kann ich bisher nur ahnen, welche Möglichkeiten diese Bibliothek liefert. Ist die ausschließlich zur Klangsynthese mit den Primary Bank-Modulen gedacht?
Ich bin ja noch relativ am Anfang in dem Bezug.
Ich stoße bisher auch noch an viele Probleme. Bspw. kämpfe ich bei der Fourier-Analyse gerade mit dem Frequenz-Zeit-Dilemma (was jetzt nicht direkt mit dem Framework zusammenhängt). Ich kriege aus N Abtastwerten nur N/2 Harmonische.
Und je mehr Abtastwerte zu analysieren sind, desto mehr Echtzeitfähigkeit geht verloren, wenn man dann noch dynamische Änderungen im Frequenzbereich vornehmen will.
Gut ist, die diskrete Fourieranalyse unterscheidet sich nur durch einen Faktor von der diskreten Fouriertransformation. Und von dort aus, ist es nur ein paar Optimierungen von der FFT entfernt.
Ich hab des Ehrgeizes halber mal die inverse Fourieranalyse, sprich eine Fourier-Synthese implementiert. Das Modul unterscheidet sich nicht groß von der Fourieranalyse. Ich glaube das Modülchen macht das Sine-Bank-Modul für mich erstmal obsolete.
Die Arrays mit den Spektralwerten werden bis zu einem bestimmten N ausgelesen und in den Zeitbereich transformiert. Hier hab ich ein bisschen getrickst und die Eigenschaften reeller Zeitsignale angewendet. Also allgemein ist das noch nicht.
Das Array mit den neuen Datenpunkten wird ausgelesen und in eine Audio-Core-Cell transportiert. Dort werden die Datenpunkte linear interpoliert ausgeben.
Das alles soll dynamisch, also abhängig von der angeschlagenen Tonhöhe geschehen. Ich glaube für das Problem mach ich einen neuen Thread auf. In diesem Ensemble sieht man nämlich wunderbar, wie Events der internen Computertastatur vom GUI-Thread verarbeitet werden und Events durch externe MIDI-Signale durch den Audio-Thread verarbeitet werden.
Bei MIDI-Signalen gibt es jedes Mal einen CPU-Peak. Was bei einer großen Menge an Berechnungen nicht verwundert, jedoch sicherlich irgendwie zu handlen ist.
Es leckt auch noch an anderen Stellen. Das Modul ist ja auch noch ne Baustelle. Aber eine, die schon brauchbare Ergebnisse, nämlich wunderbar aliasunterdrückte Signale liefert. Core macht mit dem Framework erst richtig Spaß!!
Ich bin ja noch relativ am Anfang in dem Bezug.
Ich stoße bisher auch noch an viele Probleme. Bspw. kämpfe ich bei der Fourier-Analyse gerade mit dem Frequenz-Zeit-Dilemma (was jetzt nicht direkt mit dem Framework zusammenhängt). Ich kriege aus N Abtastwerten nur N/2 Harmonische.
Und je mehr Abtastwerte zu analysieren sind, desto mehr Echtzeitfähigkeit geht verloren, wenn man dann noch dynamische Änderungen im Frequenzbereich vornehmen will.
Gut ist, die diskrete Fourieranalyse unterscheidet sich nur durch einen Faktor von der diskreten Fouriertransformation. Und von dort aus, ist es nur ein paar Optimierungen von der FFT entfernt.
Ich hab des Ehrgeizes halber mal die inverse Fourieranalyse, sprich eine Fourier-Synthese implementiert. Das Modul unterscheidet sich nicht groß von der Fourieranalyse. Ich glaube das Modülchen macht das Sine-Bank-Modul für mich erstmal obsolete.
Die Arrays mit den Spektralwerten werden bis zu einem bestimmten N ausgelesen und in den Zeitbereich transformiert. Hier hab ich ein bisschen getrickst und die Eigenschaften reeller Zeitsignale angewendet. Also allgemein ist das noch nicht.
Das Array mit den neuen Datenpunkten wird ausgelesen und in eine Audio-Core-Cell transportiert. Dort werden die Datenpunkte linear interpoliert ausgeben.
Das alles soll dynamisch, also abhängig von der angeschlagenen Tonhöhe geschehen. Ich glaube für das Problem mach ich einen neuen Thread auf. In diesem Ensemble sieht man nämlich wunderbar, wie Events der internen Computertastatur vom GUI-Thread verarbeitet werden und Events durch externe MIDI-Signale durch den Audio-Thread verarbeitet werden.
Bei MIDI-Signalen gibt es jedes Mal einen CPU-Peak. Was bei einer großen Menge an Berechnungen nicht verwundert, jedoch sicherlich irgendwie zu handlen ist.
Es leckt auch noch an anderen Stellen. Das Modul ist ja auch noch ne Baustelle. Aber eine, die schon brauchbare Ergebnisse, nämlich wunderbar aliasunterdrückte Signale liefert. Core macht mit dem Framework erst richtig Spaß!!
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Einstieg und Weiterführendes in Core:
OSZILLATOREN [1] BASISWELLEN, OSZILLATOREN [2] ALIASING, OSZILLATOREN [3] WAVETABLES
OSZILLATOREN [1] BASISWELLEN, OSZILLATOREN [2] ALIASING, OSZILLATOREN [3] WAVETABLES
- Rampensau
- meister
- Beiträge: 192
- Registriert: 6. Dezember 2009, 20:32
Re: Operation auf Arrays (Partials Framework)
Ich hatte außerdem in dem DFA-Makro nen kleinen Fehler ausgemerzt, der im oberen Ensemble (Posting 1) noch vorhanden ist.
Und zwar ist das Argument, bzw. der Exponent bei der Berechnung der Fourierkoeffizienten negativ. Ansonsten ist das Resultat der Fouriersynthese invertiert.
Und zwar ist das Argument, bzw. der Exponent bei der Berechnung der Fourierkoeffizienten negativ. Ansonsten ist das Resultat der Fouriersynthese invertiert.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Einstieg und Weiterführendes in Core:
OSZILLATOREN [1] BASISWELLEN, OSZILLATOREN [2] ALIASING, OSZILLATOREN [3] WAVETABLES
OSZILLATOREN [1] BASISWELLEN, OSZILLATOREN [2] ALIASING, OSZILLATOREN [3] WAVETABLES
- Rampensau
- meister
- Beiträge: 192
- Registriert: 6. Dezember 2009, 20:32
Re: Operation auf Arrays (Partials Framework)
Meine Fourieranalyse und -synthese-Module arbeiten nun wie erwartet. Für reelle und komplexe Signale (in Arrays). Wow, ich bin erstaunt, wie genau die Reynthese ist. Sogar die Überschwinger verschwinden durch die additive Resynthese. Jetzt wage ich mich an die FFT. N^2 komplexe Flops sind mir noch ein bisschen zu viel je Transformation.
Wie soll man so eine Menge an Daten in Echtzeit verarbeiten, also pro SR-Clock?
Grüße Benni
Wie soll man so eine Menge an Daten in Echtzeit verarbeiten, also pro SR-Clock?
Grüße Benni
Einstieg und Weiterführendes in Core:
OSZILLATOREN [1] BASISWELLEN, OSZILLATOREN [2] ALIASING, OSZILLATOREN [3] WAVETABLES
OSZILLATOREN [1] BASISWELLEN, OSZILLATOREN [2] ALIASING, OSZILLATOREN [3] WAVETABLES
- Rampensau
- meister
- Beiträge: 192
- Registriert: 6. Dezember 2009, 20:32
Re: Operation auf Arrays (Partials Framework)
Audio ist erstmal abgekoppelt. In dem Ensemble kann man nur sehen, wie schön sich die Wellenformen aus ihren Harmonischen zusammensetzen und staunen, wie schnell man bis zu 128 Sinüsse (eigentlich 256) zusammenaddieren kann. Stichwort: Additive Synthese (breitbandig ).
Ja mei, das wird ein schöner runder Abschluss (vorerst) für das Oszillatorprojekt.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Einstieg und Weiterführendes in Core:
OSZILLATOREN [1] BASISWELLEN, OSZILLATOREN [2] ALIASING, OSZILLATOREN [3] WAVETABLES
OSZILLATOREN [1] BASISWELLEN, OSZILLATOREN [2] ALIASING, OSZILLATOREN [3] WAVETABLES
- Rampensau
- meister
- Beiträge: 192
- Registriert: 6. Dezember 2009, 20:32
Re: Operation auf Arrays (Partials Framework)
ich musste noch zwanghaft mein FFT-Applet etwas pflegen. Mittlerweile werden schon 1024 Samples ganz gut mit einer radix-4-fft ausgewertet.
An der Darstellung habe ich auch etwas gepfeilt.
An der Darstellung habe ich auch etwas gepfeilt.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Einstieg und Weiterführendes in Core:
OSZILLATOREN [1] BASISWELLEN, OSZILLATOREN [2] ALIASING, OSZILLATOREN [3] WAVETABLES
OSZILLATOREN [1] BASISWELLEN, OSZILLATOREN [2] ALIASING, OSZILLATOREN [3] WAVETABLES
- Rampensau
- meister
- Beiträge: 192
- Registriert: 6. Dezember 2009, 20:32
Re: Operation auf Arrays (Partials Framework)
Ich habe gestern das Update gemacht. Von Reaktor 6 bin ich ja total begeistert. Das TF-Toolkit eignet sich ja super, um die komplexwertige Mathe elegant mit "Bordmitteln" zu implementieren. Die komplexen Operatoren scheinen in "Libary>Audio>Filter>Transfer Func>TF Toolkit" aber leider irgendwie deplatziert in der Library. Ein Cplx-Math Zweig neben den Math-Modulen ist irgendwie schöner. Aber ich mausere ja wieder nur.
Das Update finde ich sehr gelungen, was sich leider gar nicht mit meinem Stundenplan vereinbart. Alleine die überarbeitete Core-Library ist das Update Wert.
Das Update finde ich sehr gelungen, was sich leider gar nicht mit meinem Stundenplan vereinbart. Alleine die überarbeitete Core-Library ist das Update Wert.
Einstieg und Weiterführendes in Core:
OSZILLATOREN [1] BASISWELLEN, OSZILLATOREN [2] ALIASING, OSZILLATOREN [3] WAVETABLES
OSZILLATOREN [1] BASISWELLEN, OSZILLATOREN [2] ALIASING, OSZILLATOREN [3] WAVETABLES