Goattracker/Tutorial
Das Goattracker/Tutorial wurde in der Ur-Version vom Autor oneBitman [1] geschrieben, auf die sich diese Tutorialversion bezieht.
Einleitung[Bearbeiten | Quelltext bearbeiten]
- Wenn im Text eine Taste auf der Tastatur gemeint ist, so wird diese mit Taste hinterlegt.
- Dinge, die im Goattracker zu lesen sind, werden mit Fettdruck gekennzeichnet.
- Hinweise die kursiv gekennzeichnet sind, sollte man etwas genauer nehmen, da sie auf essentielle Dinge aufmerksam machen, deren Ignorierung viele Stunden Ärger oder unnötige Grübelei nach sich ziehen kann.
- Die musikalische Note B ist im Deutschen Sprachraum als H bekannt, trotzdem wird in dieser Anleitung, so wie in Goattracker, das B verwendet!
Hinweis: In der Anleitung werden folgende englische Begriffe verwendet, so wie sie teilweise auch im Programm zu sehen sind bzw. allgemeingültig sind:
Begriff | Bedeutung |
---|---|
table | Tabelle, wir verwenden das Wort table so wie es im tracker zu sehen ist |
waveform | Wellenform |
register | eine Speicherstelle die einen Wert speichert (ein Byte) |
speed | Geschwindigkeit |
command | Befehl, Kommando |
bit | Kunstwort aus BInary digiT, kleinste Informationseinheit, 0 oder 1 |
byte | Kunstwort aus beißen → bite, aus 8 kleinen Bissen [Bit] wird ein Byte |
nibble | Kunstwort aus knabbern → Nibble, nur ein kleiner Happen, 4 Bit |
hex | hexa (sechs) dezi (zehn) → Hexadezimalsystem, Basis 16 |
signed (hex) value | Hexadezimalzahl in vorzeichenbehafteter Darstellung |
low | kein Signal, nicht geladen, 0 |
high | geladen, 1 |
offset | Versatz (Offset $01 = $01 dazu addieren/subtrahieren) |
attack | Anschlagen, Anklingen (von 0 bis Spitzenpegel) |
decay | Abklingen (von Spitzenpegel bis zum Haltepegel) |
sustain | Halten (Haltepegel konstant) |
release | Abfallen (von Haltepegel bis 0) |
gate | Tür, Gatter - z.b. beim gate-Bit - das Gatter wird quasi aufgemacht (das gate-Bit gesetzt), der Klang ist hörbar. |
noise | Rauschen |
frame | Rahmen, 1 frame = eine Schwingung des normalen 50Hz Bildschirmupdates |
tune | viele sprechen von "tunes", wenn von .sid Songs die Rede ist |
pitch | Tonhöhe |
channel, voice | Stimme, Oszillator - einzelne Stimme, wird synonym verwendet |
space | Leertaste |
trigger | Auslösen |
fixed | fixiert, nicht änderbar |
grid | Patterngrid - Gitter, die Wahrnehmung des Patterneditors als Raster |
arpeggio | eine schnelle Tonfolge als alternative zum Akkord |
oldschool | Musiker der alten Schule - wie Hubbard, Galway usw. |
pulse | eine Rechteck-Wellenform, wir verwenden nur den Namen "pulse" im Tutorial |
PWM | Pulsweitenmodulation, im deutschen auch "Pulsbreitenmodulation" oder z.b. im C64 Handbuch "Tastverhältnis" genannt |
triangle | englische Bezeichnung für Dreieck-Wellenform |
saw | englische Bezeichnung für Sägezahn-Wellenform |
synthesizer | ein Gerät, um Klang künstlich zu erzeugen, z.B. Moog |
cutoff | die "Abschneide"-Frequenz eines Filters, auch Grenzfrequenz genannt - die Frequenz bei der ein Filter am Klang "zu Greifen" beginnt. |
resonance | eine Rückkoppelung des Filters auf sich selbst |
pattern | eine zusammengefasste Abfolge von Tönen und Befehlen in einer Art Anweisungsliste wird pattern genannt. |
loop | wenn etwas "im Kreis" bzw. wiederholt abgespielt wird |
sweep | der Verlauf eines Wertes, z.B. ein Filter (cutoff) sweep |
Inhalt[Bearbeiten | Quelltext bearbeiten]
Binäres und hexadezimales Zahlensystem[Bearbeiten | Quelltext bearbeiten]
Wenn Du bereits binär und hex "denken" kannst, und Du weißt, was ein vorzeichenbehafteter Hex-Wert in Zweierkomplementdarstellung ist, dann kannst Du bei Kapitel 2.2 weiterlesen. Wir sind der Meinung, dass das Wissen aus Absatz 2.1 ein Grundstein ist, ohne den der Soundchip kaum sinnvoll nutzbar ist. Die Angaben in Kapitel 2.1 beziehen sich explizit auf die im Commodore 64 vorfindbare 6502 Mikroprozessor & little-endian Architektur und können nicht einfach allgemeingültig für andere Plattformen übernommen werden. Ebenso bezieht sich die Erklärung der vorzeichenbehafteten ("signed") Wertigkeiten nur auf die Zweierkomplement Darstellung wie sie im Goattracker zur Anwendung kommt.
BIT & Nibble[Bearbeiten | Quelltext bearbeiten]
In unserem Alltagsleben haben die Meisten von uns nur mit Dezimalzahlen zu tun. Rechner können mit diesen Zahlen nichts anfangen. Im Rechner gibt's nur "Ladung" (1) oder "keine Ladung" (0). Darauf basiert das binäre Zahlensystem mit dem alle Rechner arbeiten. Ein einzelner "Ladung"/"keine Ladung"-Wert wird BIT genannt. Vier dieser Werte zusammengenommen, stellen ein "Nibble" dar. Binärzahlen sind mit einem %-Zeichen davor gekennzeichnet. Der niedrigste Wert, den ein Nibble haben kann, ist %0000 und der höchste ist %1111. Wenn wir jetzt alle möglichen 0- und 1-Kombinationen durchprobieren, erkennen wir, das ein Nibble 16 verschiedene Werte annehmen kann. Das binäre System ist auf Verdopplung des Grundwertes aufgebaut, das niedrigste Bit hat einen Wert von 1. Demnach sind die dezimalen Wertigkeiten der Bits von LSB nach MSB:
1 2 4 8 (und 16 32 64 128 - wenn es zwei Nibble sind bzw. ein Byte ist) ein Bit das eingeschaltet, geladen, auf "1" gestellt ist heißt, dass wir den dezimalen Wert des Bits zur Summe dazu zählen müssen, um den endgültigen Wert des Nibbles zu berechnen.
Das niedrigwertigste Bit wird als LSB (least significant Bit), das Bit, das den Wert am wenigsten beeinflusst, bezeichnet. Umgekehrt ist das MSB (most significant Bit), das Bit, das den Wert am meisten beeinflusst.
Wenn wir das jetzt aufschlüsseln:
MSB LSB Bit-Nummer 3 2 1 0 Dezimalwert 8 4 2 1 : : : : : : : : Beispiel : : : : Binärwert %1 0 1 0 = dezimal 10 (8 + 2)
HEX[Bearbeiten | Quelltext bearbeiten]
Hexadezimal bedeutet, dass das Zahlensystem eine Basis von 16 hat (wo unser "normales" Zahlensystem eine Basis von 10 hat). Das war die naheliegendste Möglichkeit, da ein Nibble einen Wert von Dezimal 0-15 halten kann. Da das Dezimalsystem nur 10 "Symbole" für Zahlen hat, wurden die Buchstaben von A bis F dazu genommen. Nachdem ein Hex-Wert über 9 hinaus geht, wird bei A weitergezählt, bis F. Hex-Zahlen werden mit einem $ davor dargestellt (verwechseln von Hex und Dezimal stiftet viel Verwirrung!).
eine einfache Umrechnungstabelle:
Hexadezimalzahl (hex) | Dualzahl
(als Nibble) (bin) |
Dezimalzahl (dez) |
---|---|---|
$0 | %0000 | 0 |
$1 | %0001 | 1 |
$2 | %0010 | 2 |
$3 | %0011 | 3 |
$4 | %0100 | 4 |
$5 | %0101 | 5 |
$6 | %0110 | 6 |
$7 | %0111 | 7 |
$8 | %1000 | 8 |
$9 | %1001 | 9 |
$A | %1010 | 10 |
$B | %1011 | 11 |
$C | %1100 | 12 |
$D | %1101 | 13 |
$E | %1110 | 14 |
$F | %1111 | 15 |
Byte & "%/$"-Umrechnung[Bearbeiten | Quelltext bearbeiten]
Ein Byte besteht aus 8 Bits und ist daher doppelt so breit wie ein Nibble. Das Nibble mit dem LSB wird "low Nibble" und das Nibble mit dem MSB wird "high Nibble" genannt. Das MSB hat die Wertigkeit 128 dezimal (oder $80 hex). Spätestens jetzt bist Du endgültig verwirrt. Aber lies weiter, es lichtet sich. Der größte Wert den ein Byte haben kann ist 255 dezimal oder $FF hex, %1111 1111 in Binärdarstellung.
Der Aufbau eines Bytes:
MSB LSB Bit-Nummer 007 006 005 004 003 002 001 000 dez-Wert 128 064 032 016 008 004 002 001 hex-Wert $80 $40 $20 $10 $08 $04 $02 $01
Der Trick bei einem Byte ist, das es behandelt werden kann wie zwei Nibbles für einfache bin>hex (und retour) Umrechnungen.
%10110110
teilt sich zu
%1011 %0110
Dann einzeln betrachtet
%1011 = $B
und
%0110 = $6
ergibt:
%1011 0110 = $B $6 = $B6
In die andere Richtung:
$E4
teilt sich in
$E = %1110
und
$4 = %0100
ergibt:
$E4 = %1110 0100
Bytes als Nibbles addieren geht auch einfach:
$10 %0001 0000 + $40 %0100 0000 ----------------- $50 %0101 0000
$20 %0010 0000 + $40 %0100 0000 ----------------- $60 %0110 0000
Obwohl es auch kompliziert werden kann, wenn wir zu höheren Werten addieren. In dem Fall ist es einfacher, das ganze Byte zu sehen, anstatt den Nibbles:
$7F %0111 1111 + $01 %0000 0001 ----------------- $80 %1000 0000
$7F - low Nibble ist schon am höchsten Wert ($F). Wäre es das Dezimalsystem, wäre der höchste Wert dementsprechend 9.
Addiert man dec 79+1 erhält man 80.
In hex ist es dasselbe, wir erhöhen das high Nibble um einen Wert und setzen das low Nibble wieder auf $0.
$7F + $01 = $80 man muss nur den Dreh rauskriegen das nach $9 die "Zahl" $A kommt.
Tipp: Natürlich kann man das Ganze mit dem Windows-Taschenrechner auch umrechnen, Ansicht > Programmierer.
Vorzeichenbehaftete Bytes[Bearbeiten | Quelltext bearbeiten]
Ein vorzeichenbehaftetes ("signed") Byte nennt man so, weil das MSB des Bytes anzeigt, ob der Wert des Bytes positiv oder negativ ist. Dadurch bleiben nur mehr 7 Bit übrig, um einen Wert darzustellen. Daher reicht ein vorzeichenbehaftetes Byte von dez -128 bis dez +127. In der Darstellung werden zusätzlich die Bits invertiert (umgedreht) im Fall, dass das Byte einen negativen Wert hat. %0000 0000 ist dez 0, ein vorzeichenbehaftetes Byte mit %1111 1111 ist dez -1. Zusätzlich wird bei einem negativen Wert ein Offset (Versatz) von $01 addiert, nachdem die Bits invertiert wurden. Umrechnung von positiv nach negativ:
$3E = %0011 1110 (=62) invertiert = %1100 0001 + offset %0000 0001 --------------------- Ergebnis %1100 0010 = $C2 (= -62)
Und hier der Grund warum der Offset benötigt wird: Umrechnung $01 positiv nach negativ:
$01 = %0000 0001 invertiert = %1111 1110 + offset %0000 0001 --------------------- Ergebnis %1111 1111 = $FF (= -1)
Vorzeichenbehaftete Byte Werte reichen also von:
$01 bis $7F = dez 1 bis dez 127 $FF bis $80 = dez -01 bis dez -128
Positive Reichweite:
$01=$+01 $02=$+02< $03=$+03 ... $7D=+$7D $7E=+$7E $7F=+$7F
Negative Reichweite:
$FF=$-01 $FE=$-02 $FD=$-03 ... $82=$-7E $81=$-7F $80=$-80
Grundlagen & Einstieg[Bearbeiten | Quelltext bearbeiten]
Grundlegende Definierung des Soundchips[Bearbeiten | Quelltext bearbeiten]
Der C64-Soundchip (6581/8580) ist tatsächlich ein kleiner dreistimmiger Synthesizer, der eine breite Palette von elektronischen und sogar teilweise organischen Sounds von sich geben kann. Der Soundchip hat 27 Register, über die der Sound beeinflusst werden kann. Ein Register ist in unserem Fall nichts anderes als eine Stelle im Speicher, die den Wert von einem Byte speichern kann. Der Soundchip hat drei Oszillatoren, oder für den Musiker: Drei Stimmen (Vergleich: Ein Mensch hat nur eine Stimme). Zusätzlich gibt es noch ein analoges Filter durch das die drei Stimmen jeweils optional geschickt werden können.
Klangerzeugung im SID wird primär durch folgende vier Faktoren bestimmt:
- Tonhöhe - Frequenz (pitch): Jede SID-Stimme hat zwei Register, um die Frequenz einzustellen. Also einen 16 Bit Wert. Wir müssen uns darum aber nicht kümmern, sobald man im Goattracker eine Note eingibt, werden automatisch die richtigen Werte für die jeweilige Frequenz in die Register der jeweiligen Stimme geschrieben.
- Lautstärke - Amplitude: Bei Synthesizern und auch beim SID wird das Konzept der ADSR-Hüllkurve angewandt. In Synthesizern wird mit der ADSR-Hüllkurve ein spannungsgesteuerter Verstärker automatisiert. Beim SID ist das alles im Chip integriert und wir müssen nur die ADSR-Werte einstellen, um den Lautstärkenverlauf zu bestimmen.
- Wellenform: Ein Klang besteht aus Druckveränderungen in der Luft, durch Schwingung. Der SID ist in der Lage verschiedene Schwingungen bzw. Wellenformen zu erzeugen.
- Filter: Durch das analoge Filter können verschiedene Anteile der Wellenform subtrahiert oder auch hervorgehoben werden. In einem Satz: Die Oszillatoren im SID erzeugen Wellenformen in einer gewissen Lautstärke, die mit einer definierten Frequenz schwingen. Diese werden optional durch einen Filter verändert.
ADSR[Bearbeiten | Quelltext bearbeiten]
Bedeutet:
- Attack-Zeit: Die Zeit bis zur vollen Lautstärke, vor dem Decay.
- Decay-Zeit: Zeit bis der Sustain-Pegel erreicht ist.
- Sustain-Pegel: Klang bleibt im Sustain (Sustain ist ein Pegel, keine Zeit!)
- Release-Zeit: Release, d.h. Sound klingt aus.
Anders erklärt:
- Attack - Anschlag: Du drückst eine Taste am Klavier, der Hammer schlägt an die Saite, die Saite ertönt in voller Lautstärke.
- Decay - Abfall: Die Lautstärke wird geringer.
- Sustain - Halten: Die Saite schwingt weiter mit normaler Lautstärke (Taste noch immer gedrückt).
- Release - Ausklingen: Loslassen der Taste, die Saite klingt aus und verstummt.
Jeder dieser 4 Faktoren wird durch einen Nibble-Wert dargestellt, den man im Instrumenten-Editor einstellen kann ($0 = kurz, $F = lang). Im Falle des Sustains ($F = laut).
Achtung: $F bei Attack dauert 8 Sekunden, $F bei Decay/Release dauert 24 Sekunden. Wenn Bit 0 des Wellenform-Registers gesetzt wird, dann wird dieser ADSR-Verlauf gestartet. Man nennt diesen Teil eines Synthesizers auch Hüllkurvengenerator.
Dieses Bit 0 wird auch "gate Bit" genannt, da der Klang erst hörbar wird, sobald das gate Bit gesetzt ist.
Also im Verlauf: Wenn diese Bit auf 1 gesetzt wird (=gate on) wird der Attack/Decay-Zyklus gestartet, nachdem die Decay-Zeit vorüber ist, wird der Klang mit dem Sustain-Level gehalten. Wenn das Wellenform-Register Bit 0 (eben das gate Bit) wieder auf 0 gesetzt wird, folgt der Release und der Klang verstummt.
Diagramm für ein Instrument mit schnellem Attack, schnellem Decay und langem Release:
[Gate Bit on] [Gate Bit off] | | A D | S R /\ / ---------- | \ | \ | \ | \
Diagramm für ein Instrument mit langsamen Attack, schnellem Decay und kurzem Release:
[Gate Bit on] [Gate Bit off] | | A D | S R /\ / ----------\ / | / | / |
Wellenform - Wavetable[Bearbeiten | Quelltext bearbeiten]
Im Goattracker-Instrumenteneditor gibt der $-Wert neben [Wavetable Pos] an, ab welcher Position im Wavetable die Wellenform-Bytes stehen, die Frame für Frame in die SID-Register geschrieben werden. 1 Frame = 1 Bildschirmupdate = 1 Wert wird aus dem Table gelesen und in das Register geschrieben. Wenn Leute von 2x oder 4x Tunes reden, dann meinen sie damit, das die Abspielroutine mehrmals pro Bildschirmupdate aufgerufen wird. Dadurch können viel mehr Wellenformen und Parameter in derselben Zeit in die Register geschrieben werden und man bekommt mehr klangliche Möglichkeiten. Für den Anfang reicht aber 1x.
Der [WAVE TBL] besteht aus zwei Spalten: Die erste besteht aus den Wellenform-Register-Werten, die rechte gibt relativen/absoluten Pitch-Offset an, darüber werden wir später sprechen.
Hinweis: Verwende den TABULATOR um zwischen Pattern/Orderlist/Instrument/Wavetable/Songname zu wechseln. Für direktwechsel zwischen Instrument und Wavetable, verwende F7 . Du wirst effektiver und schneller komponieren, wenn Du Deine Maus am besten gar nicht verwendest.
Wie wir bereits gehört haben, steuert Bit 0 das ADSR-gate. Was machen die anderen 7 Bits des Wellenform Registers?
MSB LSB Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 hex | $80 | $40 | $20 | $10 | $08 | $04 | $02 | $01 | Rauschen | Pulse | Sägezahn | Dreieck | Test | Ring | Sync | ADSR
- Bit 7: Wählt die pseudo generierte "farbiges rauschen" Wellenform, praktisch für Hi-hat und Snaredrum Sounds. Die Höhe des Rauschens ist abhängig davon welche Note man damit spielt, trotzdem kann man "Rauschen" nur bedingt für Melodien verwenden.
- Bit 6: Pulse Wellenform, sieht ca. so aus:
__---__---__---
; Achtung: Man muss die Pulsweite einstellen, sonst hört man diesen Klang nicht (siehe Kapitel 2.3.2)! - Bit 5: Sägezahn Wellenform; sieht so aus wie sie heißt:
/|/|/|
. - Bit 4: Dreieck Wellenform; sieht ebenso so aus wie sie heißt:
/\/\/
. Hat einen sehr weichen Klang, gut für Flötenklänge. - Bit 3: "Test" oder "Reset" Bit. C64 Oszillatoren hängen sich auf, wenn sie zusammen mit Rauschen selektiert werden. Mit diesem Bit kann man den Oszillator rückstellen, und auch die Wellenform "neu starten". Über das Oszillator-Aufhäng-Problem muss man sich keine Sorgen machen, Goattracker regelt das von selbst mit der Hardrestart-Routine (die auch dafür sorgt, dass es keine Probleme mit der ADSR-Sektion gibt).
- Bit 2: "Ringmodulation" - wenn dieses Bit auf 1 gesetzt wird, wird der Oszillator (der Klang muss Dreieck enthalten) mit der Frequenz des vorherigen Oszillators ringmoduliert, egal welche Wellenform mit dem vorherigen Oszillator verwendet wird. Vorheriger Oszillator bei Goattracker heißt: Der Oszillator bzw. das Pattern links neben der modulierten Stimme (die drei Patterns im Editor sind den drei SID-Stimmen zugewiesen). Wenn man Ringmod auf Stimme 1 anwendet ist Stimme 3 die vorherige. Der Effekt ist leichter gehört als beschrieben. Es klingt sehr metallisch und kann für FM ähnliche Glockenklänge verwendet werden. Mitunter ist der Effekt schwierig in einem musikalischen Rahmen zu verwenden, mit etwas Geduld in der Notenauswahl für die beteiligten Oszillatoren kann man es aber nutzen.
- Bit 1: "Sync" - wenn dieses Bit auf 1 gesetzt wird, wird die fundamentale Frequenz des Oszillators mit der Frequenz des vorherigen Oszillators "hart" synchronisiert. Technisch gesehen wird die Wellenform die der Oszillator gerade abspielt, neu gestartet, wenn die Amplitude des vorherigen Oszillators in der Mitte den Nulldurchgang durchläuft.
Diagramm für sync - Oszillator 1 spielt eine Dreieck-Welle, Oszillator 2 einen Sägezahn, der einen höheren Pitch (Tonhöhe) als Oszillator 1 hat:
/\ /\ / \ / \ / \ / \ / \ / \ /. .\ /. .\ / . . \ / . . \ / . . \ / . . \ / . . \/ . . \ . . . . . . . . /| . /| /|. /| /| /| /| /|. /| / |/|/ |/ |// |/ |/ |/ |/ |// |
- Bit 0: "ADSR"/ gate - Bit um den Lautstärkenverlauf zu steuern.
Durch das Wissen, das wir bis jetzt erlangt haben, können wir unseren ersten eigenen Sound erstellen: Öffne Goattracker und springe in den Instrument-Editor [F7 ] und stelle die Werte ein:
edit [Attack/Decay 55]
und [Sustain/Release 55]
edit [Wavetable Pos 01]
springe zu WAVE TBL mit F7 , edit
[01:21 00] (wählt Sägezahn Wellenform und setzt Gatebit)
[02:20 00] (Sägezahn Wellenform immer noch gesetzt, Gatebit off)
[03:FF 00] (FF ist ein Sprungbefehl zum Wavetable programmieren.
FF 00 heißt: Stoppe die Wavetable-Ausführung.
Drücke SPACE , um eine "Test Note" mit diesem Instrument zu spielen (verwende * und / für Oktavlage).
Da das Gatebit nur für einen Frame "on" ist, kann man den Attack nicht wirklich hören. Ändern wir die Wavetable-Position 02 zu:
[02:FF 01] (springe zu 01)
Drücke SPACE , wenn wir in den Instrument-Editor zurückspringen, können wir Attack
und Decay sowie Sustain verändern und mit SPACE die Note noch einmal triggern, um die Veränderung zu hören.
Beende den Sound durch drücken von F4 oder lösche das Gatebit.
Wenn du die letzten drei Worte im vorherigen Satz nicht zu 100% verstanden hast, solltest du noch einmal weiter vorne beginnen zu lesen. Es wird ab jetzt immer komplexer und ohne Grundlagen, dann wird vieles unklar bleiben.
Man kann auch total abgefahrene Sounds erstellen:
edit: [01:11 00] [02:21 00] [03:51 00] [04:FF 01]
Hinweis: Du kannst die Einfg und Entf -Tasten verwenden, um Werte nach unten oder oben zu verschieben. Wenn Du den Cursor auf die 01 Position bewegst und Einfg drückst, siehst Du auch gleich das Goattracker automatisch die "Wavetable Pos" mitverändert, je nachdem, wo Du den Anfang des Sounds hin verschiebst. Dadurch muss man nicht nachträglich alles editieren, wenn man Mitten im Table einen Sound verändern will.
Arpeggios[Bearbeiten | Quelltext bearbeiten]
Wie bereits erwähnt wird die rechte Spalte im WAVE TBL für Pitch-Offset (Versatz) verwendet. Der Versatz kann relativ (zum Notenwert addiert/davon subtrahiert) oder absolut (fix definierte Tonhöhe die sich nicht ändert) sein.
$00 - $5F positive relative Noten
$60 - $7F negative relative Noten
$80 - Tonhöhe bleibt unverändert
$81 - $DF - absolute Noten C#0 - B-7
Arpeggios - da der SID-Chip nur begrenzt polyphon ist wurde das Konzept der Arpeggios angewandt. Ein Arpeggio ist eine Folge von Noten (eine Tonleiter oder ein zerlegter Akkord), die mit schneller Geschwindigkeit abgespielt wird. Ein sehr charakteristischer C64-Sound. Wenn wir z.B. den für e-Gitarren typischen "Powerchord" als Arpeggio nachbauen, müssen wir nur die Bünde von der ersten bis zur zweiten Note zählen (den Intervall in halbtonschritten). Die dritte Note im Powerchord ist einfach die Oktave der ersten. Der Powerchord ist sehr praktisch, da er nur dreistimmig und weder Dur noch Moll ist, auch ist er in allen Tonlagen spielbar und somit ein universelles Arpeggio.
Im Wavetable sieht das so aus:
[01:21 00]
[02:21 07] (+7 halbtonschritte =eine Quinte)
[03:21 0C] (+12 halbtonschritte =eine Oktave)
[04:FF 01] (endlosschleife - jump 01)
Geh mit F5 in den Pattern-Editor und drücke SPACE , um zum [JAM MODE] (wird links unten angezeigt) zu wechseln und das Arpeggio auf der Keyboard-Klaviatur zu spielen.
Hinweis: Markieren der "schwarzen" Klaviertasten am QWERTZ-Keyboard vereinfacht das Komponieren anfangs um einiges. Es gibt auch zwei verschiedene Tastaturlayouts: Fasttracker und DMC. Dieses Tutorial bezieht sich durchwegs auf die Fasttracker-Belegung (die als Default voreingestellt ist).
Hinweis: SPACE schaltet zwischen JAM und EDIT um, so kann man Melodien ausprobieren ohne das derzeitige Pattern zu verunstalten.
Hinweis: Wenn Deine Rechnerplattform ein Mac ist, kannst du auch ein MIDI-Keyboard anschließen für komfortable Noteneingabe.
Wenn Du Dein eigenes Arpeggio entwickeln willst, suche Dir ein paar Noten heraus, die gut miteinander klingen bzw. drücke ein paar Tasten auf der Keyboard-Klaviatur und merke Dir diejenigen, die gut zusammenpassen. Wenn man jetzt die tiefste Note nimmt, kann man die Tasten dazwischen abzählen:
beispielsweise:
tiefste Note wäre C (E-3)
zweite Note sollte sein N (A-3)
jetzt kann man die Tasten nach oben hin abzählen von C bis N , C als Grundton wird nicht mitgezählt, die zweite Note N wird aber sehr wohl mitgezählt.
Das ist dann V G B H N = 5 = $05 relativer offset
Deshalb ist es auch hilfreich die Halbtonschritte (schwarze tasten) am Keyboard zu markieren, beim Abzählen weiß man nicht immer gleich, wo ein Halbtonschritt liegt.
Zur einfacheren -von Hand- Konvertierung von Gitarrentabulatur nach SID-Arpeggios gibt es auch das simple-Tool "tabtoarp", auf csdb.dk zu finden (Siehe "Weblinks").
Fixed pitch Sounds - Drums[Bearbeiten | Quelltext bearbeiten]
Werte von $81 (C#0) bis $DF (B-7) in der rechten WAVE TBL-Spalte definieren, das der Sound mit einer fix definierten Tonhöhe abgespielt wird, egal welchen Wert man im Pattern Editor eingibt. Das ist praktisch für Schlagzeugsounds oder Effekte, die immer gleich klingen sollen. Man kann dann viel schneller zwischen diesen Sounds umschalten und rhythmische Muster eingeben ohne auf die eigentliche eingegebene Note acht zu geben. Nur die Position des Sounds im Pattern Grid (Gitter) ist dann wichtig.
Schnelles Beispiel für einen Oldschool-Drumsound:
edit Instrument [Attack/Decay 32] [Sustain/Release F9] [Wavetable Pos 01] edit WAVE TBL [01:51 90] (kombiniert Pulse & Dreieck ($40 + $10 = $50), Gate Bit setzen ($50 +$01=$51) spiele Note mit fixed pitch $90) [02:21 A0] (Wellenform Sägezahn, Gate immer noch gesetzt, fixed pitch $A0) [03:80 DF] (Wellenform Rauschen, Gatebit 0, ausklingen mit fixed pitch $DF) [04:FF 00] (beende Wavetable Ausführung, Sound klingt immer noch aus)
gehe in den Pattern Editor und teste den Sound auf verschiedenen tasten - es wird immer gleich klingen.
Hinweis: Mit Goattracker wird ein .pdf von Ravenspiral installiert. Dort gibt es eine gut gemachte Übersichtstabelle über die Notenwerte.
6581 oder 8580?[Bearbeiten | Quelltext bearbeiten]
- Gemischte Wellenformen am 6581
- Vom Design her sollte es möglich sein Pulse, Sägezahn und Dreieck frei miteinander zu kombinieren, durch ein logisches UND sobald das respektive Bit auf 1 gesetzt wird. Die Rauschen-Wellenform kann nicht mit den anderen kombiniert werden. Durch diverse Fehler im 6581 ist es nicht vollständig möglich alle Wellenformen zu mischen. Pulse und Dreieck ($50) ergibt ein gut hörbares Ergebnis, während Dreieck und Sägezahn ($30) fast nicht hörbar sind. Interessant wird es wenn man eine breite Pulse-Wellenform dazugibt. Generell sollte man aber versuchen nur die gemischten Wellenformen zu verwenden, die klar hörbar sind. Es ist auch möglich, das gewisse Mischungen auf einem Chip besser klingen als auf anderen.
- Gemischte Wellenformen am 8580
- Am 8580 kann man mit allen Wellenform Mischungen klar hörbare Resultate erzielen. Insgesamt hat man also sieben verschiedene Wellenformen. Noch mehr Variation ist möglich, wenn man die Pulsweite bei Mischung mit Pulse verändert (mehr dazu später).
- Filter beim 6581
- Ein großer Unterschied zwischen beiden Chips ist auch der Filter. Generell kann gesagt werden das jeder 6581 anders klingt, egal welche Revision und egal welcher Datecode darauf steht. Die Filterkurve im 6581 ist nicht wirklich konform von Chip zu Chip, teilweise können damit sehr organische Sounds erzeugen und auch sowas ähnliches wie eine verzerrte Gitarre hinbekommen (im Titellied von Mechanicus hört man das sehr gut). Wenn man im Goattracker mit dem 6581-Filter arbeiten will, muss man sehr genau wissen was man tut. Am echten 6581 wird es definitiv anders klingen. Auch ist oft die untere und obere Grenze des Filters ein wenig verschoben. Wenn du einen C64 mit 6581 hast, kannst du auch mit SID-Audit[2] die Grenzen des Filters testen, um einen Anhaltspunkt zu haben (mehr zum Filter später).
- Filter beim 8580
- Der Filter im 8580 ist hingegen sehr verlässlich und von Chip zu Chip gibt es nur wenig unterschiede. Auch der Klang ist etwas "elektronischer" als der Filter im 6581. In der C64-Demoszene hat sich der 8580 ziemlich durchgesetzt, weil der Chip mehr Möglichkeiten bietet und die Ergebnisse viel reproduzierbarer sind. Trotzdem gibt es noch einige, die den 6581 wegen seiner charakteristischen Bugs bzw. Features bevorzugen.
Trivia: Oldschool-Legende Ben Daglish ging gleich einen anderen Weg. Er verwendete gleich gar keinen Filter, weil er von Anfang an ausschließen wollte, das seine Tunes überall anders klingen.
Pulse Wellenform - Automatisierung & Modulation[Bearbeiten | Quelltext bearbeiten]
Einleitung in die PWM Thematik - praktische Beispiele[Bearbeiten | Quelltext bearbeiten]
Die Pulse Wellenform ($40) ist etwas spezieller, da wir das Tastverhältnis frei bestimmen können, das heißt wir können definieren wie lange der Pulse high und danach low bleibt (manchmal wird das PWM genannt - Pulsweitenmodulation).
Der Soundchip hat sogar zwei Register für jede Stimme, um dieses Verhältnis zu definieren, obwohl ein Register zu einem Nibble reduziert wurde, somit haben wir einen Dezimalbereich von 0-4095, oder besser gesagt $000 - $FFF.
Trotzdem werden sich die meisten jetzt noch immer nichts darunter vorstellen können, obwohl PWM auch ein sehr charakteristischer C64-Sound ist.
Ein komplett symmetrischer Pulse sieht folgendermaßen aus:
high ---- ---- ---- ---- low ---- ---- ---- ----
Wenn wir jetzt die Pulsweite verändern würde es so aussehen:
high ------ ------ ------ ------ low -- -- -- --
Klanglich verändern sich die Harmonien des Sounds, gewisse Obertöne werden ausgelöscht, während andere verstärkt werden, je nach high zu low Verhältnis.
Wir editieren einen PWM-Sound:
Editiere die AD SR Werte im Instrument-Editor nach belieben. Gib ein:
[Wavetable Pos 01] [Pulsetable Pos 01] (genauso wie beim Wavetable ist das jetzt der Zeiger auf den PULSETBL) edit WAVE TBL [01:41 00] (Pulse Wellenform einstellen und Gate on) [02:FF 00]
Wie bereits erwähnt, hören wir nichts, weil im Register immer noch $000 steht. Also müssen wir ein paar Werte im PULSETBL eingeben (der PULSETBL wir genauso wie der Wavetable frameweise ausgeführt)
edit [01:98 00] [02:FF 00]
Drücke SPACE - was Du jetzt hörst, ist eine symmetrische Pulse Wellenform.
01:98 00
bedeutet: ein Wert im Pulsetable, wo das am meisten links stehende Nibble im Bereich von $8 bis $F ist (bei uns $9) definiert die aktuelle Pulsweite. Man könnte auch [01:F8 00]
eingeben und denselben Effekt zu erlangen. Das zweite Nibble ($8) ist das high Nibble (MSB) zum Einstellen der Pulsweite, also wird dadurch der Klang am meisten beeinflusst. Die zwei rechten Nibbles sind das low Byte der Pulsweite und werden für Feinabstimmung verwendet
edit PULSETBL
[01:9X00]
- versuche verschiedene Werte für X einzugeben, drücke SPACE , um den Sound klingen zu lassen. Vielleicht hast Du schon gemerkt, das der Klang dünner wird, desto näher Du zu $000 oder $FFF kommst. Das liegt daran das eine Pulsweite mit $000 oder $FFF so weit ist, das ein konstantes High oder Low entsteht, dadurch entsteht keine Schwingung und man kann nichts hören.
$000 and $FFF sind genau gegenüberliegend bzw. invertiert:
- Pulsweite $000
high low ----------------------------
- Pulsweite $FFF
high ---------------------------- low
Deswegen gibt unser Anfangswert $800 eine symmetrische Pulse Wellenform, weil das genau die Mitte zwischen $000 und $FFF ist. Von $000 nach $800 ergibt denselben Klang wie von $FFF nach $800, obwohl es physikalisch nicht dasselbe ist. Wenn man mehrere Instrumente mit Pulse verwendet, sollte man versuchen auch die gegenüberliegende Seite zu nutzen. Obwohl es für die Einzelsounds klanglich keinen Unterschied macht, trägt es zum Gesamtklang des Tunes bei, man bekommt einen volleren Sound.
PWM-Automatisierung & Modulation - Pulsetable[Bearbeiten | Quelltext bearbeiten]
Gehe in den PULSETBL und
edit [01:98 00] (setze Pulsweite auf $800) [02:6C 13] (erhöhe Pulsweite um $13 für die Dauer von $6C Frames) [03:FF 00] (beende Pulse-Programm)
Drücke SPACE und Du hörst einen Pulsweiten-Verlauf von $800 bis $FFF. Das Konzept dieser Automatisierung ist etwas eigenartig für einen Musiker, da es eher aus der Programmierer-Ecke kommt. Stell Dir vor, die PULSETBL-Automatisierung ist einfach nur eine Tabelle mit Werten und Goattracker (oder später die Playroutine) addiert oder subtrahiert diese Werte im Pulsweiten-Register. Wie geht das?
[02:6C 13]
Werte in der linken Spalte die von $01 bis $7F reichen, zeigen an das die Pulsweite moduliert bzw. automatisch verändert werden soll. In unserem Fall heißt $6C $13 - ADDIERE einen Wert von $13 zum Pulsweiten-Register für die Dauer von $6C Frames. Das rechte Byte, in der rechten Spalte, ist ein vorzeichenbehafteter Wert!
Wenn wir $6C auf $1F verringern [02:6C 01], dann verändert sich die Pulsweite nur langsam, weil nur ein Wert von $01 zum Register addiert wird.
Wenn wir den Schritt 02 jetzt verändern:
[02:7F 20]
und SPACE drücken hören wir das der Klang über $FFF hinaus geht (über das konstante high, wo man den klang nicht hört) und wieder von vorne anfängt. Das ist deswegen, weil auch die Register wieder von vorne anfangen. Wenn man ein Register mit dem Wert $FF um $01 erhöht, fängt es wieder bei $00 an (für die Programmierer: und das Carry Flag wird gesetzt).
Wenn also der Wert über $FFF hinaus geht und die pulsetable-Ausführung nochmal $20 hinzufügt, dann geht es bei $000 weiter so lange bis alle $7F Frames abgearbeitet sind und die Pulsweite bei ca. $800 zu stehen kommt.
Viele sehen den Klang, wenn die Pulsweite bei $FFF zu $000 überschlägt als nicht hörenswert, ideal ist es wenn man also versucht seine Pulsprogramme so zu halten, das die Modulation nicht über diesen Punkt hinaus geht.
Hinweis: $7F ist die maximale Dauer für die Automation, ab $8x aufwärts ist, wie wir bereits wissen, reserviert für einstellen der Pulsweite.
Noch ein Diagramm zur Pulsweite und dem Totpunkt:
$800 __--__--__--__-- (symmetrisch) $900 $A00 $B00 $C00 -_---_---_---_-- (3 high/1 low) $D00 $E00 $FFF ---------------- (stille) $000 ________________ (stille) $100 $200 $300 $400 _-___-___-___-__ (1 high/3 low) $500 $600 $700 $800 __--__--__--__-- (symmetrisch)
Tipp: Probiere den [FF]-Befehl im Pulsetable aus.
Wenn du [03:FF 02]
eingibst, wird der Sound durch den FF-Sprungbefehl unendlich lange moduliert. Man kann auch die Breite in einer Serie von $8x-Befehlen direkt einstellen, man muss nicht automatisieren oder man kann auch einen schnellen Modulationsbefehl und danach einen langsamen eingeben, also mehrere Befehle in Serie. Der Pulsweiten-Startpunkt für einen Befehl ist dann immer dort, wo das vorherige Kommando die Pulsweite stehen hat lassen.
Das Byte in der rechten Spalte, der Wert der subtrahiert oder addiert wird, ist wie gesagt ein vorzeichenbehafteter Wert. Wenn man also bei einer gewissen Pulsweite stoppen will und denselben Klang nochmal rückwärts haben will, muss man einen negativen (vorzeichenbehafteten) Wert addieren. Sehr eindrucksvoll ist es, wenn man zum Pulsweitenregister dazu addiert, und vor dem Totpunkt wieder subtrahiert, und diese zwei Vorgänge via FF befehlt endlos durchlaufen lässt.
Hinweis: Natürlich funktioniert das Ganze auch umgekehrt, wenn man von $000 subtrahiert, beginnt das Register wieder bei $FFF.
Filter[Bearbeiten | Quelltext bearbeiten]
Verwendung des Filters[Bearbeiten | Quelltext bearbeiten]
Einige Leute nennen den SID-Chip auch einen subtraktiven Synthesizer, und das ist er auch in dem Sinn, das der Filter einen Teil des Gesamtklanges abschneidet bzw. eben filtert. Filter beim SID werden mittels des Frequenzbereichs, in dem sie arbeiten, unterschieden, drei verschiedene Typen sind es, die man frei miteinander kombinieren kann:
- Lowpass: Nur niedrige (Low) Frequenzen dürfen durch (pass).
- Bandpass: Nur mittlere Frequenzen dürfen durch.
- Highpass: Nur hohe Frequenzen dürfen durch.
Zusätzlich dazu kann man das Cutoff (Grenzfrequenz des Filters) Register einstellen, das eben definiert, bei welcher Frequenz der Filter "greift". Also wenn man lowpass einstellt und cutoff auf den wert $20, dann werden alle Frequenzen unter $30 durchgelassen, der klang wird also sehr dumpf klingen. Genaue Angaben wie man diese Frequenzen nach hex berechnet, finden sich im Handbuch, in der Praxis probiert man aber ein paar Werte und entscheidet mit dem Ohr, was gut klingt.
Bandpass lässt nur Frequenzen durch die im Bereich des Cutoff-Werts in der Mitte des Frequenzspektrums liegen. Also keine Bässe oder hohen Frequenzen. Manche nennen den bandpass auch "MIDpass".
Highpass lässt alle Frequenzen über dem Cutoff-Wert durch. Also können keine tiefen oder mittig spektralen Sounds gehört werden.
Des weiteren kann man die Resonanz des Filters einstellen. Höhere Resonanz bedeutet, die Frequenzen im Cutoff-Bereich werden angehoben, der Filtersound wirkt kräftiger. Am Frequenzspektrum kann man sich es so vorstellen wie das Dach eines Zirkuszeltes, das im Wirkungsbereich des Filters mittig herausgezogen wird. Je nach Einstellung können dadurch erwünschte oder unerwünschte Verzerrungen entstehen.
Filtertable[Bearbeiten | Quelltext bearbeiten]
Durch das bisher angeeignete Wissen erstellen wir ein Instrument mit viel Sustain. Dazu geben wir im Instrument-Editor ein:
[Filtertable Pos 01]
Springe zu FILT TBL TABULATOR
edit
[01:90 F7] (linkes Nibble $9x - setze lowpass, rechtes Nibble nicht verwendet, $Fx setze Resonanz auf $F,
$x7 welche Stimme/Oszillator gefiltert wird)
[02:00 10] (setze cutoff auf $10) [03:FF 00] (ende des Filterprogramms)<
Drücke jetzt SPACE , um eine per Filter gedämpfte Version Deines Instruments zu hören.
Weiterführende Erklärung der Byte-Werte:
Bytes die in der linken Spalte geschrieben sind, definieren entweder den Filtertyp oder sind Teil von Automatisierungsbefehlen (dasselbe wie bei PWM-Automation!). Also wenn das linke Byte im Bereich von $01 bis $7F ist, wird eine Automatisierung/Modulation durchgeführt, $01 bis $7F definiert die Anzahl der Frames wie lange moduliert wird, der dazugehörige Wert in der rechten Spalte derselben Zeile definiert die Geschwindigkeit/die Menge die pro Durchlauf hinzugefügt oder subtrahiert wird (wieder ein vorzeichenbehafteter Wert).
Wenn Du die Werte aus dem PWM-Automatisierungstutorial hier ausprobierst, wirst Du merken, das der Filter nicht rund läuft bzw. nicht konstant auf und ab geht sondern einen "harten" Anfang hat im Vergleich zum PWM-Register. Der Wert läuft normal von $00 bis $FF, nur ist $FF der Maximal- und $00 der Minimalwert. Beim PWM-Register liegt der Maximalwert in der Mitte bei $7FF. Also wird es langsam wichtig zu verstehen, was jetzt eigentlich ein vorzeichenbehafteter Wert ist. Damit man den Filter auch in die andere Richtung fahren kann. Musikalisch kann man sagen, der Filter geht "auf" desto höher der Cutoff-Wert ist. Manche behaupten, desto mehr Resonanz auf dem Filter liegt, desto mehr klingt es nach "Entengequake". das macht sich vor allem am SwinsidX2 bemerkbar.
Wenn der Bytewert in der linken Spalte des Filtertables über $7F (also $80 und mehr) liegt, dann werden beide Bytes in dieser Zeile wie folgt benutzt:
filter typ (linkes Byte) - da wir nur vier Werte haben (kein Filter/LOWpass/MIDpass/HIpass), werden nur die oberen vier Bits des linken Nibbles verwendet.
Folgende Bitkombinationen wählen den Filtertyp aus:
H M L I I O : D W : : : % 1 0 0 0 $8 - alles aus, normaler Sound ohne filter % 1 0 0 1 $9 - LowPass - LP % 1 0 1 0 $A - MidPass (Bandpass) % 1 0 1 1 $B - BP & LP % 1 1 0 0 $C - HighPass - HP % 1 1 0 1 $D - HP & LP % 1 1 1 0 $E - HP & BP % 1 1 1 1 $F - HP & BP & LP
Das rechte Nibble wird nicht verwendet, also $80 oder $1, oder sogar $8F hat dieselbe Funktion.
Das rechte Byte, linkes Nibble stellt die Resonanz ein ($0x - $Fx), die drei untersten Bits des ganz rechten Nibbles gibt an, welche Stimme/Channel/Oszillator/Voice gefiltert wird ($x0 - $x7):
[stimme/osz.] 3 2 1 : : : : : : : : : % 0 0 0 0 $0 - kein filter % 0 0 0 1 $1 - stimme 1 gefiltert % 0 0 1 0 $2 – stimme 2 gefiltert % 0 0 1 1 $3 - stimme 1 & 2 gefiltert % 0 1 0 0 $4 - stimme 3 gefiltert % 0 1 0 1 $5 - stimme 1 & 3 gefiltert % 0 1 1 0 $6 - stimme 2 & 3 gefiltert % 0 1 1 1 $7 - alle stimmen gefiltert
Nun können wir auch das Beispiel am Anfang des Kapitels verstehen:
[01 90 F7] (linkes Nibble $9x - setze LP, rechtes Nibble ungenutzt,
$Fx setze Resonanz, $x7 setze Stimme/Oszillator).
Noch ein Spezialfall: Wenn das linke Nibble $00 ist, so wie in Step 02 unseres Beispiels. [02:00 10] (setze cutoff auf $10) - $00 ist die Anweisung zum direkten setzen von cutoff auf einen gewissen Wert, in unserem Fall $10.
Ein einfacher Filterverlauf:
[01:90 F7] ($90 - setze LP, $F setze Resonanz, $7 setze channels) [02:00 80] (setze cutoff auf $80 = Mitte des gesamten Filterbereichs) [03:1F FF] (für $1F Frames, subtrahiere $01 vom cutoff Register) [04:1F 01] (für $1F Frames, addiere $01 zum cutoff Register) [05:FF 00] (Ende des Ablaufs)
Wichtig: In den Filterbeispielen wird der Filter immer für alle drei Stimmen ausgewählt, und zwar absichtlich - denn das Instrument das Du im Instrument-Editor bearbeitest, wird immer am Channel abgespielt, in dem Du zuletzt im Pattern-Editor warst. Das heißt, wenn Du Noten auf Pattern/Channel 1 eingibst und dann in den Instrument-Editor springst und mit SPACE eine Testnote triggerst, dann wird diese Note von Channel 1/Stimme 1 abgespielt, also wären hier nur Filter-Einstellungen hörbar, die sich auf Kanal 1 beziehen. Das heißt: Wenn Du einen Filter bearbeitest und nichts hören kannst, kann es sein, das Du den Klang auf dem falschen Kanal bzw. Stimme abspielst.
Falls es nicht klar aus dem Tutorial hervorgeht - der SID-Chip hat nur einen Filter - aber drei Oszillatoren. Wenn mehrere Sounds den Filter verwenden, dann nimmt ein Sound dem anderen den Filter weg, das jeweils zuletzt gespielte Instrument hat die Kontrolle darüber!
Sehr wichtig beim 6581: Hört man beim Einschalten und Umschalten des Filters ein lautes Knacksen, man sollte also taktisch versuchen im lautesten Moment des Songs den Filter einzuschalten, oder am Beginn des Songs, dann fällt das Knacksen nicht so auf. Wer findig ist, kann auch versuchen, aus dem Knacksen neue Sounds zu erstellen, z.B. zwischen verschiedenen Filtertypen umschalten, um eine Art Minimal-Sample-Wiedergabe zu erhalten. Beim 8580 Chip gibt es dieses knacksen nicht.
Vibrato[Bearbeiten | Quelltext bearbeiten]
Vibrato & Speedtable[Bearbeiten | Quelltext bearbeiten]
In der rechten Spalte des Instrument-Editors haben wir "Vibrato Param" und "Vibrato Delay". [Vibrato Param] zeigt auf eine Position im [SPEEDTBL].
[Vibrato Delay] definiert wie viele Frames abgespielt werden, bevor das Vibrato beginnt. Aber was ist ein Vibrato überhaupt? Ein Vibrato ist eine kleine (oder große wenn man es so einstellt) auf und ab vibrierende Änderung der Tonhöhe. Es gibt dem Klang mehr leben, macht das der Sound weniger statisch klingt. Geigenspieler und Gitarristen spielen oft Vibrato auf ihren Instrument, indem sie die Saite am Griffbrett auf und ab bewegen. Wir editieren ein Instrument und machen das folgende, um Vibrato hinzuzufügen:
edit [Vibrato Param 01] (zeigt auf eine Position im Speedtable) edit [Vibrato Delay 01] (das vibrato fängt sofort an ohne Verzögerung - der Wert 00 schaltet das Vibrato komplett ab!)
gehe zum Speedtable:
edit [01:0E 0F] drücke SPACE für ein weites (zu extremes) Vibrato.
edit [01:04 05] für ein mehr unterschwelliges Vibrato.
Der Speedtable ist etwas anders als üblichen Tables. Wenn er für Vibrato verwendet wird (andere Verwendungen im nächsten Kapitel) ist das linke Byte ($04 in unserem zweiten Beispiel) ein Indikator für wie viele Frames sich die Tonhöhe ändert, bevor sie in die andere Richtung geht. Das rechte Byte ($05 im zweiten Beispiel) definiert die Menge, die zur Tonhöhe addiert oder davon subtrahiert wird. Je kleiner der linke Wert ist, desto schneller wird das Vibrato. Je grösser der rechte Wert ist, desto weiter wird die Tonhöhenänderung. Durch dieses Konzept mit den gezählten Frames und Richtungswechsel kann es auch sein das der linke Wert, die ursprüngliche Tonhöhe ungewollt verändert. Maximalwert des linken Bytes ist $F7 (127 Frames bis Richtungswechsel), rechtes Byte geht bis $FF. Es gibt hier keine signed Byte-Werte.
Diagramm von [01:0E 0F]
/ \ /\ / \ / \ / \ / \ / \ / \ / \/ \
Diagramm von [01:04 05]
/\ /\ /\ /\ /\ / \/ \/ \/ \/ \/
Hinweis: Der Speedtable ist der einzige Table, der nicht "wie ein Programm" funktioniert. Er beinhaltet also keine Befehle, die abgearbeitet werden. Jede einzelne Zeile ist ein einzelner Eintrag ohne nachfolge. Es ist also auch nicht nötig, irgendwo am Ende ein $FF-Kommando zu setzen.
Patterns & Song-Aufbau[Bearbeiten | Quelltext bearbeiten]
Patterns editieren[Bearbeiten | Quelltext bearbeiten]
Da wir jetzt wissen, wie man ein Instrument erstellt, können wir anfangen, einen Song zu schreiben.
Wichtig zur Tastaturbelegung:
+ /- wechselt das Instrument (idealerweise eine Tastatur mit Ziffernblock verwenden)
Im Goattracker-Fenster sehen wir:
CHN 1 PAT.00 CHN 2 PATT.01 CHN 3 PATT.02 | | | derzeitiges Pattern | das geladen ist und | angezeigt wird | SID-Stimme/Channel
00 ... 00000 00 ... 00000 00 ... 00000
01 ... 00000 01 ... 00000 01 ... 00000
02 ... 00000 02 ... 00000 02 ... 00000
Wenn wir in den Pattern-Editor gehen und eine Note eingeben (z.B. N im Fasttracker-Layout), dann ändert sich Line 00 zu:
00 A-2 01000 |/| |/\ | | | | \| | | | Pattern-Befehl / -Kommando (nichts derzeit) | | Instrument-Nummer $01 | Oktave (mit / & * einstellbar) Notenwert
Du kannst die Cursortasten verwenden, um auf und ab zu scrollen und die Keyboard Klaviatur zu Noteneingabe verwenden. Des weiteren kann man Einfg und Entf verwenden, um Noten nach unten oder oben zu schieben.
- ENTER setzt ein Keyoff, das kann verwendet werden, um Instrumente stumm zu schalten, die das Gatebit permanent ein haben.
- shift+ENTER setzt ein Keyon, man kann den Klang also auch nach einem Keyoff wieder starten.
- <x backspace löscht die Note bei Cursorposition oder fügt ansonsten eine Pause ein.
- Bild auf und Bild ab springt 8 Schritte auf einmal im Pattern.
- < und > wechselt das Pattern im Channel, den man gerade bearbeitet
- Einfg / Entf am letzen Schritt des Patterns verändert die Pattern-Länge.
Es gibt noch viele weitere Shortcuts, die man verwenden kann und die das Komponieren einfacher gestalten. Mit F12 kann man das Hilfemenü aufrufen und sich ansehen was es noch so gibt.
Patternbefehle[Bearbeiten | Quelltext bearbeiten]
Die letzten drei Werte in einer Patternspalte werden für die Befehle verwendet. Die Abkürzungen und Funktionen sind:
- 0XY - Mache nichts.
- 1XY - Portamento nach oben (Tonhöhe nach oben) XY ist eine Position im Speedtable. In diesem Fall wird das als 16bit-Wert abgearbeitet, maximalgeschwindigkeit ist also $FF FF.
- 2XY - Portamento nach unten. XY zeigt auf einen 16bit-Wert im Speedtable.
- 3XY - Tonportamento. Die Tonhöhe gleitet interaktiv von einer Note zur nächsten. XY zeigt wieder auf den Speedtable als 16bit-Wert. Wenn XY $00 ist, werden die Noten zusammenhängend gespielt. Hinweis: Portamento wird solange fortgesetzt solange 1/2 oder 3 XY in der Befehlsspalte steht.
- 4XY - Fügt Vibrato zu Stimme hinzu, XY zeigt auf den Speedtable. Wird gleich verwendet wie Instrument Vibrato.
- 5XY - Setze Attack/Decay-Register direkt auf X/Y.
- 6XY - Setze Sustain/Release-Register direkt auf X/Y.
- 7XY - Setze Wellenform Register direkt auf XY. Wenn der Wavetable der betreffenden Stimme gerade die Wellenform verändert, hat der Table vorrang.
- 8XY - Führe Wavetable ab Position XY aus. $00 stoppt die Ausführung.
- 9XY - Führe Pulsetable ab Position XY aus. $00 stoppt die Ausführung.
- AXY - Führe Filtertable ab Position XY aus. $00 stoppt die Ausführung.
- BXY - Filter Steuerung, X ist Resonanz, Y ist Channel-Auswahl.
- 00 - Schaltet den Filter aus und stoppt die Table-Ausführung.
- CXY - Setze Filter Cutoff auf XY; funktioniert nicht wenn Filtertable bereits den Filter steuert.
- D0Y - Stelle Gesamtlautstärke ein $0-F.
- EXY - Shuffle Tempo, XY zeigt auf den Speedtable. Zwischen den beiden Werten im Table (links & rechts) wird auf jeden Taktschlag abgewechselt.
- FXY - Setze Tempo. $03-7F setzt das Tempo für alle Channels/Patterns; $83-$FF setzt das Tempo für das aktuelle Pattern (subtrahiere $80 für den eigentlichen wert); $03 ist die schnellste Geschwindigkeit. Tempo $00 und $01 rufen das Shuffle-Tempo auf, das mit Kommando EXY gesetzt wurde.
Orderlist[Bearbeiten | Quelltext bearbeiten]
Die [CHN ORDERLIST] oben rechts im Goattracker ist die eigentliche Playlist aller Patterns. Drücke F6 , um dort hinzu springen.
Normalerweise sieht es anfangs so aus:
1 00 RST00 2 01 RST00 3 02 RST00
Wenn wir den Cursor auf [00] bewegen und Einfg drücken, können wir Platz machen, um neue Patterns einzufügen. Entf entfernt Patterns wieder. Die Bedienung ist gewöhnungsbedürftig: Wenn man ENTER auf einem Pattern in [CHN ORDERLIST] drückt, dann wird dieses in den Editor geladen. Drückt man SPACE auf einem Pattern in der [CHN ORDERLIST], dann wird es grün eingefärbt, aber nicht in den Editor geladen. Das sind spezielle Funktionen, die das Songwriting erleichtern. Wenn wir nun folgende Tasten drücken:
- F1 : Der Song wird ganz von Anfang an wiedergegeben.
- F2 : Startet die Wiedergabe ab den grün markierten Patterns.
- F3 : Spielt die Patterns ab die gerade im Pattern-Editor geladen und zu sehen sind.
- F4 : Stoppt die Wiedergabe.
Hinweis: Als Standard sind die Steps im Patterneditor dezimal (00-63), weil das musikalisch einfacher ist, Pattern numbers sind aber in HEX angegeben. RST00 zeigt z.b. an das die Orderlist auf Position 00 wiederbeginnt, wenn das Ende erreicht ist. So kann man den Song ab gewählter Position endlos wiederholen. Um den Song normal ausklingen zu lassen, hat es sich bewährt, ein leeres Pattern am Ende einzufügen und dieses endlos zu wiederholen.
Hinweis: Es macht Sinn sich während dem komponieren kleine Notizen zu machen, welches Pattern jetzt genau was macht. Später, wenn man dranbleibt, hat man das alles im Kopf und sieht wie in der Matrix die ganzen Abläufe die hinter den HEX-Zahlen in der Orderlist stehen.
Gut zu wissen[Bearbeiten | Quelltext bearbeiten]
Abkürzungen & Ungewöhnliches[Bearbeiten | Quelltext bearbeiten]
- F4 : Stoppt auch den Sound der im Instrument-Editor getriggert wird.
- SPACE : Schaltet zwischen JAM/EDIT im Instrument-Editor um, triggert eine Testnote im Instrument-Editor (kann mit / und * oktaviert werden).
- F10 : Lädt Song im Pattern/Orderlist-Editor, kann aber auch Instrumente laden, wenn im Instrument Editor F10 gedrückt wird.
- F11 : Speichert Song im Pattern/Orderlist-Editor, speichert einzelne Instrumente im Instrument Editor.
- ENTER : Auf einem Wave/Pulse/Filtertable Pos XY im Instrumenteditor setzt Dich automatisch auf diesen Eintrag im betreffenden Table. Man muss also nicht herumsuchen, wo die Daten sind. Wenn es ein leeres, neues Instrument ist, dann bringt dich ENTER auf den nächsten freien Platz im Wavetable (der erste freie Platz der [$00 00] enthält).
- SHIFT+N : Im Instrument-Editor, editiert Instrumenten Name.
- SHIFT+N : In Tables, konvertiert Bytes zu vorzeichenbehafteten Werten. Also kann man Kapitel 2.1.4 jetzt abhaken, trotzdem sollte man wissen, wozu man das braucht.
- SHIFT+F8 : 6581/8580-Emulationumschaltung.
Zusätzliche Infos[Bearbeiten | Quelltext bearbeiten]
Wenn man einen Song zum .sid kompiliert (mit F9 ), muss man aufpassen das alle Daten in den Tables mit einem FF-Befehl aufhören, sonst bekommt man einen [table execution overflow] und der Song kann nicht erstellt werden.
Extrem wichtig: Manchmal drückt man versehentlich SHIFT LOCK und wundert sich, warum keine Eingaben mehr funktionieren. Ebenso wenn man im JAM-Mode ist, geht manchmal gar nichts. Diese zwei Sachen sollte man immer überprüfen, wenn auf einmal nichts mehr geht.
Es ist eine gute Idee, den Song auch mal am echten C64 probezuhören. Der coole Sound mit Filter-Raffinessen, den man stundenlang ausfeilt, wird am echten Gerät vielleicht gar nicht so gut klingen. Eine Alternative ist eine HardSID-Karte, die aber Latenz- und Timingprobleme hat. Die billige Variante ist die fakehardsid.dll-Simulation mit einem Nokia-Datenkabel über RS232. Da kann man den Soundchip direkt, fast ohne Latenz, aus Goattracker ansprechen und hat 100% authentisch seinen Klang.[3]
Weblinks[Bearbeiten | Quelltext bearbeiten]
- CSDb- Release Nr. 127454 - Arpeggio-Konverter-Tool "Tabtoarp"
Quellen[Bearbeiten | Quelltext bearbeiten]
- ↑ CSDb- Release Nr. 126471 - Urversion des Tutorials von oneBitman
- ↑ CSDb- Release Nr. 119990 - Tool von oneBitman
- ↑ Thema: fakehardsid.dll-Simulation mit einem Nokia-Datenkabel über RS232 auf Forum64.de