Nicht-Tracker prISM
Verfasst: Sa 29. Okt 2016, 14:05
So.
Ich habe nun mein ISM (Imperial Games Sound Machine) soweit "fertig", daß es benutzbar ist. Es gibt nur noch 2 Baustellen, eine kurzfristiger, eine längerfristiger geplant:
1) Die Filter-Befehle tun noch nichts. Einsetzen der Klang-Filter (Treble, Band, Bass) bewirkt derzeit gar nichts. Die Dokumentation dazu ist derzeit als vorläufig zu betrachten, weil es im Zuge der Programmierung hier noch zu Änderungen kommen kann.
2) Die Stereo-Option tut auch nichts. Stereo ist erst längerfristig geplant - wahrscheinlich werde ich es so gestalten, daß es eine Subroutine gibt, die nur Mono kann und eine, die Mono und Stereo kann. Beide werden vollständig kompatibel zueinander sein, aber die mit Stereo-Option wird evtl. mehr Rechenleistung und ggf. zusätzliche 8 kB Speicher brauchen.
Der dazugehörige Nicht-Tracker heißt prISM. Ich habe einfach etwas gesucht, das kurz ist, gut klingt, und (weil die Unit ISM heißt) zu den praktischerweise im Englischen haufenweise existierenden Wörtern gehört, die auf -ism enden. Man kann es auch verstehen als eine Abkürzung zu [pr]ogramming [ISM].
Dieser Nicht-Tracker ist soweit fertig. Ob ich jemals die Import/Export Funktionen noch einbaue, steht in den Sternen. Je mehr Code im Heap ist, umso weniger Platz bleibt für Samples frei. Momentan habe ich etwas über 300 kB frei für Samples. Da meine Samples 4-bit gespeichert werden, ergibt das 600 kB Samplespeicher. Bei der geringen Qualität, die ISM im Allgemeinen zu erzeugen imstande ist, sollte das ausreichen.
Wieso ist prISM ein Nicht-Tracker?
Das Format, in dem die Musikdaten eingegeben und abgespielt werden, entspricht in keiner Weise dem MOD-Format oder dessen unzähligen Derivaten.
Daten für die einzelnen Stimmen werden unabhängig voneinander eingegeben. Die Geschwindigkeit und andere Werte einzelner Stimmen ist beliebig einstellbar. In einer Stimme können Sprünge und Schleifen enthalten sein, die in anderen nicht benutzt werden. Außerdem können die Daten einer Stimme auch von anderen Stimmen benutzt werden, da die kompletten Daten als "Befehlsblock" vorliegen, für eine Stimme wird lediglich bestimmt, an welcher Stelle im Datenblock die Stimme beginnt zu arbeiten.
Dinge wie bedingte Sprünge, Unterprogrammaufrufe, Variablen und Stack erinnern hier mehr an ein Programm als an gewohnte Trackerdaten.
prISM erleichtert das Ganze aber ein wenig, indem es "Fenster" vorgibt, in denen die Befehle der einzelnen Stimmen eingegeben werden können. Die Startadressen der Stimmen sind auf ganze $200 (512) Words defaulted, dies entspricht der Größe für die Fenster, die ebenfalls jeweils $200 (512) Befehle aufnehmen können. Diese Anzahl wollte ich noch in 2er Potenzen einstellbar machen, aber momentan ist es erst einmal so. Die Stimmen-Startadressen können aber manuell geändert werden.
Die Anzeige der Werte kann hexadezimal oder dezimal erfolgen, die Befehle können in 4 Modi farblich hervorgehoben werden.
Abgesehen von den Befehlen mit einer Abspiellänge (die Töne selbst, dann noch Portamento =bending/binding, Ausklingen und Stille) gibt es noch viele Befehle, die keine Abspiellänge haben, sondern eher der Steuerung dienen. Somit wird es etwas schwieriger, wenn man wirklich "Tracker-artig" die Stimmen (also die einzelnen Spuren) nebeneinander "synchronisiert" darstellen will. Dies könnte man nur erreichen, indem man die Zwischenräume zwischen den Befehlen notfalls mit "NOP"s auffüllt (Befehle, die nichts tun).
Das, was in MODs durch entsprechend große Zwischenräume zwischen den Ton-Befehlen erreicht wird, nämlich deren Abspiellänge festzulegen, geschieht in ISM (und damit prISM) durch Längenparameter.
ISM unterstützt auch eine quasi-direkte Kommunikation zwischen dem Hauptprogramm und der ISM-Subroutine, d.h. das Senden von Werten über Puffer zwischen den Programm und ISM.
Eine weitere Besonderheit ist, daß Samples in ISM nur als "Beilage" unterstützt werden - die eigentliche "Stärke" bzw. das Hauptmerk wurde auf digitale Klangsynthese gelegt. Wer die Einstellungen für die Stimmen für Hüllkurven (Attack/Decay/Sustain/Release), und mischbare Wellenformen sieht. wird nicht überrascht sein, zu erkennen, daß das Ganze von der Arbeitsweise des SID (Sound Interface Device, der bekannte Soundchip, der z.B. im C64 verbaut ist) inspiriert ist - wenn auch in abgewandelter Form.
Eine weitere Schwäche oder Stärke (je nachdem, von welcher Seite aus man es betrachtet) ist die Arbeitsweise mit den Samples:
Speicher ist knapp, Samples brauchen viel Speicher. Im RealMode kann man keine Samples "live" abspielen, wenn sie sich im Adreßraum über 1 MB befinden. Dies brachte mich dazu, Samples "dynamisch" einsetzbar zu machen - und zwar direkt durch den Autor/Komponisten der Musikstücke. Somit können Samples "ein-/ausgeblendet" werden, je nachdem, ob sie gerade gebraucht werden oder nicht.
Nun zur Schwäche:
Samples werden numeriert erkannt/geladen. Deshalb müssen Samples immer einen Namen wie z.B. SAMPLE??.SMP haben, wobei ?? für eine hexadezimale Nummer $00 bis $FE steht. Möglich ist auch ein ganzer Pfad wie D:\SAMPLES\S??.SMP
prISM speichert generierte Stücke zusammen mit den genutzten Samples ab, aber beim Laden werden (derzeit) die Samples NICHT mit geladen. Die Samples müssen sich im selben Verzeichnis wie prISM befinden und SAMPLE00.SMP bis SAMPLEFE.SMP heißen und diese werden während des Abspielens geladen (durch die entsprechenden Befehle).
Das bedeutet, daß es derzeit (noch) nicht ohne weiteres möglich ist, ein Musikstück mit Samples "weiterzugeben" um es in einem anderen prISM abzuspielen, ohne die Samples weiterzugeben.(Dazu müßten diese manuell vom *.ISM File abgetrennt und als SAMPLE??.SMP gespeichert werden.) Dies ist der obengenannten Arbeitsweise von ISM geschuldet.
Der Plan sieht aber vor, daß prISM (vielleicht) später die Samples in ein separates Verzeichnis oder den XMS puffert. Außerdem wird es vielleicht noch ein zusätzliches kleines Programm geben, das nichts weiter tut außer ein *.ISM-File (inklusive Samples) abzuspielen.
Zusätzlich zu prISM gibt es das Tool SNDCHECK, das dazu dient, WAVs in ISM-formatige Samples umzuwandeln - Hauptsächlich wichtig ist dabei die Option, dem Sample den "Grundton" zuzuweisen, d.h. den "hauptsächlichen Ton", den man hört, wenn das Sample gespielt wird.
(Dient dazu, das Sample in ISM entsprechend zu "pitchen", wenn es in verschiedenen Tonhöhen abgespielt werden soll.)
Dieses Tool ist derzeit nur für PC-Speaker ausgelegt.
Ja, das Ganze sieht nicht gerade danach aus, was ein normaler "Tracker" (in diesem Sinne ein Musiker, der mit entsprechenden Programmen arbeitet) erwarten würde.
Der Hauptgrund für die derartige Gestaltung der Arbeitsweise von ISM ist deren geplanter Einsatz in Spielen.
Hier war mir vor allem wichtig, Speicher und Rechenzeit zu sparen, sowie eine möglichst einfach zu realisierende Kommunikation zwischen Programm und ISM zu ermöglichen. ISM ist nicht nur gedacht, um eine Hintergrundmusik abzuspielen, sondern auch dafür, Klangeffekte zu erzeugen - die natürlich abhängig vom Spielgeschehen ausgelöst werden sollten.
Technische Daten:
16 Stimmen
8-Bit Sound (mono, stereo geplant)
Sound gemischt aus 4-bit Ausgangswerten (Wellen, Samples)
8 Oktaven à 12 Halbtöne
(durch Transponieren bis zu 10 Oktaven nutzbar)
32 kByte (=16384 Befehle) maximal direkt ansprechbar
96 Bytes pro Stimme für die Werte
7 vorgegebene Wellenformen
(eigene Wellenformen nutzbar - aus Samples)
4-Bit Rauschgenerator mit 16 Bit Seed
8 Byte (4 Adressen) Stack pro Stimme
2 frei verfügbare Variablen/Register pro Stimme
(hauptsächlich für Schleifen)
Für prISM:
unterstützt PC-Speaker
unterstützt Sound Blaster[tm] (mit IRQ 2, 3, 5 oder 7 und DMA 0, 1 oder 3)
max. 16 "Stimmen"-Fenster
Bedienung mit Tastatur und Maus
Fenster schmal/breit und in 1-3 Reihen darstellbar
bis zu 7 Modes:
- Textmode 80x25 und 80x50,
- bis zu 5 Vesa-Grafik-Modes, als Pseudo-Textmode benutzt
Hinweis: Es kann möglich sein, daß bei Samples mit zu geringer oder hoher "Grundfrequenz" ISM mit Überlauf abstürzt. Da muß ich noch testen, wahrscheinlich werde ich diese Assembler-Sequenz in einem externen Testprogramm mal bruteforcen lassen.
Kurze Bedienung von prISM:
ALT gedrückt halten (oder mit Maus auf oberste Zeile fahren), dann die entsprechend rot markierte Taste drücken (oder in Leiste klicken) für die entsprechenden Menüs.
F1 = Hilfe zum markierten Befehl (kann unter Help auf deutsch umgestellt werden)
A bis Z, mit/ohne Shift = um die Befehle einzugeben.
A bis P, mit Ctrl = zum jeweiligen Fenster wechseln
TAB = zwischen den Fenstern wechseln
Ctrl+T = Startadresse des Fensters (der Stimme) eingeben.
Ctrl+Z = Startadresse des Fensters in "Tracks" eingeben.
Ctrl+Y = zu Zeile im Fenster wechseln.
Die komplette Bedienung zu erklären würde jetzt wohl zu weit führen. Learing-by-doing ist hier wohl die brauchbarere Methode.
Bis auf die Hilfen zu den Befehlen, die optional auch in deutsch verfügbar sind, ist das ganze prISM komplett in englisch.
So - nach all dem frage ich mich, ob es überhaupt Sinn macht, prISM jemandem anzutun. Es ist quasi benutzbar, allerdings außer von mir selbst noch von niemandem getestet - es besteht also noch Explosionsgefahr.
Soll ich dieses Ding wirklich hochladen und damit jedem erfahrenen Tracker-Musiker die Augen bluten lassen und dafür sorgen, daß er vor Entsetzen vom Glauben abfällt oder besteht eher kein Interesse daran, sich dieses Ding anzutun?
Ich habe nun mein ISM (Imperial Games Sound Machine) soweit "fertig", daß es benutzbar ist. Es gibt nur noch 2 Baustellen, eine kurzfristiger, eine längerfristiger geplant:
1) Die Filter-Befehle tun noch nichts. Einsetzen der Klang-Filter (Treble, Band, Bass) bewirkt derzeit gar nichts. Die Dokumentation dazu ist derzeit als vorläufig zu betrachten, weil es im Zuge der Programmierung hier noch zu Änderungen kommen kann.
2) Die Stereo-Option tut auch nichts. Stereo ist erst längerfristig geplant - wahrscheinlich werde ich es so gestalten, daß es eine Subroutine gibt, die nur Mono kann und eine, die Mono und Stereo kann. Beide werden vollständig kompatibel zueinander sein, aber die mit Stereo-Option wird evtl. mehr Rechenleistung und ggf. zusätzliche 8 kB Speicher brauchen.
Der dazugehörige Nicht-Tracker heißt prISM. Ich habe einfach etwas gesucht, das kurz ist, gut klingt, und (weil die Unit ISM heißt) zu den praktischerweise im Englischen haufenweise existierenden Wörtern gehört, die auf -ism enden. Man kann es auch verstehen als eine Abkürzung zu [pr]ogramming [ISM].
Dieser Nicht-Tracker ist soweit fertig. Ob ich jemals die Import/Export Funktionen noch einbaue, steht in den Sternen. Je mehr Code im Heap ist, umso weniger Platz bleibt für Samples frei. Momentan habe ich etwas über 300 kB frei für Samples. Da meine Samples 4-bit gespeichert werden, ergibt das 600 kB Samplespeicher. Bei der geringen Qualität, die ISM im Allgemeinen zu erzeugen imstande ist, sollte das ausreichen.
Wieso ist prISM ein Nicht-Tracker?
Das Format, in dem die Musikdaten eingegeben und abgespielt werden, entspricht in keiner Weise dem MOD-Format oder dessen unzähligen Derivaten.
Daten für die einzelnen Stimmen werden unabhängig voneinander eingegeben. Die Geschwindigkeit und andere Werte einzelner Stimmen ist beliebig einstellbar. In einer Stimme können Sprünge und Schleifen enthalten sein, die in anderen nicht benutzt werden. Außerdem können die Daten einer Stimme auch von anderen Stimmen benutzt werden, da die kompletten Daten als "Befehlsblock" vorliegen, für eine Stimme wird lediglich bestimmt, an welcher Stelle im Datenblock die Stimme beginnt zu arbeiten.
Dinge wie bedingte Sprünge, Unterprogrammaufrufe, Variablen und Stack erinnern hier mehr an ein Programm als an gewohnte Trackerdaten.
prISM erleichtert das Ganze aber ein wenig, indem es "Fenster" vorgibt, in denen die Befehle der einzelnen Stimmen eingegeben werden können. Die Startadressen der Stimmen sind auf ganze $200 (512) Words defaulted, dies entspricht der Größe für die Fenster, die ebenfalls jeweils $200 (512) Befehle aufnehmen können. Diese Anzahl wollte ich noch in 2er Potenzen einstellbar machen, aber momentan ist es erst einmal so. Die Stimmen-Startadressen können aber manuell geändert werden.
Die Anzeige der Werte kann hexadezimal oder dezimal erfolgen, die Befehle können in 4 Modi farblich hervorgehoben werden.
Abgesehen von den Befehlen mit einer Abspiellänge (die Töne selbst, dann noch Portamento =bending/binding, Ausklingen und Stille) gibt es noch viele Befehle, die keine Abspiellänge haben, sondern eher der Steuerung dienen. Somit wird es etwas schwieriger, wenn man wirklich "Tracker-artig" die Stimmen (also die einzelnen Spuren) nebeneinander "synchronisiert" darstellen will. Dies könnte man nur erreichen, indem man die Zwischenräume zwischen den Befehlen notfalls mit "NOP"s auffüllt (Befehle, die nichts tun).
Das, was in MODs durch entsprechend große Zwischenräume zwischen den Ton-Befehlen erreicht wird, nämlich deren Abspiellänge festzulegen, geschieht in ISM (und damit prISM) durch Längenparameter.
ISM unterstützt auch eine quasi-direkte Kommunikation zwischen dem Hauptprogramm und der ISM-Subroutine, d.h. das Senden von Werten über Puffer zwischen den Programm und ISM.
Eine weitere Besonderheit ist, daß Samples in ISM nur als "Beilage" unterstützt werden - die eigentliche "Stärke" bzw. das Hauptmerk wurde auf digitale Klangsynthese gelegt. Wer die Einstellungen für die Stimmen für Hüllkurven (Attack/Decay/Sustain/Release), und mischbare Wellenformen sieht. wird nicht überrascht sein, zu erkennen, daß das Ganze von der Arbeitsweise des SID (Sound Interface Device, der bekannte Soundchip, der z.B. im C64 verbaut ist) inspiriert ist - wenn auch in abgewandelter Form.
Eine weitere Schwäche oder Stärke (je nachdem, von welcher Seite aus man es betrachtet) ist die Arbeitsweise mit den Samples:
Speicher ist knapp, Samples brauchen viel Speicher. Im RealMode kann man keine Samples "live" abspielen, wenn sie sich im Adreßraum über 1 MB befinden. Dies brachte mich dazu, Samples "dynamisch" einsetzbar zu machen - und zwar direkt durch den Autor/Komponisten der Musikstücke. Somit können Samples "ein-/ausgeblendet" werden, je nachdem, ob sie gerade gebraucht werden oder nicht.
Nun zur Schwäche:
Samples werden numeriert erkannt/geladen. Deshalb müssen Samples immer einen Namen wie z.B. SAMPLE??.SMP haben, wobei ?? für eine hexadezimale Nummer $00 bis $FE steht. Möglich ist auch ein ganzer Pfad wie D:\SAMPLES\S??.SMP
prISM speichert generierte Stücke zusammen mit den genutzten Samples ab, aber beim Laden werden (derzeit) die Samples NICHT mit geladen. Die Samples müssen sich im selben Verzeichnis wie prISM befinden und SAMPLE00.SMP bis SAMPLEFE.SMP heißen und diese werden während des Abspielens geladen (durch die entsprechenden Befehle).
Das bedeutet, daß es derzeit (noch) nicht ohne weiteres möglich ist, ein Musikstück mit Samples "weiterzugeben" um es in einem anderen prISM abzuspielen, ohne die Samples weiterzugeben.(Dazu müßten diese manuell vom *.ISM File abgetrennt und als SAMPLE??.SMP gespeichert werden.) Dies ist der obengenannten Arbeitsweise von ISM geschuldet.
Der Plan sieht aber vor, daß prISM (vielleicht) später die Samples in ein separates Verzeichnis oder den XMS puffert. Außerdem wird es vielleicht noch ein zusätzliches kleines Programm geben, das nichts weiter tut außer ein *.ISM-File (inklusive Samples) abzuspielen.
Zusätzlich zu prISM gibt es das Tool SNDCHECK, das dazu dient, WAVs in ISM-formatige Samples umzuwandeln - Hauptsächlich wichtig ist dabei die Option, dem Sample den "Grundton" zuzuweisen, d.h. den "hauptsächlichen Ton", den man hört, wenn das Sample gespielt wird.
(Dient dazu, das Sample in ISM entsprechend zu "pitchen", wenn es in verschiedenen Tonhöhen abgespielt werden soll.)
Dieses Tool ist derzeit nur für PC-Speaker ausgelegt.
Ja, das Ganze sieht nicht gerade danach aus, was ein normaler "Tracker" (in diesem Sinne ein Musiker, der mit entsprechenden Programmen arbeitet) erwarten würde.
Der Hauptgrund für die derartige Gestaltung der Arbeitsweise von ISM ist deren geplanter Einsatz in Spielen.
Hier war mir vor allem wichtig, Speicher und Rechenzeit zu sparen, sowie eine möglichst einfach zu realisierende Kommunikation zwischen Programm und ISM zu ermöglichen. ISM ist nicht nur gedacht, um eine Hintergrundmusik abzuspielen, sondern auch dafür, Klangeffekte zu erzeugen - die natürlich abhängig vom Spielgeschehen ausgelöst werden sollten.
Technische Daten:
16 Stimmen
8-Bit Sound (mono, stereo geplant)
Sound gemischt aus 4-bit Ausgangswerten (Wellen, Samples)
8 Oktaven à 12 Halbtöne
(durch Transponieren bis zu 10 Oktaven nutzbar)
32 kByte (=16384 Befehle) maximal direkt ansprechbar
96 Bytes pro Stimme für die Werte
7 vorgegebene Wellenformen
(eigene Wellenformen nutzbar - aus Samples)
4-Bit Rauschgenerator mit 16 Bit Seed
8 Byte (4 Adressen) Stack pro Stimme
2 frei verfügbare Variablen/Register pro Stimme
(hauptsächlich für Schleifen)
Für prISM:
unterstützt PC-Speaker
unterstützt Sound Blaster[tm] (mit IRQ 2, 3, 5 oder 7 und DMA 0, 1 oder 3)
max. 16 "Stimmen"-Fenster
Bedienung mit Tastatur und Maus
Fenster schmal/breit und in 1-3 Reihen darstellbar
bis zu 7 Modes:
- Textmode 80x25 und 80x50,
- bis zu 5 Vesa-Grafik-Modes, als Pseudo-Textmode benutzt
Hinweis: Es kann möglich sein, daß bei Samples mit zu geringer oder hoher "Grundfrequenz" ISM mit Überlauf abstürzt. Da muß ich noch testen, wahrscheinlich werde ich diese Assembler-Sequenz in einem externen Testprogramm mal bruteforcen lassen.
Kurze Bedienung von prISM:
ALT gedrückt halten (oder mit Maus auf oberste Zeile fahren), dann die entsprechend rot markierte Taste drücken (oder in Leiste klicken) für die entsprechenden Menüs.
F1 = Hilfe zum markierten Befehl (kann unter Help auf deutsch umgestellt werden)
A bis Z, mit/ohne Shift = um die Befehle einzugeben.
A bis P, mit Ctrl = zum jeweiligen Fenster wechseln
TAB = zwischen den Fenstern wechseln
Ctrl+T = Startadresse des Fensters (der Stimme) eingeben.
Ctrl+Z = Startadresse des Fensters in "Tracks" eingeben.
Ctrl+Y = zu Zeile im Fenster wechseln.
Die komplette Bedienung zu erklären würde jetzt wohl zu weit führen. Learing-by-doing ist hier wohl die brauchbarere Methode.
Bis auf die Hilfen zu den Befehlen, die optional auch in deutsch verfügbar sind, ist das ganze prISM komplett in englisch.
So - nach all dem frage ich mich, ob es überhaupt Sinn macht, prISM jemandem anzutun. Es ist quasi benutzbar, allerdings außer von mir selbst noch von niemandem getestet - es besteht also noch Explosionsgefahr.
Soll ich dieses Ding wirklich hochladen und damit jedem erfahrenen Tracker-Musiker die Augen bluten lassen und dafür sorgen, daß er vor Entsetzen vom Glauben abfällt oder besteht eher kein Interesse daran, sich dieses Ding anzutun?