4 KB Tunes
von TOMAES
Hin und wieder gibt es sie noch: Die Compos, bei denen
es auf jedes Byte ankommt. Doch es muss sich dabei nicht
zwangsläufig um 4kb Intros handeln. Auch andere größenorientierte
Wettbewerbe kommen wieder in Mode. 4KB Flash-, 4KB HTML- und eben
auch 4 KB-MOD Compos bringen den Beweis, dass es auch im Zeitalter
der 50GB Festplatte immer noch ein großes Interesse an solchen
Spektakeln gibt. Es scheint sogar unverzichtbar, in einer PC-Welt
ohne echte Speicher- und Ressourcenlimits solche Compos zu starten
und zu beweisen, dass man auch in 4096 Bytes noch Erstaunliches vollbringen
kann, auch wenn 4k-Compos speziell auf großen Demopartys eher auf dem
Rückzug sind.
Nicht mehr als 4096 Kalorien bitte...
Wenn man also einen 4k Tune basteln möchte, ist es zunächst nicht
unwichtig, einige Vorüberlegungen anzustellen. Einfach drauflos
tracken und hinterher das 2MB-Meisterwerk auf 4k "runterzubrechen"
ist keine besonders gute Idee.
Das Fileformat
...wirft schonmal einige Fragen auf. MOD, XM, IT, oder was Exotisches
(OKT, AMS, FNK)?. Der Vorteil bei klassischen MODs ist der, dass man
erst gar nicht auf die verwegene Idee kommt 16bit Samples zu benutzen.
;-) Auch wird jeglicher unnützer(?) Kram über Bord geworfen. Envelopes,
NNAs, Filter, Instrumente... kostet ja schließlich alles Speicher, auch
wenn man von den Möglichkeiten "moderner" Trackingformate nur wenig
Gebrauch macht.
IT wiederrum kommt mit einigen extrem nützlichen Commands
daher, die unter Umständen viel Speicher sparen. Der Mxx-Command erspart
uns z.B. bei einfachen Echos/Hall jedesmal für jede Note einen Volume-Command setzen zu
müssen. Man legt einfach für die jeweilgen Channels eine nach unten
abgestufte Channel-Volume fest, und fertig ist der Salat. Interne
Samplekompression wäre ein weiteres Thema, sollte man der Fairness halber
aber außen vor lassen (und nützt in diesen Dimensionen auch nicht sooo
viel).
XM liegt bei den genannten Standard-Formaten in der Mitte. Zwar
gibt es kein Random Panning, dass uns eventuell unnötig viele Panning-Commands,
bzw. eine Panning-Envelope erspart (wie bei IT), aber immerhin variable
Patternlängen sowie einiges mehr, was bei einer Orientierung auf möglichst
geringen Speicherbedarf wichtig sein könnte.
Ein weiteres Argument, das für
IT sprechen könnte, ist, dass man hier Channels einzeln hinzufügen kann
und nicht immer alles im 2er-Pack nehmen muss. Während bei IT also auch
5 oder 7-Channel Werke herauskommen können, muss man bei XM u.U. einen
(eigentlich unnötigen) weiteren Channel in Kauf nehmen, der auch nur
Speicher frisst. Mit dem Modplug Tracker kann man dies freilich auch
umgehen. Andererseits ist es mit dem MPT aber nicht möglich, Tracks
mit weniger als 4 Channels zu speichern, dabei ist ein 2ch-XM, sowie
ein 1(!)-ch IT mit der jeweiligen Orginalsoftware möglich.
Halten wir fest: IT ist die beste Wahl, XM geht auch
zur Not, MOD nur wenn man ganz sicher ist, dass man den ganzen "neumodischen"
Kram nicht braucht. Alles andere ist i.d.R. sowieso nicht zugelassen. ;-)
Samples
Nun wird's etwas komplizierter. Es geht an die Auswahl bzw. Eigenkreation
der Grundbausteine unseres Tracks. Schwierig auch die Frage, wieviel
man überhaupt ins Boot nehmen kann. Mehr als 1K sollte es nicht sein,
damit für alles andere noch genügend Speicher zur Verfügung steht.
Man wird sich nun auch entscheiden müssen, welche Art Track man eigentlich
machen will. Dass es sich dabei grundsätzlich bzw. tendentiell um einen Chiptune
handelt, dürfte eigentlich klar sein. Aber was für ein Chiptune genau?
Mit Drums, oder ohne? Eher "dünner" Sound, oder doch etwas "brummiger"?
Überhaupt ist es die Frage ob man in weniger als 1k vernünftige Drums
hingekommt. Wenn man sich dafür entscheidet, braucht man natürlich
nicht nur einen Sound, sondern mindestens Drei (Bassdrum, HiHat, Snare...).
Idealerweise hat man für alles ein einziges Sample. Eine (natürlich geloopte)
Sinuskurve, die nicht weniger als 100 Byte benötigt, ist noch idealer.
Dies ist nun die Quelle aller weiteren Sounds in unserem Track. Egal
ob Basslines (Oktave 2 und 3), mittleres Ryhtmusgedudel (4 und 5), oder
hohe, führende Melodiestimmen (6 und aufwerts) sind kein Problem.
Auch Drums kann man (mit Abstrichen) ganz gut hinbekommen.
Drums ohne Drum-Samples
Aber wie soll das gehen? Wer schonmal mit einem Adlib-Tracker gearbeitet
hat, der kennt das Problem und hat bestimmt auch schon damals eine einfache
Methode entwickelt, um zumindet brauchbare Bassdrums hinzubekommen.
c-0 27f
... 27f
... c00
Mit dieser einfachen, wie effektiven Methode bekommt man mit fast jedem
Sample (und sei es nur ein Sinus) eine Bassdrum zustande, die diesen Namen auch halbwegs verdient.
Das Sample wird auf einer extrem niedrigen Oktave gespielt und mit einem
wuchtigen potamento down in die Knie gezwungen um kurz
darauf durch ein auf Null gesetztes Channel-Volume gänzlich zum Schweigen
gebracht zu werden.
Wenn man nun etwas mit den Werten experimetriert, oder es einmal mit potamento
up versucht, bekommt man auch eine Snare bzw. HiHat hin.
Mit etwas zusätzlicher Distortion Marke E5x und etwas Panning - Gewitter
geht's eventuell noch etwas besser:
c-0 27f c-0 e55
.. 27f c-0 27f
.. c00 ... c00
Durch eine entsprechende Gestaltung von Volume-Envelopes kann man auch noch
den c00 einsparen. Sofern man dies durchgehend macht lohnt es sich,
auch eine zusätzlich Kopie des Samples mit entsprechend verschobenem Tune-Regler
anzulegen und zu verwenden.
Tipps zur Optimierung
Nun noch ein paar Takte zum Thema: "Wie bekomme ich die verdammten 10 Bytes noch weg".
Den größten potentiellen Einsparposten stellen die Patterndaten dar. Natürlich mal vorrausgesetzt,
dass die Samples hinreichend optimiert sind. Alles 8bit, mono, alles sauber aufgeräumt
(keine überflüssigen Daten nach dem Ende eines Loops) ect. Es scheint zwar verführerisch,
die Bezeichnung für ein Instrument leer zu lassen (um weitere Bytes zu sparen) in der Praxis
ist dies jedoch unsinnig, da zumindest die Instrumentbezeichnung immer mit konstanter
Länge abgespeichert wird. Das selbe gilt auch für den Songtitel. Hier nichts einzutragen
bedeutet leider nicht, zusätzlich Speicher sparen zu können.
Also ran an die Pattern. Hier muss man sich der Möglichkeiten der variablen
Länge bedienen. Wenn also "unten", d.h. nach der letzten Note oder letztem
Effekt nur noch Leerlauf ist: Weg damit. Hier hilft ein EEx aka. Pattern-Delay
weiter.Auch sollte man schauen, ob man nicht alles in einem einzigen, langen
Pattern reinbekommt. Das spart dann auch nochmal ein paar Bytes.
Ein wichtiger Punkt bei der Komprimierung von Pattern-Daten ist die Grundgeschwindigkeit
des Tracks. Bei einem Speed/BPM von 6 bzw. 125 langt ein "normaler" Pattern-Table
für ca. 7 Sekunden Musik. Bei 12 bzw. 125 sind es schon 15 Sekunden. Und schließlich
ist...
e-4 | e-4
... [und] g-3
g-3 | d-4
... |
d-4 |
..so ziemlich dasselbe. Duch EDx (Note-Delay) und E9x (retrigg note)
kann man die durch die hohe Komprimierung der Pattern verloren gegangene
Flexibilität bei Rhytmus und Tempo auffangen, hat aber dafür bis zu 50% an
Pattern-Daten gespart.
Zusätzlich sollte man versuchen, alles in möglichst wenigen Cannels unterzubringen.
Gerade bei Drums, die nicht unbedingt polyphon sein müssen, kann man einsparen.
Wenn man nun noch auf herkömmliche Simulation von Hall- und Reverb Effekte
weitgehend verzichtet (und statt dessen die Resonanzfilter des IT zu nutzen weiß),
kann man auch hier viel einsparen.
Das mit großem Abstand wichtigste ist der E6x, also der Pattern - Loop.
Erst durch ihn sind längere 4kb-Tunes möglich. Diese Loops zu verschachteln
ist zumeist keine gute Idee, da sie dann nicht so funktionieren, wie man sich
das wünschen würde.
Eine weitere verlockende Idee wäre es, einen "Pattern Ping-Pong Loop"
zu konstruieren. Ein Teilstück wird also im wahrsten Sinne des Wortes rauf- und
runtergespielt (wie die Animation verdeutlichen soll). Das man Pattern auch rückwärts spielen kann, ist bekannt.
Leider geht beides zusammen, also erst rückwerts und dann wieder vorwärts
bzw. umgekehrt, leider nicht.
Und schließlich noch eine weitere Möglichkeit, das ein oder andere
Byte zu sparen: Ein üblicher "global fadeout" besteht aus eine Latte von
H01s. Nun wollen wir aber sparen und loopen fröhlich vor uns hin:
... e60
... h01
....e6f
Das ist natülich noch lange nicht das letzte Wort. Es geht auch noch komprimierter:
... e60 ... h01
....e6f ... h01
Dies spart immerhin eine Patternzeile. Aber auch das ist noch längst nicht das Ende
der Fahnenstange. Noch besser ist: (*Trommelwirbel*)
... h01 ... eef
Na wer sagst denn: Alles in einer Zeile. Der Pattern-Delay hält den Pattern nicht
nur eine ganze Weile an, nein, während dessen wird auch unser Global-Fade zyklisch
bearbeitet. Ich würde sagen, dies ist eine Global-Fadeout Schleife mit Knoff-Hoff. ;-)
Noch viel Spaß beim weiteren Experimentieren. Die nächste 4k-Compo kommt bestimmt.
(Tomaes)