Nicht-Tracker prISM

Diskussion zum Thema Programmierung unter DOS (Intel x86)
DOSferatu
DOS-Übermensch
Beiträge: 1220
Registriert: Di 25. Sep 2007, 12:05
Kontaktdaten:

Re: Nicht-Tracker prISM

Beitrag von DOSferatu »

zatzen hat geschrieben:Ich habe das gleiche Stück was ich in ZSM bzw. X-Tracker gemacht habe, auch einmal in AtavISM gemacht.

http://www.zatzen.net/DKONGJR.ISM
Habe mir beides (ZSM und ISM) mal angehört und bin der Meinung, speziell dieses Stück klingt in ISM sogar etwas besser/"reiner".

Naja, ZSM ist auf Samplenutzung/MOD ausgelegt und hat da eindeutigen weiten Vorsprung zu ISM. ISM dagegen, mit seinem von Vornherein auf Digi-Klangsynthese ausgelegten Ansatz, ist da vorn, wo Hüllkurven/Wellenformen nachzubilden sind. (Subjektive Empfindung meinerseits).
Will sagen: Um diesen 8-Bit "Chiptune" Kram nachzubilden, ist ISM wahrscheinlich ziemlich gut geeignet, weil es auf dem gleichen Prinzip in Software basiert, was die Chips damals in Hardware gemacht haben.
zatzen hat geschrieben:Hat mich ein wenig Zeit gekostet, ich bin eben noch nicht so versiert in dem Programm, aber das ist alles (fast) eine Sache der Gewöhnung. Fast, weil solche Dinge wie Patterns kopieren fehlen - aber ich verstehe schon warum Du an soetwas ersteinmal nicht gedacht hast, schliesslich lebt ISM ja von Nicht-Redundanz. Allerdings wird man es beim Trackern nicht vermeiden können dass sich Spuren wiederholen, und es wäre eine Frage, wie intelligent AtavISM mit diesen Daten umgeht.
Ja, wenn Dinge wie Patterns kopieren fehlen WÜRDEN, wäre das auch wirklich schade. Aber sie fehlen ja gar nicht. Ich habe es letztens extra auch noch mal in DOSBox getestet, damit es nicht daran liegt, daß es wegen DOSBox nicht funktioniert.

Mein Tutorial scheint da nicht geholfen zu haben. Also, tue mal folgendes:
Als erstes: Lade mal diese 1-Pattern Musik DAUERSNG.ISM in's aktuelle AtavISM (v0.15).
Das nur, damit Du etwas hast, mit dem Du arbeiten kannst.

Nun kommt, wie man ein neues (gleiches) Pattern macht:
* STRG A drücken (falls Du nicht sowieso schon in Spur/Stimme/Spalte A bist)
* POS1 drücken (falls Du nicht sowieso schon in Zeile 1 bist)
* SHIFT drücken UND GEDRÜCKT HALTEN, BIS ICH "SHIFT loslassen" SAGE!
* ENDE drücken (die Stimme A ist nun komplett markiert)
* 7-mal CURSOR_NACH_RECHTS drücken (markiert nacheinander die anderen Stimmen)
* SHIFT loslassen (ja, jetzt kann losgelassen werden. alles zu kopierende ist markiert)
* ALT M drücken (das Modify-Menü öffnet sich. Auswahlbalken steht schon auf "Copy")
* jetzt C oder Enter drücken (Enter möglich, weil Balken ja schon auf Copy steht)
[Die Statuszeile ändert sich, zeigt an, daß Kopieren jetzt aktiviert ist. Gleichzeitig wurde der zu kopierende Bereich in einen Puffer geladen - MS-Windows würde das das "Zwischenspeicher" nennen.]
* jetzt die Taste + auf dem Ziffernblock drücken (ein neues leeres Pattern erstellt sich)
[Das Sequenzer-Fenster ist jetzt aktiv. Also zurückwechseln zu Fenster (Stimme) A, und Position 1...]
* STRG A drücken (Stimme A)
* POS1 drücken (ganz oben)
[Jetzt steht der Cursor links oben im neuen Pattern. Weil gerade COPY aktiv ist, wird Enter nun nicht mehr das machen, was es sonst machen würde - sondern macht das, was in der Statuszeile steht!]
* Enter drücken.

