wie wavetable organisieren?

einseinsnull

[nur noch PN]
ich remixe gerade ein alte software von mir, mit der man sowohl wavetables erstellen als auch abspielen kann, und stoße dabei auf ein grundsätzliches "organisatorisches" problem.

aktuell erzeuge und spiele ich waves aus wavetables, die alle hintereinander in einem buffer stehen, so dass man die wavetables komplett als ganz "normale" audio datei speichern und wieder öffnen kann.

die erste dimension ist die erste wave: ~

die zweite dimension spielt die abschnitte hinter der ersten ab: ~~~~~~~~~~

die waves im wavetable erreicht man dann an einer stelle, indem man sie durch eine integralzahl, die ihre position darstellt, aufruft. "7" spielt den bereich ab, der wave #7 darstellt. soweit kindergarten.

fügt man eine dritte dimension ein, geht das auch gerade noch so.

dann hast du z.b. 100 waves, gefolgt von 9900, die alle anderen denkbaren plätze einnehmen, die es in einem 100*100 2d-wavetable gibt:

~~~~~~~~~~ ~~~~~~~~~~ ~~~~~~~~~~ ~~~~~~~~~~ ~~~~~~~~~~ ~~~~~~~~~~ ~~~~~~~~~~ ~~~~~~~~~~ ~~~~~~~~~~ ~~~~~~~~~~ ...

alternativ dazu kann ein 3D-wavetable auch so aussehen, dass es nur aus einem Y-2D wavetable und einem X-2D wavetable besteht und die anderen 9801 zwischenpositionen entweder flüchtig berechnet, oder sogar erst live, einfach durch gegeneinandermischen zweier wavetable oscillatoren entstehen.


gedacht sieht das dann so aus:

~~~~~~~~~~
~
~
~
~
~
~
~
~
~

...und tatsächlich ist es einfach nur doppelt so lang wie ein einfaches 1x100 2D wavetable:

~~~~~~~~~~ ~~~~~~~~~~

die position des wavetables ist dann immer eine kombination aus den werten 0-99 für die erste achse und den werten 100, 200, 300... für die zweite achse - eine einfache matrix.

soweit ist das gerade noch irgendwie handlebar und die rechenleistung, die man zum abfahren des wavetables braucht, gerade noch zu rechtfertigen.


jetzt brauche ich aber noch eine vierte achse:)

denn je mehr schicke wellensätze ich damit erzeugen kann, desto mehr kommt auch das bedürfnis danach auf, diese ohne aliasing abzuspielen.

was natürlich nur geht, wenn man z.b. für jede oktave, auf der das später gespielt werden soll, jetzt wiederum ein eigenes 3D wavetable erstellt - wodurch sich die gesamtlänge noch mal verzehn- oder verfünfzehnfacht.

damit bekomme ich gerade ziemlich probleme das zu implementieren, es mag in der theorie einfach zu coden sein, aber es ist alles sehr unübersichtlich jetzt.

und vor allem weiß man schon bald nicht mehr, wie man unterschiedliche arten wavetable-daten eigentlich identifizieren soll.

bislang schreibe ich die länge der wave in den filenamen:

1000.flute.aif bedeutet, dass die waves 1000 samples lang sind.

dann kann man beim öffnen noch messen, wie lang die datei insgesamt ist um zu erkennen, ob es sich um ein 2d oder 3d wavetable handelt. (1000 mal 100 oder 1000 mal 10,000?)

oder- wenn man das auch noch dynamisch machen will - kann man so messen wieviele waves in einem 2d wavetable drin sind.

mit der einführung einer 4. oder gar 5. dimension steigen die möglichkeiten (und sie damit auch dinge miteinander zu verwechseln) ins unermessliche.

das abspeichern in einem binären eigenformat, in das man dann metadaten schreiben kann, möchte ich mir eigentlich ersparen.

auch möchte ich filenames auf 32 zeichen begrenzen und nicht mit kryptischen zahlen zumüllen (100_100_64_antialias_mode3_flute01.aif), die spätestens dann verloren gehen, wenn die datei umbenannt wird. :)

also wie organisiert man sowas?
 
Zuletzt bearbeitet:
habe mich vorhin für "textdatei" entschieden, da man auf diesem weg neben meta daten auch z.b. bei der klasse "oberton" die daten zur generierung direkt mitliefern kann, so dass sie von dort direkt wieder umverarbeitet werden können.

so etwas ähnliches hatte früher als extra format, dort hiess das "wave setup" und natürlich gibts auch ein "wavetable setup" wo man die verläufe programmatisch erzeugen kann. da kannst du dann schon diese algorithmen bzw zahlen auf verschiedene art und weise miteinander mischen ohne irgendwas mit audio zu machen (was bei waves mit bis zu einer sekunde länge :) lange dauern kann)

die etwas kompliziertere, versteckte frage, wie man CPU-freundlich 5 dimensionen aufbauen kann, mag niemand beantworten? subcircuits während dem modulieren der wavetable position dauernd ein und ausschalten kommt nicht in frage, und meine buffer sind immer nur "2d" - "multichannel" wäre zu umständlich.
 
Zuletzt bearbeitet:


News

Zurück
Oben