Trackermodul-Engine (sehr einfach)
Verfasst: Do 19. Apr 2012, 07:44
Hallo!
Ich überlege schon seit längerem, eine möglichst einfach zu implementierende
und Speicherschonende "MOD"-Engine zu bauen.
Die Patterns sollen möglichst platzsparend abgelegt werden und nicht
wie beim 4CHN Amigaformat 4 Byte pro Note, pro Zeile also dann 16
und für ein ganzes Pattern 1 KB beanspruchen.
Ich kann beim Trackern auch mal auf alle Effekte verzichten,
nur Lautstärke wäre ganz gut, auch für Echo-Effekte.
Ein wichtiger Punkt dabei ist, da die Samples ja in verschiedenen
Tonhöhen gemixt werden, wie man diese Sache löst.
Normalerweise legt man sich da eine Period-Table an -
allerdings kann ich bei meinem Tracker eine feste
C-3 Frequenz frei angeben zwischen z.b. 3000 und 48000 Hz,
und auf diese Freiheit möchte ich ungern verzichten, das
ist auch essentiell um die Samples fine zu tunen.
- aber so müsste ich mir ja ein Arsenal an Tables anlegen - oder nicht?
Ich dachte daran, dass das ursprüngliche Format erstmal
per Converter-Tool in ein einfacheres gewandelt wird, und
dass dann im Pattern direkt entweder Festkomma-Werte
in 8 oder 10 Bit geschrieben stehen, die man dann
nur noch auslesen und die Samples dementsprechend
fortschreitend Mixen muss.
Soviel meine bisherigen Gedanken dazu, um mit möglichst
wenig Speicherbedarf und Rechenaufwand und überhaupt wenig Aufwand
Tracker-Musik in ein Spiel zu bringen.
Ich dachte da so an 8 Kanal, max. 128 Zeilen.
Die Patterns, dynamisch gehalten, je nachdem wieviel sich
gerade tut in der Musik, würde ich tendentiell seriell anlegen, mit Indizierung,
um wiederum alles sehr kompakt halten zu können und kein festes Array
anzulegen.
Ich bin noch am austüfteln wie man ein Pattern möglichst kompakt
seriell codiert, unter Berücksichtigung dass es auch einfach auszulesen ist.
Bisher dachte ich vielleicht so für jede Zeile ein Info-Byte, auf welchem
Kanal überhaupt eine Änderung stattfindet, und dann alle in diesem
Byte anzeigten Veränderungen. Aber das scheint mir irgendwie noch
etwas zu verschwenderisch.
konventioneller Speicher ist kostbar ;)
Der Tracker den ich benutze (X-Tracker) ist leider keiner der MOD bzw. XM kompatiblen.
Aber ich habe es an ihm gelernt und komme nicht von dieser tollen Software los.
Daher bleibt mir nichts anderes übrig als das Format zu konvertieren.
Man kann auch eine Originaldatei abspielen, sicherlich, aber dem wirklich
gerechtzuwerden ist ein derartiger Programmieraufwand - ich finde das steht
in keinem richtigen Verhältnis dazu, dass man es auch sehr viel einfacher haben
kann wenn einem der Lautstärkebefehl reicht. NoteSlides sind immerhin möglich,
wenn auch nur abrubt, wenn man einfach den Pitch ändert ohne neu zu triggern,
das geht problemlos.
Ich überlege schon seit längerem, eine möglichst einfach zu implementierende
und Speicherschonende "MOD"-Engine zu bauen.
Die Patterns sollen möglichst platzsparend abgelegt werden und nicht
wie beim 4CHN Amigaformat 4 Byte pro Note, pro Zeile also dann 16
und für ein ganzes Pattern 1 KB beanspruchen.
Ich kann beim Trackern auch mal auf alle Effekte verzichten,
nur Lautstärke wäre ganz gut, auch für Echo-Effekte.
Ein wichtiger Punkt dabei ist, da die Samples ja in verschiedenen
Tonhöhen gemixt werden, wie man diese Sache löst.
Normalerweise legt man sich da eine Period-Table an -
allerdings kann ich bei meinem Tracker eine feste
C-3 Frequenz frei angeben zwischen z.b. 3000 und 48000 Hz,
und auf diese Freiheit möchte ich ungern verzichten, das
ist auch essentiell um die Samples fine zu tunen.
- aber so müsste ich mir ja ein Arsenal an Tables anlegen - oder nicht?
Ich dachte daran, dass das ursprüngliche Format erstmal
per Converter-Tool in ein einfacheres gewandelt wird, und
dass dann im Pattern direkt entweder Festkomma-Werte
in 8 oder 10 Bit geschrieben stehen, die man dann
nur noch auslesen und die Samples dementsprechend
fortschreitend Mixen muss.
Soviel meine bisherigen Gedanken dazu, um mit möglichst
wenig Speicherbedarf und Rechenaufwand und überhaupt wenig Aufwand
Tracker-Musik in ein Spiel zu bringen.
Ich dachte da so an 8 Kanal, max. 128 Zeilen.
Die Patterns, dynamisch gehalten, je nachdem wieviel sich
gerade tut in der Musik, würde ich tendentiell seriell anlegen, mit Indizierung,
um wiederum alles sehr kompakt halten zu können und kein festes Array
anzulegen.
Ich bin noch am austüfteln wie man ein Pattern möglichst kompakt
seriell codiert, unter Berücksichtigung dass es auch einfach auszulesen ist.
Bisher dachte ich vielleicht so für jede Zeile ein Info-Byte, auf welchem
Kanal überhaupt eine Änderung stattfindet, und dann alle in diesem
Byte anzeigten Veränderungen. Aber das scheint mir irgendwie noch
etwas zu verschwenderisch.
konventioneller Speicher ist kostbar ;)
Der Tracker den ich benutze (X-Tracker) ist leider keiner der MOD bzw. XM kompatiblen.
Aber ich habe es an ihm gelernt und komme nicht von dieser tollen Software los.
Daher bleibt mir nichts anderes übrig als das Format zu konvertieren.
Man kann auch eine Originaldatei abspielen, sicherlich, aber dem wirklich
gerechtzuwerden ist ein derartiger Programmieraufwand - ich finde das steht
in keinem richtigen Verhältnis dazu, dass man es auch sehr viel einfacher haben
kann wenn einem der Lautstärkebefehl reicht. NoteSlides sind immerhin möglich,
wenn auch nur abrubt, wenn man einfach den Pitch ändert ohne neu zu triggern,
das geht problemlos.