Und schon ist das neue Pattern erstellt! Ja, das liest sich jetzt komplizierter als es in Wirklichkeit ist - wenn man das Prinzip des Markierens nämlich erst einmal verstanden hat. In Pascal, und auch in Windows, sowie in jedem einigermaßen gescheiten Texteditor, der mir je untergekommen ist, dient SHIFT, zusammen mit den "Bewegungstasten" (also POS1, ENDE, BILDHOCH/BILDRUNTER oder CURSORTASTEN) dazu, über einen Bereich, ausgehend von der aktuellen Position, eine Markierung zu ziehen. Deshalb schien es mir das Einfachste, hier identisch vorzugehen.

Ach ja: Am Ende, um Kopieren (COPY) wieder auszuschalten:
* ESC drücken (Statusleiste wird wieder leer, Enter reagiert wieder wie immer)
Um auch die Markierung zu entfernen (das zu Kopierende ist an der ursprünglichen Stelle immer noch markiert) , nochmal:
* ESC drücken.

Wieso so kompliziert? Ist das nicht benutzer-unfreundlich?
Nein - eigentlich eher im Gegenteil. Denn, wie man mit etwas Herumprobieren herausfindet (wenn man das obengenannte mal ausprobiert und verstanden hat), gibt es einem viel mehr Möglichkeiten:
Man kann auch nur einen Teilbereich, nur eine einzelne Stimme oder nur ein paar Zeilen markieren - und: Das Ziel kann beliebig sein, d.h. es muß nicht ein komplettes Pattern sein, sondern man kann auch nur ein paar Zeilen kopieren, z.B. mehrmals hintereinander, um sie nicht manuell eingeben zu müssen.
Damit das einfacher geht, bleibt COPY (und auch andere "Modify" Funktionen) zunächst erst einmal aktiv - dann genügt nämlich, an die nächste Zielposition zu gehen, nochmals Enter zu drücken, und es wird eine weitere Kopie gemacht. Erst wenn man es mit ESC ausschaltet, bleibt nur noch die Markierung. Dann kann man mit dem Markierten auch noch andere Dinge machen (z.B. nochmal Modify aufrufen und eine andere Funktion benutzen - Verschieben, Löschen, usw.) Und praktischerweise, wenn man das NICHT will, braucht man nach dem Kopieren nur 2x statt 1x ESC drücken, um beides auszuschalten.

Ich bitte um Entschuldigung, wenn ich etwas forsch klinge, aber:
Was genau ist daran nicht zu verstehen?

Mit dem obengenannten Beispiel sollte es möglich sein, neue, gleiche Patterns zu erzeugen - und, wenn man es verstanden hat, auch neue Spuren oder neue Bereiche zu kopieren.

Hinweis: Wenn ein Musikstück z.B. nur 3 Spuren/Kanäle/Stimmen hat, ist es eine gute Idee, im Sequenzerfenster (STRG K) die Zahl oben links (die jetzt auf 8 steht) auf die Anzahl Stimmen zu stellen (z.B. 3). Die Zifferntasten oder die +/- Tasten (auf dem alphanumerischen Teil der Tastatur) helfen dabei. (Die +/- Tasten des Ziffernblocks kann man ja nun leider nicht mehr nehmen, weil auf Kundenwunsch anderweitig belegt.)

Ich hoffe, die gemachten Anmerkungen können helfen, mit AtavISM noch besser arbeiten zu können.
Benutzeravatar
zatzen
DOS-Guru
Beiträge: 518
Registriert: Di 17. Apr 2012, 05:10
Wohnort: bei Köln
Kontaktdaten:

Re: Nicht-Tracker prISM

Beitrag von zatzen »

DOSferatu hat geschrieben:Habe mir beides (ZSM und ISM) mal angehört und bin der Meinung, speziell dieses Stück klingt in ISM sogar etwas besser/"reiner".

Naja, ZSM ist auf Samplenutzung/MOD ausgelegt und hat da eindeutigen weiten Vorsprung zu ISM. ISM dagegen, mit seinem von Vornherein auf Digi-Klangsynthese ausgelegten Ansatz, ist da vorn, wo Hüllkurven/Wellenformen nachzubilden sind. (Subjektive Empfindung meinerseits).
Will sagen: Um diesen 8-Bit "Chiptune" Kram nachzubilden, ist ISM wahrscheinlich ziemlich gut geeignet, weil es auf dem gleichen Prinzip in Software basiert, was die Chips damals in Hardware gemacht haben.
Ja, natürlich. NES Musik ist für ZSM nur eine eher inkompatible Ausnahmeerscheinung.
Ich habe mich aber gefreut, in einem so kleinen ZSM durchschnittlich komplexe NES Musik
machen zu können. Und in diesem Beispiel werden dabei insgesamt nur ca. 250 Byte Patterndaten
für etwa 15 Sekunden Musik benötigt, bei vernachlässigbarem Sample-Speicherplatz.
Das eröffnet mir die Möglichkeit, ausführliche Musik für ein Spiel auf ein paar KB zu beschränken.
Natürlich ist die Versuchung sehr groß, für Drums längere Samples zu verwenden, oder
auch zusätzlich zu den simplen Wellenformen-Loops komplexere, wenn auch kurze, Klänge
hinzuzufügen, aber grundsätzlich war es eine gute Erfahrung, einmal Sample-minimalistisch
unterwegs zu sein und mit den beschränkten Mitteln von logarithmischen 16-Stufen Lautstärke-
Befehlen einigermaßen die Hüllkurven nachzubilden.
Bleibt natürlich die Trade-Off-Geschichte: Wozu ein meinetwegen 3 KB kleines ZSM wenn
die Abspielroutinen größer sind? Diese sind allerdings relativ knapp gehalten, d.h. es geht
gar nicht sonderlich kleiner. ZSMPLAY.EXE ist so groß wegen der ganzen Modi und Extras in
den Player-Routinen die den Modi dienen.

Danke für die Anleitung mit dem Kopieren! Das Markieren habe ich schon hinbekommen,
aber dann blickte ich nicht mehr weiter durch. Werde ich bei der nächsten Sitzung
so machen. Ich hatte auch eine spontane Idee für ein längeres Liedchen das ich sogar
auswendig in aller Mehrstimmigkeit im Kopf habe... Komme ich nur gerade nicht drauf.
mov ax, 13h
int 10h

while vorne_frei do vor;
DOSferatu
DOS-Übermensch
Beiträge: 1220
Registriert: Di 25. Sep 2007, 12:05
Kontaktdaten:

Re: Nicht-Tracker prISM

Beitrag von DOSferatu »

zatzen hat geschrieben:Ja, natürlich. NES Musik ist für ZSM nur eine eher inkompatible Ausnahmeerscheinung.
Ich habe mich aber gefreut, in einem so kleinen ZSM durchschnittlich komplexe NES Musik
machen zu können. Und in diesem Beispiel werden dabei insgesamt nur ca. 250 Byte Patterndaten
für etwa 15 Sekunden Musik benötigt, bei vernachlässigbarem Sample-Speicherplatz.
Das eröffnet mir die Möglichkeit, ausführliche Musik für ein Spiel auf ein paar KB zu beschränken.
Tja, die ganz alten 8-Bit-Konsolen/Computer mit ihrem Speichermangel (C64 mit seinen 64kByte war ja seinerzeit eher die Ausnahme) und ihrer Taktfrequenz zwischen 0,5 bis 4 MHz (bei Befehlen, die je nach CPU und Befehl so zwischen 2-10 Takte brauchten) zwangen einen, speicher- und CPU-schonend zu entwickeln. Ich wäre dafür, daß jeder, der heute programmieren lernt, auch mal diese Seite kennenlernt.

Dieses "ich habe Framework A, F und Q und Treiber X, Y und Z und murkse alles zusammen mit ein bißchen eigenem Codeanteil von 2% Skript'code' - das ist einfach keine Programmierung. So lernt man auch quasi gar nichts über Algorithmen und Funktionalität - und baut nur speicherfressende schneckenlahme Software, die das System übermäßig beanspruchen, ohne daß der Enduser auch einen adäquaten Nutzen erhält... (na gut, damit kann man heutzutage wahrscheinlich immer noch Entwickler bei Microsoft werden...)

Ich meine damit: Selbst dann, wenn man es nicht täglich anwenden sollte, sollte man auch mal in dieser Richtung gearbeitet haben. Das stellt einen selbst erst einmal in die richtige Relation und lehrt manchem heutigen überkandidelten IT-Experten vielleicht einmal etwas Demut.
zatzen hat geschrieben:Natürlich ist die Versuchung sehr groß, für Drums längere Samples zu verwenden, oder auch zusätzlich zu den simplen Wellenformen-Loops komplexere, wenn auch kurze, Klänge
hinzuzufügen, aber grundsätzlich war es eine gute Erfahrung, einmal Sample-minimalistisch
unterwegs zu sein und mit den beschränkten Mitteln von logarithmischen 16-Stufen Lautstärke-
Befehlen einigermaßen die Hüllkurven nachzubilden.
Ja, wie ich bereits erwähnte: Wo ein komplexer Klang allein durch Klangsynthese nicht erreichbar wäre, bzw. wo man allein 8 Stimmen für diesen einen Klang bräuchte, können stattdessen kurze Samples schon nützlich sein. Gerade im Percussion-Bereich sind Klänge oft etwas komplexer (auch wenn man es ihnen nicht anhört) und ein Sample schafft hier wohl insgesamt mehr als z.B. digitale Klangsynthese inklusive softwaremäßiger Nachbildung der - gerade bei Percussion - benötigten Filter. Das gleiche gilt z.B. für Dinge wie den "Orchesterschlag" oder verzerrte E-Gitarren.
zatzen hat geschrieben:Bleibt natürlich die Trade-Off-Geschichte: Wozu ein meinetwegen 3 KB kleines ZSM wenn die Abspielroutinen größer sind? Diese sind allerdings relativ knapp gehalten, d.h. es geht gar nicht sonderlich kleiner. ZSMPLAY.EXE ist so groß wegen der ganzen Modi und Extras in
den Player-Routinen die den Modi dienen.
Naja, das generelle "Problem" bei generalisierten "virtuellen Maschinen"/"virtuellen Chips" ist, daß sie in ihrem Code alles enthalten, was die Daten eventuell anfordern können. Das kann alles oder nichts sein. Es ist möglich, für ein Musikstück, eine Grafikdarstellung oder eine Spielfigurensteuerung (Pseudo-)Code zu schreiben, der nur 10% der vorhandenen Fähigkeiten der genannten Subroutinen überhaupt benutzt, so daß man 90% ungenutzten Code im Speicher herumliegen hat.

Die Alternative ist, alles direkt zu entwickeln, d.h. z.B. Musik als richtiges Programm in nativem Code (Assembler, Hochsprache) zu bauen, die direkt auf die Register der Peripherie zugreift (oder für Windows&Co: auf die Treiberschnittstellen). Hier würde man evtl. Speicher und auch Performance sparen.

Die Stärke solcher VMs (wie ZSM, ISM, GameSys2...) ist, daß man einmal Programmiertes nicht immer wieder programmieren muß und daß die zu erzeugenden Daten klein sind und ohne Wiederholungen auskommen. Außerdem erleichtern sie die Entwicklung von Spielen (oder anderer Software), indem die zu benutzenden Daten in einem dem gewünschten Endergebnis ähnlicheren Editor erstellt werden können. Aber: Ja, zu C64-Zeiten haben manche Leute Musik auch wirklich wie obengenannt "programmiert".
zatzen hat geschrieben:Danke für die Anleitung mit dem Kopieren! Das Markieren habe ich schon hinbekommen, aber dann blickte ich nicht mehr weiter durch.
Ich hätte für Kopieren/Einfügen/Löschen auch die von DOS bekannten Tastenkombinationen nutzen können - nur sind diese im Piano-Modus (dem "X-Tracker-ähnlichen" Modus) leider bereits anderweitig belegt. So bleibt nur die (in allen Modi und auch in prISM verfügbare) Methode über das Modify-Menü.
zatzen hat geschrieben:Werde ich bei der nächsten Sitzung so machen. Ich hatte auch eine spontane Idee für ein längeres Liedchen das ich sogar auswendig in aller Mehrstimmigkeit im Kopf habe... Komme ich nur gerade nicht drauf.
Klingt spannend. Mal sehen, was und wie es wird.
Antworten