Trackermodul-Engine (sehr einfach)

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

Re: Trackermodul-Engine (sehr einfach)

Beitrag von DOSferatu »

zatzen hat geschrieben:Irgendwie ist die Benachrichtung in meinen emails nicht richtig angekommen, deswegen
komme ich erst jetzt zufällig in den Thread.
Ja, hatte mich zugegeben schon etwas gewundert, wieso so lange nichts kam.
Ich kriege vom DOSforum irgendwie gar keine eMails. (Beim Coding-Board geht's.) Ich frage mich, was ich falsch mache. Egal. Ich gucke sowieso täglich ins DOSforum (außer wenn ich nicht da bin, wie z.B. kommendes Wochenende).
zatzen hat geschrieben:Ich habe Dein kleines Programm mal abgetippt und kann den Fehler in meiner Dosbox Version bestätigen. Wenn man den Umweg über ein Register (AL) geht, funktioniert die Sache aber, Dosbox versaubeutelt hier also scheinbar mit dem ROR Befehl nur etwas wenn es mit Speicherzugriff zusammenhängt.
Ja, aber an der entsprechenden Stelle ging's mir ja genau darum, daß ich kein Register benutze, sondern nur das eine Bit per Carry übergebe. Und es ist auch total egal, ob es "anders gehen würde". Wie ich schon sagte: Ich optimiere für x86-CPUs - ich werde nicht für "kaputte" Emulatoren optimieren. Sowas kann man echt nicht von mir erwarten.
zatzen hat geschrieben:Dann habe ich noch ein Problem: Für mich sieht es so aus als gäbe es Dosbox überhaupt nur in 32 Bit.
Komisch, ich hab die 64bit-Version damals gefunden und runtergeladen. Allerdings ist seit v0.74 schon seit Jahren nichts mehr passiert. Wird da überhaupt noch dran gearbeitet?

Hm... Gerade gelesen, daß es wohl "demächst" eine v0.75 geben wird. Wäre natürlich nett, wenn der Bug dann weg wäre. Oder man die Leute noch rechtzeitig darauf hinweisen könnte.
zatzen hat geschrieben:Bei den Downloads finde ich nur den "32 Bit Windows installer".
Naja, ich weiß nicht, wie es auf diversen "Mirror-"Servern aussieht. Auf https://www.dosbox.com/ (dem "Original", wo es eingestellt wird) sollte man alles, was DOSbox angeht, finden.
zatzen hat geschrieben:Was aber nicht unbedingt heissen muss dass das Programm selbst auch 32 Bit sein muss.
Naja, man kann es leicht erkennen: Hat man eine 64bit-Version, wird sie auf 32bit CPUs nicht laufen, nicht wahr?
zatzen hat geschrieben:Vielleicht hast Du für mich einen Link zu einer definitiven 32 Bit Version.
Ähhh... Moment...
Hab gerade mal heruntergeladen. Scheinbar gibt es nur noch die kaputte Variante.

Habe aber woanders noch eine gefunden.
Hinweis: die v0.74-2 scheint die kaputte zu sein, also v0.74 (ohne "Zusatz") nehmen.
Es scheint diese nirgends mehr zu geben. Die scheinen auf ihre Neuentwicklung so stolz zu sein, daß die alte nirgends mehr zu kriegen ist... - Außer natürlich bei mir.
Guckst Du hier:
http://www.imperial-games.de/DOSBox/DOSBox_OK.zip
Ist kein Installer, sondern einfach das ganze Ding in ein Verzeichnis geschmissen und gepackt.
DIe hat übrigens garantiert nicht diesen Fehler (hab's extra geprüft). - Was natürlich nicht heißen muß, daß es nicht eventuell andere Bugs gibt, die bloß noch keinem aufgefallen sind.
Wär natürlich schon lustig, wenn's DOSbox auch für Pentium-Emulation gäbe und man auswählen könnte, ob man gerne den FDIV-Bug (in den ersten Pentium CPUs) gerne mitemuliert hätte...

Ich wäre echt froh, wenn es eine einfache Möglichkeit gäbe, die DOSBox-Entwickler auf den Bug hinzuweisen.
zatzen hat geschrieben:Komischerweise funkioniert AtavISM auf meinem Windows XP Laptop auch nicht wunschgemäß
in der Dosbox, wo man eigentlich erwarten müsste dass es kein 64 Bit Dosbox ist.
Es ist nämlich ein 32 Bit Windows.
Vielleicht ist es auch eine Frage der Dosbox-Version.
Scheint so zu sein. Ich finde es natürlich eine MEGA-bescheidene Idee, verschiedenen Varianten des Programms die gleiche Versionsnummer zu geben. Die v0.74 (Windows) gibts dann also scheinbar mehrmals.
zatzen hat geschrieben:Gerne würde ich ein bisschen Musik in AtavISM machen.
Dann scheint es ja der Mühe wert gewesen zu sein.
Also kann man scheinbar damit arbeiten? (Obwohl es, wenn man es mal mit dem X-Tracker vergleicht, sehr klein und unscheinbar ist und quasi nichts kann.)

Fragen dazu, für die nächste Version:
1.) Was passiert eigentlich (bzw soll passieren), wenn man beim musizieren Track/Pattern-Ende angekommen ist? a) Da bleiben?
b) Aufs nächste Pattern im Sequenzer wechseln?
c) Aufs Pattern mit der nächsthöheren Nummer gehen?
d) Beides? (D.h. auf nächsthöhere Nummer gehen UND diese im Sequenzer eintragen?)

2.) Ich könnte die Patternlänge einstellbar machen.
Womit stellt man im X-Tracker die Patternlänge ein?
zatzen hat geschrieben:Mittlerweile habe ich mich mal etwas weiter aus dem Fenster gelehnt was Assembler innerhalb Freepascal angeht.
Auf Datenfelder zugreifen geht über z.B. LEA EBX, <arrayname> und dann MOV AX, DS:[EBX]
Naja, LEA geht ja schon immer. Das berechnet die sogenannte "effektive Adresse". (Im Real-Mode eben den Offset, den ein angegebenes Ding (z.B. Variable/Array/Wasweißich) zum angegebenen Segmentregister hat. Im PM funktioniert das zwar ähnlich, aber weil die "Segmentregister" da eigentlich anders funktionieren, doch nicht genauso.
zatzen hat geschrieben:oder auch solche umfangreichen Konstrukte wie ADD EAX, DS:[OFFSET <arrayname> + EBX + EBX]
sind möglich und syntaktisch erlaubt.
Ja ich weiß. Kann man auch im RealMode benutzen, muß aber drauf achten, daß die oberen 16 Bits der "Ergebnisadresse" immer 0 bleiben, sonst Segmentüberlaufsfehler. D.h. mit Präfixcode $67 stellt man die ADRESSIERUNG auf 32bitmode (mit $66 stellt man bekanntlich Speicher-/Registerbreite auf 32bit).
In der 32bit-Adressierung kann man (fast) ALLE Register zur indizierten Adressierung benutzen. Man kann für eins der beiden sogar einen Faktor (1,2,4,8) angeben. ES:[Variable+EAX*4+EDX].
Oder, wenn man zweimal das gleiche Register nimmt, kann man sogar "krumme" Indizes haben, weil man z.B. EBX*4+EBX nehmen kann (jedesmal wenn EBX um 1 erhöht wird, wird die Adressierung um 5 erhöht). Damit gehen auch so Schrittweiten wie 3 oder 9...
Na egal. Da geht schon eine Menge.
Hatte mich übrigens früher gewundert, wieso der jcxz nicht für 32bit geht, also quasi ein jecxz. (also db $66; jcxz). Komischerweise muß man hier auch das Präfixbyte $67 benutzen, dann gehts. (D.h. in Abhängigkeit von ECX=0 springen, nicht nur von CX=0). So kann man schön einfach mitten aus einer Schleife springen.
zatzen hat geschrieben:Ich frage mich da nur was schneller ist - wenn ich einmal das EBX (oder ESI, EDI) Register fülle oder wenn ich jedesmal OFFSET in der Addressierung verwende.
Sowas muß man für den jeweiligen Einzelfall betrachten.
Außerdem ist es auch von CPU-Generation zu CPU-Generation verschieden. Es gibt sogar einige Befehle, die auf 386er 1-2 Zyklen weniger brauchen als auf 486er.
Aber auf PC kann man sowieso nur "aufs kleinste gemeinsame Vielfache" programmieren. Man weiß ja nie, auf welchen Kisten das überall laufen soll.
zatzen hat geschrieben:Noch eine Sache, ich weiss nicht ob es sich bei TP genauso verhält: Ich hatte während einer For... Schleife ein paar Zeilen Assembler, in denen ich AX und BX veränderte. Dadurch funktionierte die Schleife nicht mehr richtig.
Naja, Im Gegensatz zu TP, wo quasi keinerlei "Speedhacks" drin sind, sondern der Compiler genau das (und nur das) macht, was man erwarten würde, haben die Freepascal-Leute sich hier wohl einiges bei den C-Compilern abgeschaut, die selbst erkennen, ob ein direktes Register in einer Situation schneller wäre.
Das "einfach mal an jeder beliebigen Stelle bissel Assembler reinklatschen" ist wirklich nur was für'n Realmode und TP. In FP nehme ich an, daß ASM nur außerhalb eines sogenannten "Anweisungsblocks" passieren sollte.
zatzen hat geschrieben:Übrigens hab ich Dein Programm auch mal in Freepascal geschrieben, und dort funktioniert es korrekt.
Weil scheinbar der 32bit-Modus/PM korrekt emuliert wird.
Aber mir reicht der RealMode.

P.S.: Am Ende wird AtavISM noch Dein neuer Lieblingstracker...
Benutzeravatar
zatzen
DOS-Guru
Beiträge: 518
Registriert: Di 17. Apr 2012, 05:10
Wohnort: bei Köln
Kontaktdaten:

Re: Trackermodul-Engine (sehr einfach)

Beitrag von zatzen »

Ah wunderbar, mit "Deiner" Dosbox funktioniert das endlich.
Ich hatte übrigens bis zuletzt die Version 0.73, da ich mit der 0.74
andauernd Probleme mit DMA Wrapping hatte.

Vielleicht könnte man ja ein ausführlicheres Diagnosetool für die Fehlerbehaftung von Dosbox
erstellen. Nur so eine Idee. Ich denke Dir wird das zuwider sein, aber Du hättest den besseren
Assembler-Durchblick.

Aber es ist letztlich immer noch deren Bier.
Es gibt ein Dosbox Forum und dort einen Developement Thread wo man auch über Bugs reden kann.
Ich hätte keine großen Probleme mich da anzumelden, aber es wäre gut wenn Du zu Deinem Diagnose-
programm etwas schreiben könntest. Man sollte dann auch darauf hinweisen dass dieser Bug eine
existente Software zum erliegen bringt. Und wenn ich mir so die Auflistung der kompatiblen Spiele
ansehe, scheint Dosbox immer noch nicht ausgereift zu sein, vielleicht sogar wegen der ROR Sache.

Was Tracker angeht bin ich auch bescheiden. Moderne Tracker können Gigabytes Samplespeicher
halten und haben direkt ein komplettes Studio mit unterm Arsch, dass man beim Trackern schon
auf Profi-Niveau abmischen und mastern kann. X-Tracker spielt einfach nur Samples ab, und die
sind in 8 Bit usw...
Ich habe mir für Kotzman II einen eigenen minimalistischen Adlib Tracker gemacht, ähnlich wie
bei Dir dass man sich die Klänge aus Parametern konfigurieren muss, nur bei meinem noch mit
dem Hemmnis, dass ich die Instrumente auf einem Kanal nicht wechseln konnte, da ich das nicht
anzustellen wusste, wegen der lahmen Ports der Karte.

Zu Deinen Fragen:
1) Beim eingeben der Noten bevorzuge ich es, wenn kein Pattern/Sequenzerwechsel stattfindet
wenn man unten angekommen ist. Einfach dort verharren, abhängig von der Quantisierung je nachdem
wie man nach unten gelangt ist entweder auf der letzten Zeile bleiben, oder wenn die Quantisierung
2 ist und man landet bei Zeile 62, dann dort verharren, aber auch wenn Quantisierung 2 ist und man
landet in Zeile 63, weil man vorher "zwischen" die Quantisierung gegangen ist, dann eben dort bleiben,
und wenn eine weiter Note eingegeben wird, wird die bisherige überschrieben, ohne dass danach ein
Zeilenwechsel stattfindet.

Ein neues Pattern zu erstellen was dann immer auch automatisch im Sequenzer angefügt wird
geschieht im X-Tracker durch die + Taste auf dem Nummernblock.
2) Dann öffnet sich direkt nach drücken von + ein Fenster wo man die Patternparameter einstellen
kann, im X-Tracker sind das Notenzeilen, Tracks und Zeilen pro Beat, so gut wie immer mit sinnvollen
Default-werden voreingestellt, die sich wenn ich nicht irre sich auch den Einstellungen des jeweiligen
Stücks anpassen, d.h. was man vorher eingestellt hatte.
Und man kann das jederzeit ändern, Du könntest ein Fenster oder ein Pulldown machen.

Weiterhin kann man im X-Tracker mit Shift+Einfg eine Leerzeile im Pattern einfügen,
an aktueller Position, alles auf dieser vertikalen Position rutscht eine Zeile nach unten,
und das Pattern wird dadurch entsprechend länger.
Das Gegenstück dazu ist Shift+Entf, es löscht die aktuelle Zeile und die nachfolgenden
Zeilen rücken nach oben, Pattern wird kürzer.

Dann hätte ich noch zwei Wünsche wenn das machbar wäre:
- Abspielen ab Cursorposition (für Play Pattern, Play Song muss natürlich von vorne sein)
- dass der Cursor beim Abspielen mitläuft, und wenn man Esc drückt dort stehenbleibt
wo gerade gespielt wurde, so dass man da weiterarbeiten kann

Lieblingstracker: Ja, ein Synthesizer-Tracker wo man nicht ständig nach guten Samples suchen
muss hat schon seinen Reiz.

Dann werde ich mal ein wenig musizieren...
mov ax, 13h
int 10h

while vorne_frei do vor;
Benutzeravatar
zatzen
DOS-Guru
Beiträge: 518
Registriert: Di 17. Apr 2012, 05:10
Wohnort: bei Köln
Kontaktdaten:

Re: Trackermodul-Engine (sehr einfach)

Beitrag von zatzen »

So, mein erstes kleines ISM-Stück ist fertig: http://www.zatzen.net/dauersng.zip

Geht schon sehr wunderbar eigentlich, schöner Tracker.

Womit ich noch Probleme hatte:
- Ich bin mit der Kopierfunktion nicht klargekommen, habe daher alles einzeln eingegeben.
Über mehre Spuren hinweg kopieren wäre z.B. hier bei den Akkorden praktisch gewesen.

- Beim Soundblaster Output kam bei der "Vorschau" der Töne, also beim Editieren der Patterns
und der Instrumente mehr oder weniger nur ein bisschen Geknacke, bei der PC-Speaker Ausgabe
dagegen das jeweilige Instrument in kurzer Dauerschleife und sehr laut.
Mag wieder an Dosbox liegen, oder AtavISM ist in dem Punkt noch nicht so ausgereift, zumal es
nachträgliche Wünsche von mir waren.

- Ich habe versucht ein mickriges Bassdrum-Sample (8 Bit 8 kHz, mit WAV2SMP zu 4 Bit und gut 700 Byte konvertiert)
einzubauen, aber das führte bei AtavISM zum Versagen der Tonausgabe, obwohl ich es über das Instrumente Menü
eingebunden habe. Vielleicht musst Du mir nochmal genau erklären was man da beachten muss.


Und wie vorher schon erwähnt wäre ein Abspielen ab Cursor praktisch und dass dieser beim Spielen mitgeht.
Zudem stellt sich beim trackern heraus, dass es teilweise auch sehr nützlich sein kann, mal einen Kanal
solo zu schalten. Bei X-Tracker geht das mit Alt+F7 (warum auch immer) und mit Alt+Space toggelt man je
Kanal Mute/Unmute.


PS: Zu obigem Beitrag wo ich schrieb, ich habe Dein Testprogramm in Freepascal geschrieben
und es ist korrekt ausgeführt worden: Da war keine Emulation im Spiel, es war Freepascal 32 Bit
unter Windows. Aber man sollte meinen dass es echt, also nicht emuliert, eben auch funktioniert.
Ich fand es nur interessant das mal unter Windows zu testen.
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: Trackermodul-Engine (sehr einfach)

Beitrag von DOSferatu »

zatzen hat geschrieben:Ah wunderbar, mit "Deiner" Dosbox funktioniert das endlich.
Ich hatte übrigens bis zuletzt die Version 0.73, da ich mit der 0.74 andauernd Probleme mit DMA Wrapping hatte.
Ja, die haben scheinbar irgendwie Mist gebaut. Und, daß die "alte v0.74" nirgends mehr erhältlich ist, bzw wieso man nach solchen Änderungen nicht die Versiosnnummer erhöht, ist mir beides vollig unverständlich.
zatzen hat geschrieben:Vielleicht könnte man ja ein ausführlicheres Diagnosetool für die Fehlerbehaftung von Dosbox erstellen. Nur so eine Idee. Ich denke Dir wird das zuwider sein, aber Du hättest den besseren Assembler-Durchblick.
Ja, ich habe keine Zeit (und eigentlich auch keine Lust), DOSBox zu debuggen. Ich dachte, dafür wären die Entwickler da. Schon wegen der Erweiterungen in AtavISM habe ich meine anderen Sachen wieder liegengelassen...
zatzen hat geschrieben:Aber es ist letztlich immer noch deren Bier.
So ist es. Und ich habe auch keine Lust, mich da irgendwo durchzuwursteln, um dann mal meinen kleinen Bugreport da anzubringen. Wie bereits erwähnt: Erstens finde ich keine Stelle auf der Site, wo man das machen könnte, zweitens habe ich den Eindruck, man müßte sich dazu extra anmelden und drittens befürchte ich, daß das dann in einem entsprechenden Format gewünscht ist...
zatzen hat geschrieben:Es gibt ein Dosbox Forum und dort einen Developement Thread wo man auch über Bugs reden kann. Ich hätte keine großen Probleme mich da anzumelden, aber es wäre gut wenn Du zu Deinem Diagnose-
programm etwas schreiben könntest. Man sollte dann auch darauf hinweisen dass dieser Bug eine existente Software zum erliegen bringt.
Naja, ein unwichtiges kleines privat erstelltes Hobbytool...
zatzen hat geschrieben:Und wenn ich mir so die Auflistung der kompatiblen Spiele ansehe, scheint Dosbox immer noch nicht ausgereift zu sein, vielleicht sogar wegen der ROR Sache.
Weil die 0.73 bzw "alte 0.74" noch funktioniert haben, habe ich eher den Eindruck, daß es vorher funktioniert hat, dann haben die Entwickler gewechselt und jetzt ist da eher so die "Skripter-Liga" dran, denen es mehr um "systemübergreifend" als um "performant und funktionierend" geht. Kann mich natürlich auch irren - aber habe so etwas auch bei Konsolen-Emulatoren erlebt: Daß ein vorher funktionierendes und performantes Programm später durch eine andere Liga Entwickler kaputtgemacht wurde. Da benutze ich dann die alten Versionen.

zatzen hat geschrieben:Was Tracker angeht bin ich auch bescheiden. Moderne Tracker können Gigabytes Samplespeicher
halten und haben direkt ein komplettes Studio mit unterm Arsch, dass man beim Trackern schon auf Profi-Niveau abmischen und mastern kann. X-Tracker spielt einfach nur Samples ab, und die sind in 8 Bit usw...
Naja, "bescheiden" ist in diesem Zusammenhang auch ein subjektiver Begriff.
zatzen hat geschrieben:Ich habe mir für Kotzman II einen eigenen minimalistischen Adlib Tracker gemacht, ähnlich wie
bei Dir dass man sich die Klänge aus Parametern konfigurieren muss, nur bei meinem noch mit dem Hemmnis, dass ich die Instrumente auf einem Kanal nicht wechseln konnte, da ich das nicht anzustellen wusste, wegen der lahmen Ports der Karte.
Ja, der bekannte Effekt der AdLib, wenn nach manchen Portzugriffen nicht lange genug gewartet wird.
zatzen hat geschrieben: Zu Deinen Fragen:
1) Beim eingeben der Noten bevorzuge ich es, wenn kein Pattern/Sequenzerwechsel stattfindet
wenn man unten angekommen ist. Einfach dort verharren, abhängig von der Quantisierung je nachdem
wie man nach unten gelangt ist entweder auf der letzten Zeile bleiben, oder wenn die Quantisierung
2 ist und man landet bei Zeile 62, dann dort verharren, aber auch wenn Quantisierung 2 ist und man
landet in Zeile 63, weil man vorher "zwischen" die Quantisierung gegangen ist, dann eben dort bleiben,
und wenn eine weiter Note eingegeben wird, wird die bisherige überschrieben, ohne dass danach ein
Zeilenwechsel stattfindet.
Ja, bisher geht es immer direkt zum Ende des Patterns, also z.B. bei Quantisierung 4 würde es, wenn es auf 60 steht, dann auf 63 wechseln. OK, dann muß ich eine extra Funktionalität einbauen, daß dann gar kein Wechsel erfolgt, wenn das Ziel größer wäre.
zatzen hat geschrieben:Ein neues Pattern zu erstellen was dann immer auch automatisch im Sequenzer angefügt wird
geschieht im X-Tracker durch die + Taste auf dem Nummernblock.
Muß ich überlegen, ob ich das so einbaue. Bei mir ändert man im Sequenzer die Anzahl und definiert dann im neuen Feld die gewünschte Pattern-Nummer. (Diese Nummer bleibt übrigens auch erhalten, wenn man zwischendurch die Anzahl verringert/erhöht - das liegt an der internen Speicherung in diesem "Template".)
zatzen hat geschrieben:2) Dann öffnet sich direkt nach drücken von + ein Fenster wo man die Patternparameter einstellen kann, im X-Tracker sind das Notenzeilen, Tracks und Zeilen pro Beat, so gut wie immer mit sinnvollen
Default-werden voreingestellt, die sich wenn ich nicht irre sich auch den Einstellungen des jeweiligen
Stücks anpassen, d.h. was man vorher eingestellt hatte. Und man kann das jederzeit ändern, Du könntest ein Fenster oder ein Pulldown machen.
Naja, wie gesagt: Geht hier im Sequenzer, da stehen ja Patternnummer und Geschwindigkeitsparameter drin. Also kein zusätzliches Fenster/Pulldown nötig - mit Strg+K wechselt man ja direkt in den Sequenzer.
zatzen hat geschrieben:Weiterhin kann man im X-Tracker mit Shift+Einfg eine Leerzeile im Pattern einfügen,
an aktueller Position, alles auf dieser vertikalen Position rutscht eine Zeile nach unten, und das Pattern wird dadurch entsprechend länger.
Das Gegenstück dazu ist Shift+Entf, es löscht die aktuelle Zeile und die nachfolgenden
Zeilen rücken nach oben, Pattern wird kürzer.
Ich dachte, es wäre Strg+Einfg bzw Strg+Ent? Oder ist der Unterschied, daß sich mit Shift auch die Patternlänge ändert? Ich habe es ja derzeit so, daß nur in der aktuellen Spur "geschoben" wird, damit man flexibler ist.
zatzen hat geschrieben:Dann hätte ich noch zwei Wünsche wenn das machbar wäre:
- Abspielen ab Cursorposition (für Play Pattern, Play Song muss natürlich von vorne sein)
Ja, das war theoretisch geplant - geht in prISM. In AtavISM ist es schwieriger, weil die Cursorposition im Pattern so fast gar nichts mit den Daten zu tun hat, die wirklich abgespielt werden. Wenn man sich z.B. in einem wiederholenden Teil befindet (der in den ISM-Daten z.B. als Schleife vorliegt), kann AtavISM nicht wissen, im wievielten Durchgang man sich gerade befindet. Das direkte Zuordnen von Patternbefehlen zu den ISM-Befehlen würde wieder zusätzlichen Code und Speicher erfordern. Deshalb habe ich davon abgesehen.
zatzen hat geschrieben: - dass der Cursor beim Abspielen mitläuft, und wenn man Esc drückt dort stehenbleibt
wo gerade gespielt wurde, so dass man da weiterarbeiten kann
Ebenfalls eklig umzusetzen - weil selbes Problem wie im letzten Absatz geschildert.
ABER: Man kann einen Zeitpunkt festlegen, ab wo "hörbar" gespielt wird. D.h. man kann die Anzahl Sekunden angeben, ab wo gespielt werden soll. Das wird dann mit F9 abgespielt. Ist im Play-Menü zu finden, die "Timecode" Einstellungen.
zatzen hat geschrieben:Lieblingstracker: Ja, ein Synthesizer-Tracker wo man nicht ständig nach guten Samples suchen
muss hat schon seinen Reiz.
Naja... Nur ist die Qualität nicht gerade Weltniveau.
zatzen hat geschrieben:So, mein erstes kleines ISM-Stück ist fertig: http://www.zatzen.net/dauersng.zip
Ja, schönes Ding. Und alles in nur einem einzigen Pattern. Ich könnte nie solche Akkords oder Harmonien machen. Bin eben kein Musiker.
zatzen hat geschrieben:Geht schon sehr wunderbar eigentlich, schöner Tracker.
Naja - "schön" ist anders...
zatzen hat geschrieben: Womit ich noch Probleme hatte:
- Ich bin mit der Kopierfunktion nicht klargekommen, habe daher alles einzeln eingegeben.
Über mehre Spuren hinweg kopieren wäre z.B. hier bei den Akkorden praktisch gewesen.
Shift gedrückt halten während man sich im Track hoch/runter bewegt, zum Setzt der Markierungen (mit ESC sind sie wieder weg). Dann mit Alt+M im Modify-Menü auswählen, was damit gemacht werden soll. Und dann (ohne Shift) an die Stelle im Pattern oder Track oder Musikstück gehen, wohin das Ganze kopiert/verschoben/etc werden soll und Enter drücken - und die Aktion wird ausgeführt. Damit man auch z.B. mehrmals kopieren kann, bleibt die Aktion danach trotzdem aktiv. Um sie rückzusetzen, ESC drücken. Nochmal, falls auch die Markierung weg soll. Anm.: Dadurch ändert sich die Funktion von Enter: Während einer Kopier-/Verschiebe-Funktion dient sie zur Bestätigung des Kopierens/Verschiebens, d.h. zum Ausführen der Aktion. Man sieht es an der geänderten Statuszeile (unten).
zatzen hat geschrieben: - Beim Soundblaster Output kam bei der "Vorschau" der Töne, also beim Editieren der Patterns
und der Instrumente mehr oder weniger nur ein bisschen Geknacke, bei der PC-Speaker Ausgabe
dagegen das jeweilige Instrument in kurzer Dauerschleife und sehr laut.
Mag wieder an Dosbox liegen, oder AtavISM ist in dem Punkt noch nicht so ausgereift, zumal es
nachträgliche Wünsche von mir waren.
Ja, das ist ein altes Problem. Ich kenne den Effekt. Es liegt daran, daß ein Sample immer erst geladen, dann gespielt wird und das Laden irgendwie mit den anderen IRQs kollidiert. Ich muß sowieso in die Laderoutine eine gewünschte Unterbrechung einbauen, d.h. daß zwischenzeitlich während des Ladens noch Abfragen passieren können, wenn dies länger dauert. Außerdem habe ich den Eindruck, daß der erste Puffer immer nicht abgespielt wird. Das werde ich wohl beides noch fixen.
zatzen hat geschrieben: - Ich habe versucht ein mickriges Bassdrum-Sample (8 Bit 8 kHz, mit WAV2SMP zu 4 Bit und gut 700 Byte konvertiert) einzubauen, aber das führte bei AtavISM zum Versagen der Tonausgabe, obwohl ich es über das Instrumente Menü eingebunden habe. Vielleicht musst Du mir nochmal genau erklären was man da beachten muss.
Ja, da muß ich mir wohl anschauen, was Du gemacht hast (Screenshoot), brauche das Ursprungsfile und das Ergebnisfile. Muß ich irgendwie nachvollziehen können.
Wichtig ist, entweder die "hörbare" Frequenz auszuwählen oder das Sample in ISM mit der gleichen Frequenz abzuspielen, für die man es konvertiert hat.
Wie sieht das "Versagen" denn aus? Stille? Komische Geräusche? Programmabsturz?
zatzen hat geschrieben:Und wie vorher schon erwähnt wäre ein Abspielen ab Cursor praktisch und dass dieser beim Spielen mitgeht.
Ja, siehe oben.
Wahrscheinlich ginge es irgendwie "simuliert". D.h. ich müßte:
- Die "Ticks" zählen anhand der Pufferlänge. Dann die Stimme abgreifen, um zu wissen, in welchem Pattern ich mich befinde (um zu wissen, welche Geschwindigkeit es hat) und dann anhand dieser Geschwindigkeit einen quasi "unabhängig" vom wirklichen Abspielen funktionierenden Zähler zu bauen für den Cursor. Naja - alles eher so "von hinten durch die Brust ins Auge",,,
zatzen hat geschrieben:Zudem stellt sich beim trackern heraus, dass es teilweise auch sehr nützlich sein kann, mal einen Kanal solo zu schalten. Bei X-Tracker geht das mit Alt+F7 (warum auch immer) und mit Alt+Space toggelt man je Kanal Mute/Unmute.
Ja, Kanäle solo abspielen bzw einige Kanäle nicht abzuspielen ist bereits im AtavISM-Template vorgesehen, soll dann mit F6 funktionieren (d.h. beim Anfang kann man bestimmte Stimmen ausschalten).

Aber während des Abspielens einzelne Stimmen ab- und zuschalten ist schwieriger, weil eine abgeschaltete Stimme ja auch nichts "berechnet". Man könnte höchstens die entsprechenden Lautstärken einzeln runterdrehen (also für jede Stimme getrennt von außen die Lautstärke einstellbar machen - was sowieso in ISM möglich ist - nur bisher wurde alles auf ein einzelnes Gesamtregister gestellt...

(Immer wenn so Zusatzwünsche kommen, ist es ausgerechet immer etwas, das den höchstmöglichen Aufwand bedeutet und das Gegenteil von dem ist, wie ISM funktioniert...)
zatzen hat geschrieben:PS: Zu obigem Beitrag wo ich schrieb, ich habe Dein Testprogramm in Freepascal geschrieben
und es ist korrekt ausgeführt worden: Da war keine Emulation im Spiel, es war Freepascal 32 Bit
unter Windows.
Ja, WindowsXP unterstützt ja auch nativ DOS-Programme, d.h. man kann sie einfach so dort ausführen.
Und, was viele nicht wissen: Sogar Soundblaster wird emuliert (sogar wenn gar kein Soundblaster eingebaut ist!), nämlich, indem man in der
C:\WINDOWS\system32\autoexec.nt
einfach eine entsprechende Umgebungsvariable anliegt, wie z.B.
SET BLASTER=A220 I5 D1 H5 E330 T6
oder so. - Also je nachdem, welchen man emulieren will.
Die autoexec.nt und config.nt im o.g. Verzeichnis entsprechen praktisch den autoexec.bat und config.sys und werden entsprechend von ntvdm (dem in XP eingebauten "DOS-Emulator") benutzt, der super funktioniert.
Was nicht geht, sind nur Dinge, die unter WindowsXP nicht gehen. WindowsXP "tickt" mit 1000 Hz, d.h. man kann den Ticker zwar auf alles bis zu 1000 Hz stellen (Xpyderz steht z.B. auf 400 Hz), aber nicht über 1000 Hz, da wird dann auf 1000 Hz zurückgesetzt - will sagen: Diese Speaker-Sachen funktionieren dann nicht, weil man dazu ja auf mind. 8000 Hz, bis zu 20000 Hz stellen muß, damit etwas Sinnvolles herauskommt.
Also: Man kann problemlos prISM und AtavISM OHNE DOSBOX direkt in WindowsXP laufen lassen - sowie alle meine Tools und Spiele (außer wenn sie diese hochfrequenten Ticker benutzen, wenn sie Speaker-"digital" abspielen).
zatzen hat geschrieben:Aber man sollte meinen dass es echt, also nicht emuliert, eben auch funktioniert. Ich fand es nur interessant das mal unter Windows zu testen.
Wie gesagt: Es ist gar nicht nötig, da 32bit-Programme zu nutzen, denn der 32bit-Mode (PM) der CPU kann auch problemlos 16bit-Programme abspielen und WindowsXP hat damit keine Probleme.

Lediglich der "native 64bit-Mode" kann nur noch 64bit/32bit und unterstützt in diesem Modus keine 16bit-Programme und keinen V86-Mode mehr. Die CPU kann es natürlich, wenn sie im 32bit oder 16bit Mode betrieben wird - aber wenn man eine 64bit-CPU hat, wird man sie natürlich in 64bit-Windows auch im 64bit-Modus laufen lassen.

Deshalb finde ich diesen "nativen 64bit Mode" ja auch so lame - denn technisch wäre es meiner Meinung nach möglich gewesen, auch den 16bit und den V86 im 64bit-Mode zu unterstützen - und wenn es auch nur in einer Art abgeschlossenen "Sandbox" der CPU gewesen wäre - sozusagen wie eine hardwareseitige Emulation.

Weil das nicht gemacht wurde, hat Windows im 64bit-Mode natürlich auch keine Möglichkeit, 16bit-Programme "direkt" ausführen zu lassen - daher muß man dann hier Emulatoren wie DOSbox einsetzen.

P.S.: VIelleicht schaue ich mir nochmal die Sachen in AtavISM an und bastle noch etwas betreffend Cursor bzw. Stimmenstummschaltung. Mal sehen.
Benutzeravatar
zatzen
DOS-Guru
Beiträge: 518
Registriert: Di 17. Apr 2012, 05:10
Wohnort: bei Köln
Kontaktdaten:

Re: Trackermodul-Engine (sehr einfach)

Beitrag von zatzen »

Was die Dosbox Versionen angeht: Mit meiner 0.73 funktioniert Atavism auch nicht.
Zuletzt haben die eine 0.74-2 angeboten, mit der ging es auch nicht. Scheint also
eher so eine Zwischenversion, die "alte" 0.74 zu sein, mit der es funktioniert.

Ich würde meinen, dass es die Entwickler von Dosbox schon interessiert, wenn
Code nicht richtig interpretiert wird. Egal ob es ein Topseller-Spiel betrifft oder
etwas weniger gefragtes.

Mit bescheiden was Tracker angeht meine ich vor allem, dass es mir nur drauf ankommt
dass ich die Musik nach dem Tracker-Prinzip eingeben kann, und das möglichst ergonomisch.
Ob das dann wie ISM klingt oder wie 24 Bit 192 kHz High End Audio ist absolut zweitrangig.
Allein dass die "Noten" in den Patterns für sich genommen mit perfekter digitaler Präzision
notiert werden reicht für mich aus, um das Gefühl zu haben ich mache da etwas von Qualität.
Nebenbei: Ich halte nicht viel von diesen 24 Bit 192 kHz als Endprodukt. Die gute alte CD
ist völlig ausreichend für alle Ansprüche, alles andere dürfte Placebo sein.

Sequenzer: Ich schildere nur mal wie das im X-Tracker ist, weil ich das da ganz praktisch und
einfach finde: Der ist wie eine Kette aufgebaut und handzuhaben. Man kann mit dem Cursor
durchgehen und an beliebiger Stelle ein Pattern löschen oder einfügen (Entf, Einfg).
Beim löschen rücken alle rechts daneben eins zurück, beim Einfügen entsprechend eins
nach rechts und an der Cursorposition wird die Patternnummer 1 eingefügt die man mit
+ und - im Rahmen der vorhandenen Patterns ändern kann oder per Enter geht ein Fenster
auf in dem man die Patternnummer eintippen kann.
Nur als Anregung. Deine bisherige Lösung wird auch nicht schlecht durchdacht sein und
der Sequenzer ist für die Ergonomie letztlich nicht von so großer Bedeutung.

Gut wäre aber, wenn man auch Patterns mit speichern könnte, die letztlich gar nicht im
Sequenzer landen. Tracker sind so ausgelegt, aber ich sehe da schon einen Konflikt mit
dem ISM Format, wenn AtavISM direkt in ISM speichert und selber kein Meta-Format hat.
So eines wäre ja denkbar, welches trackertypisch Patterns, Sequencer, Instrumentdefinitionen
und Samples speichert. Aber ich glaube, das würde Dir nicht gefallen, auch wenn es ziemlich
einfach zu realisieren wäre, soweit ich das beurteilen kann.
Was ich möglicherweise übersehe ist, dass man in AtavISM auch die Möglichkeit hat, etwas
mehr von den Möglichkeiten von ISM auszuschöpfen, d.h. wortwörtlich zwischen den Zeilen
noch Befehle einbauen, um z.B. Portamentos zu realisieren.
Darüber könnte man noch diskutieren, ob es auch denkbar wäre, Effekte direkt in Tracker-Manier
im Pattern programmierbar zu machen.

Letztlich ist es ja so:
ISM gefällt mir. Es ist zwar eher Lo-Fi, aber bietet dennoch eine gewisse Klangvielfalt, und es
kann eine spannende Herausforderung sein z.B. über die Klangkonfiguration reelle Instrumente
nachzubilden zu versuchen. Und da ich gemerkt habe dass die Lautstärke anhand der Anzahl
der Kanäle gedrosselt wird, wäre ich auch bestrebt, vielleicht nur 4 Kanäle zu benutzen.
Jedenfalls sind die Voraussetzungen erfüllt, dass ich gerne Musik darin programmiere.
Mit der bisherigen Version habe ich diesen einen 1-Pattern-Dauerdudler hinbekommen,
aber ich habe viel länger dafür gebraucht als eigentlich nötig.
Einfach um den Arbeitsfluss zu beschleunigen und zu erleichtern wären gewisse Erweiterungen
zugunsten der Ergonomie sinnvoll. Und dann wäre es auch wahrscheinlich, dass ich in AtavISM
anfange zu improvisieren und keine Vorlage mehr brauche, die ich seit Jahren ins Hirn gebrannt hatte.
Gerne mache ich auch Musik für Dich, Du musst einfach abwägen und einschätzen, ob sich
der Aufwand mit den AtavISM Erweiterungen lohnt.


Die Funktion Shift+Entf bzw. Einfg nutze ich eher selten, sie kann manchmal ganz praktisch sein,
muss aber nicht unbedingt in AtavISM verfügbar sein.
Wichtiger ist tatsächlich Strg+Einfg bzw. Entf.

Spielen ab Cursor: Wäre es vielleicht möglich, einfach die Daten lautlos und ohne Zeitfaktor bis zur
Position des Cursors vorzuprozessieren?

Spielen ab Timecode: Könnte das nicht auch anhand der Cursorposition automatisch bestimmt werden?

Noch eine Sache der ich anhand der 1-Pattern Songs gar nicht begegnet bin:
Beim Editieren des Patterns bzw. wenn man sich das dann anhört, ist es für Tracker üblich
dass man dieses Pattern in der Schleife hören kann. Ich glaube so hast Du es auch realisiert,
ich bin mir nur nicht sicher.

Schöner Tracker: Naja, ich mag den Textmodus für solche Sachen irgendwie.

Solo: Braucht nicht während des Abspielens schaltbar sein. Einen Kanal Solo schalten wäre wichtig,
dann noch optional wählbar andere dazu wäre gut.


Am wichtigsten von allem wäre im Moment aber dass die Sache mit dem "live" Output funktioniert.

Kleine Anregung noch: Wenn bei einem Instrument Attack auf 0 steht, beginnt der Klang je nach
Wellenform mit einem Knacken. Falls Dir der Vorschlag gefällt und es machbar wäre - vielleicht
kann man auch bei Attack 0 eine ganz kurze Zeit des Attacks reinrechnen. Keine Ahnung ob sich
das einfach machen lässt, mir ist es nur aufgefallen bei DAUERSNG.ISM, auf Kanal B-D habe ich
diesen Marimba-ähnlichen Klang der von einem recht harten Attack profitiert, aber es knackt eben.
Und bei Attack 1 klang es schon nicht mehr nach Marimba.


Freepascal: Ich habe hier Windows 7.
Aber interessant dass Windows XP Soundblaster emulieren kann.
Da wäre ich mal gespannt wie ZSM performt auf meinem Laptop.



Zu dem Sample-Problem in AtavISM schreibe ich in meiner nächsten Nachricht.
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: Trackermodul-Engine (sehr einfach)

Beitrag von DOSferatu »

zatzen hat geschrieben:Was die Dosbox Versionen angeht: Mit meiner 0.73 funktioniert Atavism auch nicht.
Zuletzt haben die eine 0.74-2 angeboten, mit der ging es auch nicht. Scheint also eher so eine Zwischenversion, die "alte" 0.74 zu sein, mit der es funktioniert.
Diese "alte 0.74" gab es ziemlich lange. War jahrelang die letzte offizielle DOSBox-Version. Diese 0.74-2 scheint eine neuere Entwicklung zu sein. Na jedenfalls ist bei "neuen" der sowohl die 32bit als auch die 64bit Version "kaputt".
zatzen hat geschrieben:Ich würde meinen, dass es die Entwickler von Dosbox schon interessiert, wenn Code nicht richtig interpretiert wird. Egal ob es ein Topseller-Spiel betrifft oder etwas weniger gefragtes.
Ja, dann sollten sie es den Leuten nicht so schwer machen, Bugs zu reporten.
zatzen hat geschrieben:Mit bescheiden was Tracker angeht meine ich vor allem, dass es mir nur drauf ankommt dass ich die Musik nach dem Tracker-Prinzip eingeben kann, und das möglichst ergonomisch.
Naja, ich bin beim Entwickeln derart "bescheiden", daß ich auch, wenn es sein müßte, alle Daten (Grafik, Levels, Sprites, Sound) komplett in einem Hex-Editor eingeben würde. Und ja - das habe ich auch schon gemacht - damals auf dem KC85/4 oder auf dem C64.
zatzen hat geschrieben:Ob das dann wie ISM klingt oder wie 24 Bit 192 kHz High End Audio ist absolut zweitrangig.
Ja, und das menschliche Gehör ist BEI WEITEM nicht so gut. Der gleiche Unsinn mit Ultra-HD und so. So hochauflösend sind die menschlichen Augen gar nicht. Und man kann auch nur ca. 4000 verschiedene Farbtöne wahrnehmen... - Aber die Industrie braucht ja Argumente, immer neues, "besseres" Zeug zu verkaufen. Für die Industrie wäre es das Schlimmste, wenn irgendwann mal alles ausreichend wäre. Dann bestünde kein Bedarf mehr an etwas Neuem. Was macht das neuste Windows schon großartig anders als Win95? Außer, daß es nun Gigabyte-Speicher und Gigahertz-Leistung braucht, um das Gleiche zu machen, was früher mit 386er/486er ging. In Windows7 habe ich beim Dateiexplorer, wenn ich einen simplen Verzeichniswechsel machen will, einen LADEBALKEN... und es dauert mehrere Sekunden, bei größeren Verzeichnissen auch schonmal eine halbe Minute... auf einem 64bit-Rechner mit 8GB RAM, und 3 GHz Quadcore CPU... - ERBÄRMLICH! - sag ich da nur!
zatzen hat geschrieben:Allein dass die "Noten" in den Patterns für sich genommen mit perfekter digitaler Präzision notiert werden reicht für mich aus, um das Gefühl zu haben ich mache da etwas von Qualität.
Nebenbei: Ich halte nicht viel von diesen 24 Bit 192 kHz als Endprodukt. Die gute alte CD ist völlig ausreichend für alle Ansprüche, alles andere dürfte Placebo sein.
Ja, wie ich schon öfters anmerkte: Selbst CD-Qualität empfinde ich schon als völlig überkandidelt. Und so simple elektronische "Chiptune-"artige Musik braucht das nicht wirklich. Und wenn ich mich bei meinen Grafiken auf 16/256 Farben beschränke, brauche ich beim Sound auch keine CD-Qualität. Ich unterstütze derzeit ja noch nicht einmal Stereo. "Normales", also "Amiga-artiges" Stereo zu unterstützen - so daß ich festlege, welche Stimmen links, welche rechts tönen, das wäre noch einfach.

Das Kompliziertere ist eigentlich das Panning - also daß die Stimmen ihren Klang "unregelmäßig" auf die 2 Stereokanäle verteilen. Das würde eine weitere Rechenstufe erfordern- Es gibt ja bisher die Weille, die Gesamtlautstärke und die Hüllkurve, die berücksichtigt werden müssen. Die Filter sind noch nichtmal drin. Und dann müßte noch eine Stufe für die Panningverteilung rein... Naja, abgesehen davon würde Stereo mt Panning ja die doppelte Rechenleistung brauchen. "Stimmenfestes" Stereo wäre ja genau das Gleiche, weil die gleiche Anzahl Stimmen berechnet werden müßte. Bei Panning muß ja jede Stimme, die nicht "komplett links" oder "komplett rechts" ist, doppelt berechnet werden. Um da etwas Effizientes zu machen, muß ich wohl noch eine Weile überlegen. Aber das wird definitiv derzeit NICHT eingebaut werden - mein nächstes Spiel hat eben Mono-Sound. Bin ja schon froh, überhaupt mal ein Spiel mit Musik/Soundeffekten anbieten zu können.... Seufz... Wenn's bloß erstmal ein Spiel GÄBE... Bin ja immer noch mit anderen Dingen beschäftigt. Und Zatzen ist mit diesem AtavISM einfach nie zufrieden, solange es nicht die gleichen Funktionen wie X-Tracker hat...
zatzen hat geschrieben:Sequenzer: Ich schildere nur mal wie das im X-Tracker ist, weil ich das da ganz praktisch und einfach finde: Der ist wie eine Kette aufgebaut und handzuhaben. Man kann mit dem Cursor durchgehen und an beliebiger Stelle ein Pattern löschen oder einfügen (Entf, Einfg).
Ja, das wäre natürlich machbar - es wäre ja einfach nur ein "Umkopieren" der Patternnummern (und Patternspeeds).
zatzen hat geschrieben:Beim löschen rücken alle rechts daneben eins zurück, beim Einfügen entsprechend eins nach rechts und an der Cursorposition wird die Patternnummer 1 eingefügt die man mit + und - im Rahmen der vorhandenen Patterns ändern kann oder per Enter geht ein Fenster auf in dem man die Patternnummer eintippen kann. Nur als Anregung. Deine bisherige Lösung wird auch nicht schlecht durchdacht sein und
der Sequenzer ist für die Ergonomie letztlich nicht von so großer Bedeutung.
Naja - das Ändern mit +/- geht in AtavISM doch auch schon. Und das direkte Eingeben der Nummer geht "einfach so", indem man die entsprechenden Ziffern drückt. Da braucht man nicht einmal vorher Enter zu drücken. Das Überschreibt einfach die Stellen.
zatzen hat geschrieben:Gut wäre aber, wenn man auch Patterns mit speichern könnte, die letztlich gar nicht im Sequenzer landen.
Wird ja derzeit auch so gemacht - nicht "benutzte/genannte" Patterns haben trotzdem noch ihre Daten - und wenn man diese wieder im Sequenzer nennt, sind die Daten wieder da. Das ist der Arbeitsweise mit dem internen "AvavISM-Template" geschuldet und eigentlich wollte ich das schon entfernen. Aber ich habe schon mitbekommen, daß manche Entwickler das absichtlich nutzen, um unbenutzte Pattern quasi zum Herumprobieren und Auslagern benutzen zu können. Deshalb habe ich das dringelassen.

WICHTIG!
Mir ist gerade noch ein Bug aufgefallen, den ich in der nächsten Version natürlich entfernen werde:
Ein Pattern wird ja immer gewandelt und gespeichert, wenn man es wechselt - allerdings passiert es. daß beim Speichern manchmal NICHT die letzte Änderung im Pattern mitgespeichert wird! (Das liegt an dieser "indirekten" Arbeitsweise von AtavISM.) Abhilfe schafft derzeit, im Sequenzer kurz die aktuelle Patternnummer zu ändern/zurückzuändern.
Aber diesen gravierenden Fehler werde ich in der nächsten Version entfernt haben - so kann man einfach nicht arbeiten!

zatzen hat geschrieben:Tracker sind so ausgelegt, aber ich sehe da schon einen Konflikt mit dem ISM Format, wenn AtavISM direkt in ISM speichert und selber kein Meta-Format hat.
So eines wäre ja denkbar, welches trackertypisch Patterns, Sequencer, Instrumentdefinitionen und Samples speichert. Aber ich glaube, das würde Dir nicht gefallen, auch wenn es ziemlich einfach zu realisieren wäre, soweit ich das beurteilen kann.
Ja, will ich aber nicht. Es soll direkt in ISM abspielbare Files abspeichern, kein MOD-/Trackerzeug. Das dient nur der Ansicht. Diese Dinge sind in AtavISM auch nicht vorhanden, sondern werden bei jedem Track-/Patternwechsel immer aus ISM-Daten wieder zurückgeneriert.
zatzen hat geschrieben:Was ich möglicherweise übersehe ist, dass man in AtavISM auch die Möglichkeit hat, etwas mehr von den Möglichkeiten von ISM auszuschöpfen, d.h. wortwörtlich zwischen den Zeilen noch Befehle einbauen, um z.B. Portamentos zu realisieren.
Klar geht das. Einfach P drücken. Und wenn das Portamento gleich vom Ton anfangen soll, dann direkt neben den Ton das P setzen.
zatzen hat geschrieben:Darüber könnte man noch diskutieren, ob es auch denkbar wäre, Effekte direkt in Tracker-Manier im Pattern programmierbar zu machen.
Und anfangs hattest Du noch gesagt, daß Du außer Lautstärkenwechseln quasi keine Effekte benutzt. Und sobald ich ein wenig am AtavISM ändere, eigentlich nur um die Bugs zu entfernen und die Bedienung auf Klavier umzustellen, fängt die Featuritis an - genau wie ich es vorausgesehen hatte.
zatzen hat geschrieben:Letztlich ist es ja so:
ISM gefällt mir. Es ist zwar eher Lo-Fi, aber bietet dennoch eine gewisse Klangvielfalt, und es kann eine spannende Herausforderung sein z.B. über die Klangkonfiguration reelle Instrumente nachzubilden zu versuchen.
Naja... Es klingt eben so wie sehr alte Spielkonsole. Und viel mehr wird da auch kaum zu machen sein. Selbst Samples werden ja in reinem 4bit abgespielt (also ohne die deltagepackte logarithmische Kurve, mit der Du 4bit auf 8bit machst) - somit ist ISM-Klangqualität nur knapp über "undefiniertem Rauschen" angesiedelt.
zatzen hat geschrieben:Und da ich gemerkt habe dass die Lautstärke anhand der Anzahl der Kanäle gedrosselt wird,
Mir ist eben nichts anderes eingefallen, wie ich Clipping vermeiden kann. Ich habe schon darüber nachgedacht, einem manuell Musikstück einen "Overdrive" Wert zuordnen zu können, um beim Austesten quasi die mögliche Maximallautstärke zu ermitteln, bevor es "kratzt".
zatzen hat geschrieben:wäre ich auch bestrebt, vielleicht nur 4 Kanäle zu benutzen.
Ja, das wäre dann auch mehr wie "alte Computermusik" und außerdem natürlich performanceschonend.
zatzen hat geschrieben:Jedenfalls sind die Voraussetzungen erfüllt, dass ich gerne Musik darin programmiere.
Mit der bisherigen Version habe ich diesen einen 1-Pattern-Dauerdudler hinbekommen, aber ich habe viel länger dafür gebraucht als eigentlich nötig.
zatzen hat geschrieben:Einfach um den Arbeitsfluss zu beschleunigen und zu erleichtern wären gewisse Erweiterungen zugunsten der Ergonomie sinnvoll.
Naja, das mit dem Verschieben/Kopieren bzw Markieren über mehrere Tracks hinweg... Da müßte ich einiges am Gesamtkonzept umstellen, da muß ich erstmal sehen (und vorsichtig vorgehen), damit ich nicht bereits vorhandene Funktionalitäten kaputtreiße.
zatzen hat geschrieben:Und dann wäre es auch wahrscheinlich, dass ich in AtavISM anfange zu improvisieren und keine Vorlage mehr brauche, die ich seit Jahren ins Hirn gebrannt hatte.
Ja, ich habe immer so Vorlagen im Hirn. Aber improvisieren kann ich auch gut mit prISM und Ähnlichem. Ich baue eben gern an einzelnen Spuren herum, ohne den Rest immer "mitnehmen zu müssen", um sozusagen verschiedene Klangteile immer wieder unterschiedlich miteinander zu kombinieren, ohne sie neu schreiben zu müssen.
zatzen hat geschrieben:Gerne mache ich auch Musik für Dich, Du musst einfach abwägen und einschätzen, ob sich der Aufwand mit den AtavISM Erweiterungen lohnt.
Ja, kommt darauf an, was da noch so alles an Erweiterungen kommt.
zatzen hat geschrieben:Die Funktion Shift+Entf bzw. Einfg nutze ich eher selten, sie kann manchmal ganz praktisch sein,
muss aber nicht unbedingt in AtavISM verfügbar sein. Wichtiger ist tatsächlich Strg+Einfg bzw. Entf.
Naja, Strg+Einfg/Strg+Entf funktionieren doch schon wunschgemäß - oder nicht?
zatzen hat geschrieben:Spielen ab Cursor: Wäre es vielleicht möglich, einfach die Daten lautlos und ohne Zeitfaktor bis zur Position des Cursors vorzuprozessieren?
Spielen ab Timecode: Könnte das nicht auch anhand der Cursorposition automatisch bestimmt werden?
Ja. theoretisch ist es möglich. Mal sehen, wie genau man das hinbekommt.
zatzen hat geschrieben:Noch eine Sache der ich anhand der 1-Pattern Songs gar nicht begegnet bin:
Beim Editieren des Patterns bzw. wenn man sich das dann anhört, ist es für Tracker üblich dass man dieses Pattern in der Schleife hören kann. Ich glaube so hast Du es auch realisiert, ich bin mir nur nicht sicher.
Naja, eher so, daß man den SONG in Schleife hört. Wenn man sich natürlich auf ein Pattern beschränkt oder das entsprechende Pattern als einziges darstellt, hört man das in Schleife - sofern man es im Sequenzer so eingestellt hat.
zatzen hat geschrieben:Schöner Tracker: Naja, ich mag den Textmodus für solche Sachen irgendwie.
Ja, dafür braucht man ja auch keinen Grafikmodus.
prISM/AtavISM unterstützen sogar 5 Grafikmodi - allerdings nur, um daraus ebenfalls "Pseudo"-Textmodi zu machen.
zatzen hat geschrieben:Solo: Braucht nicht während des Abspielens schaltbar sein. Einen Kanal Solo schalten wäre wichtig, dann noch optional wählbar andere dazu wäre gut.
Ja, das AtavISM-Template hat so etwas schon eingebaut. Da ist extra ein Byte an einer Stelle vorgesehen, das entsprechend geändert wird, um anzugeben, welche Stimmen gespielt werden sollen.

zatzen hat geschrieben:Am wichtigsten von allem wäre im Moment aber dass die Sache mit dem "live" Output funktioniert.
Ja, mal sehen. Ich habe da schon eine Idee.
zatzen hat geschrieben:Kleine Anregung noch: Wenn bei einem Instrument Attack auf 0 steht, beginnt der Klang je nach Wellenform mit einem Knacken. Falls Dir der Vorschlag gefällt und es machbar wäre - vielleicht kann man auch bei Attack 0 eine ganz kurze Zeit des Attacks reinrechnen. Keine Ahnung ob sich das einfach machen lässt, mir ist es nur aufgefallen bei DAUERSNG.ISM, auf Kanal B-D habe ich diesen Marimba-ähnlichen Klang der von einem recht harten Attack profitiert, aber es knackt eben. Und bei Attack 1 klang es schon nicht mehr nach Marimba.
Ulkig, daß Du es erwähnst:
Das ist schon lange eingebaut. Die entsprechenden Timeouts für die 16 Attack/Decay/Release-Werte können im "Instr" Menü, im Submenü "Setup Envelopes" einzeln geändert werden.
zatzen hat geschrieben:Freepascal: Ich habe hier Windows 7.
Aber interessant dass Windows XP Soundblaster emulieren kann. Da wäre ich mal gespannt wie ZSM performt auf meinem Laptop.
Was meinste, warum ich immer noch so'n "XP-Fan" bin. Das emuliert DOS besser als alles andere. Und: Es ist keine wirklich "harte" Emulation, d.h. frißt bei weitem nicht soviel Leistung wie 'n richtiger Emulator (wie DOSBox und so) und man hat vollen Zugriff auf alles - ich kann quasi die ganzen INTs benutzen und somit, wenn meine DOS-Programme unter Windows laufen, z.B. lange Dateinamen mit anbieten und alles.
Nach WinXP hätte es gar nix mehr gebraucht.
zatzen hat geschrieben:Zu dem Sample-Problem in AtavISM schreibe ich in meiner nächsten Nachricht.
Ja, OK.

Vielleicht finde ich am Wochenende noch etwas Muße, an AtavISM rumzubauen.
Wieviele Änderungswünsche wird's denn noch geben? Grobe Einschätzung?
Benutzeravatar
zatzen
DOS-Guru
Beiträge: 518
Registriert: Di 17. Apr 2012, 05:10
Wohnort: bei Köln
Kontaktdaten:

Re: Trackermodul-Engine (sehr einfach)

Beitrag von zatzen »

Ich denke, die Anzahl der noch übrigen Änderungswünsche lässt sich mit zwei Bits darstellen.

Bescheiden: Ja, ich habe auch anfangs Grafik für meine Spiele Pixel für Pixel gemacht, ich war
vielleicht 12 Jahre alt und habe keine andere Möglichkeit gesehen, war aber so begeistert
an der Sache dass es mir auch nichts ausgemacht hat dass es ewig dauerte.

Stereo: Brauche ich in meinen Spielen auch nicht und ich empfinde es für Computerspiele der nostalgischen
Art auch als ziemlich unpassend. Ich habe ja auch selber nicht vor, ZSM auf Stereo zu erweitern. Der Soundblaster
Pro, die Karte mit der ich aufgewachsen bin, kann Stereo nur mit 22 kHz. Und eigentlich würden mir vom Klang
her 22 kHz auch dicke genügen, allerdings klingt ZSM mit 44 kHz gemixt(!) deutlich besser als mit 22 kHz, deswegen
empfehle ich da 44 kHz, wenn es der Rechner packt.
Zatzen wünscht sich einfach, wenn machbar, in AtavISM noch ein paar Erweiterungen, damit er AtavISM auch
als einen Tracker verwenden kann, in dem er Musik erfindet, und nicht nur als einen, in den er bereits vorhandene
Musik reinprogrammiert.
Du machst das lieber nicht-redundant und nichtlinear direkt in prISM. Für mich wäre das aber so ein ähnliches
Gefühl wie damals mit dem PLAY Befehl von QBasic.
Die Tracker-Manier erlaubt mir, direkt ein Gefühl für den Rhythmus zu haben und einfach auf alles auf einen Blick
erfassen und kontrollieren zu können was da gerade spielt bzw. was ich eingegeben habe.

Featuritis: Nein, es ist und bleibt so dass ich selbst bei Musik die ich für eine CD ausproduziere fast nur
den Lautstärkebefehl nutze. Daher habe ich nur den bei ZSM eingebaut, weil alle anderen gleitenden
Effekte in den Player-Routinen eine feste feine Rasterung (und damit feste Geschwindigkeitskonstanten)
erfordert hätten und bei Portamentos sogar dicke Tabellen.
Ich habe nur gedacht, WENN man bei ISM die Möglichkeit zu solchen Effekten hat, dann wäre es sinnvoll,
wenn ich diese auch in AtavISM ansteuern kann.

Klang: Eine NES Konsole ist klanglich auf CD-Qualitäts-Niveau, hat aber deutlich weniger Klangvielfalt als ISM.

Lautstärke: Du könntest ein Stück durchsimulieren und so den Spitzenwert finden.
Erinnert mich gerade daran wie ich bei meinem ZSM Optimizer das Stück durchsimuliere um festzustellen,
wie lang die einzelnen Samples tatsächlich gespielt werden, und ob man sie nicht kürzen kann.
Ansonsten, "kratzen" was ich als Überlauf verstehe, kannst Du vermeiden wenn Du den Puffer als 16 Bit
auslegst, die Werte begrenzt, und dann in einen 8 Bit Puffer überführst. Aber das frisst wohl zu viel
Performance, wobei ich schätzen würde dass dieser Vorgang nur einen kleinen Bruchteil der gesamten
Berechnungzeit ausmachen würde.
Ich erinnere ich in diesem Zusammenhang daran, dass Du sagtest, es gäbe dann irgendwie Probleme
mit Vorzeichenlos/Vorzeichenbehaftet. Das wäre natürlich ein Hemmnis, wenn Deine Routinen
fest so ausgelegt sind, dass sie vorzeichenlos arbeiten. Ich verarbeite die Samples in ZSM als
shortints, und das ist dann auch direkt kompatibel mit dem 16 Bit integer Puffer.
Dieses Begrenzen (was tatsächlich Clipping ist) klingt je nachdem wie krass laut es wird auch nicht
high-endig, aber kratzen und schrammeln tut es nicht. Ich wäre da geneigt, einen Trade-Off zwischen
Rauschen und Verzerrung auszumachen, zumal digitales Rauschen im Grunde auch nichts anderes als
Verzerrung ist, nur eben "unten rum".
Meine kommende Version vom ZSM-Player hat die Lautstärke standardmäßig nun auf 37,5% gesetzt.
Damit klingen alle 4 Kanal Module sauber, die meisten haben eher noch zu viel Spielraum, und auch
die meisten Module mit deutlich mehr Kanälen bis hin zu 16 klingen zumindest noch akzeptabel.

Kopieren über mehrere Tracks hinweg: Muss nicht sein. Ich kann es auch anders herum machen und
das vorherige Pattern kopieren und löschen was anders sein soll.

Ja, Strg+Einfg/Enft funktionieren.

Pattern in der Schleife: Sollte auch funktionieren wenn mehr im Sequencer steht.
Also grundsätzlich müsste die Möglichkeit da sein, entweder das Pattern in einer Schleife
oder den ganzen Song abzuspielen. Ist besonders wichtig beim Improvisieren, ich muss
dazu beliebig lange eine Stelle hören können die bereits da ist.
X-Tracker: Alt+F9 - Pattern abspielen (Schleife), Strg+F9 - Song von Anfang bis Ende spielen, ggf. mit Schleife

Noch eine Korrektur: Ich sagte, Nummernblock "+" würde ein neues Pattern aufmachen.
Es ist vielmehr so, dass man sich mit + und - durch die Patterns schalten kann, und wenn
man beim höchsten vorhandenen Pattern angekommen ist und + drückt dann ein neues
gemacht wird.
Wenn man zum Sequencer wechselt bestimmt der, welches Pattern unten angezeigt wird,
ansonsten regelt man das unabhängig mit +/- wie gesagt.


Ich bin noch nicht dazu gekommen die Sample-Sache zu rekonstruieren, aber ich wollte schonmal antworten,
weil Du evlt. dieses Wochenende noch was an AtavISM machen wollest.
mov ax, 13h
int 10h

while vorne_frei do vor;
Benutzeravatar
FGB
DOS-Übermensch
Beiträge: 1873
Registriert: Di 15. Feb 2011, 12:02

Re: Trackermodul-Engine (sehr einfach)

Beitrag von FGB »

Ich möchte nur kurz zwischendurch loben, was ihr hier für eine tolle Konversation am Laufen habt. Das Projekt klingt sehr vielversprechend, ich freue mich drauf :like:
Meine Sammlung zeige ich in meiner Hardware Gallery: AmoRetro.de.
Benutzeravatar
zatzen
DOS-Guru
Beiträge: 518
Registriert: Di 17. Apr 2012, 05:10
Wohnort: bei Köln
Kontaktdaten:

Re: Trackermodul-Engine (sehr einfach)

Beitrag von zatzen »

So, ich habe nochmal die Sache mit dem Sample probiert.
Komisch, jetzt funktioniert es.
Natürlich hört man die Bassdrum kaum, weil sie ja gegen 7 andere Kanäle konkurrieren muss.
Trotzdem hier mal das Datenpaket: http://www.zatzen.net/DAUERSMP.zip
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: Trackermodul-Engine (sehr einfach)

Beitrag von DOSferatu »

FGB hat geschrieben:Ich möchte nur kurz zwischendurch loben, was ihr hier für eine tolle Konversation am Laufen habt. Das Projekt klingt sehr vielversprechend, ich freue mich drauf :like:
Ja, für den Anwender eines Tools ist es natürlich ein Vorteil, direkten Kontakt zum Entwickler des Tools zu haben - weil direkt Änderungswünschte und Verbessungsvorschläge angebracht werden können und eventuell umgesetzt werden.
Für den Entwickler ist es das auch - für Tests, Feedback, Bugreports usw.

Allerdings wollte ich mich eigentlich gar nicht so lange mit AtavISM, dem "Nebenprodukt" von prISM aufhalten.
Eigentlich wollte ich ja meinen "Spiel-Container" weiterentwickeln und dann endlich mal wieder ein Spiel machen.
Seufz...
DOSferatu
DOS-Übermensch
Beiträge: 1220
Registriert: Di 25. Sep 2007, 12:05
Kontaktdaten:

Re: Trackermodul-Engine (sehr einfach)

Beitrag von DOSferatu »

zatzen hat geschrieben:So, ich habe nochmal die Sache mit dem Sample probiert.
Komisch, jetzt funktioniert es.
Natürlich hört man die Bassdrum kaum, weil sie ja gegen 7 andere Kanäle konkurrieren muss.
Trotzdem hier mal das Datenpaket: http://www.zatzen.net/DAUERSMP.zip
Alle Samples, die man in prISM/AtavISM benutzt, sollten für sich selbst volle Lautstärke haben. ISM macht Zeug nie lauter, sondern nur leiser. D.h. mit Volume=15 und Sustain=15 ist es so laut wie original - WENN man nur 1 Stimme nutzt.
Wenn also ein Sample schon vorher leise ist, wird es nur noch leiser in ISM. Daher das Ding auf maximum Power drehen. Vielleicht baue ich eine entsprechende Option mal in WAV2SMP bzw. im Frontend (SNDCHECK) dazu ein.

VOC386 kann das auch. Von den Funktionen/Optionen her ist es gar nicht schlecht. Leider hat es bei der Oberfläche einige Bugs und kann nur Lautwerke bis zu... weiß grad nich. Und sortiert die Files nicht. Und speichert WAV immer mit Header 22050 Hz, egal welche Rate man in Wirklichkeit benutzt und.. naja... so Kleinigkeiten, die jedesmal nerven. Ich wollte schon immer mal selber so ein Teil wie VOC386 programmieren - nur ohne den ganzen Blödsinn, der da manchmal passiert.
Benutzeravatar
zatzen
DOS-Guru
Beiträge: 518
Registriert: Di 17. Apr 2012, 05:10
Wohnort: bei Köln
Kontaktdaten:

Re: Trackermodul-Engine (sehr einfach)

Beitrag von zatzen »

Es ist in klassischen Trackern ja nicht anders, die können auch nur leiser machen, 255 ist die maximal-Lautstärke
und die ist Standardeinstellung für alle Samples. Würde man das auf z.B. 64 setzen hätte man nach oben hin noch
12 dB Luft. Zur Zeit als ich meine Trackerstücke noch nicht extern gemischt habe, habe ich es ungefähr so gemacht,
dass ich eher 128 als Standard genommen habe, damit ich eben gewisse Elemente noch herausragen lassen konnte.

Ich habe das Bassdrum-Sample schon so laut wie noch unter ästhetischen Klangaspekten vertretbar gemacht,
sprich die Hälfte der Wellenform gleicht schon eher einem Rechteck. Trotzdem ist normalerweise eine Bassdrum
in einem Popmusik-Stück immer eines der lautesten Elemente, sprich der Ausschlag geht bis an die Grenze.
In Atavism würde nur helfen, das Stück auf 4 Kanäle zu beschränken und die anderen Stimmen vielleicht
etwas leiser zu machen.
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: Trackermodul-Engine (sehr einfach)

Beitrag von DOSferatu »

zatzen hat geschrieben:In Atavism würde nur helfen, das Stück auf 4 Kanäle zu beschränken und die anderen Stimmen vielleicht etwas leiser zu machen.
So ist es ja auch gedacht. Wenn etwas lauter als alles andere sein soll, muß man das andere leiser machen. "Lauter als maximal" geht eben nicht in einem System mit Wertebegrenzung.
Benutzeravatar
zatzen
DOS-Guru
Beiträge: 518
Registriert: Di 17. Apr 2012, 05:10
Wohnort: bei Köln
Kontaktdaten:

Re: Trackermodul-Engine (sehr einfach)

Beitrag von zatzen »

Ich lerne gerade Renoise. Jedenfalls versuche ich es einmal, auf gut Glück, ob ich damit die
gleiche Performance erreiche wie mit X-Tracker, dessen Beschränkungen für richtige Produktionen
mich mittlerweile doch ziemlich nerven.
AtavISM muss nicht ganz exakt wie X-Tracker bedienbar sein, wichtig ist dass die Features drin sind.
Aber es ist natürlich schon wahr, dass ich persönlich schneller mit dem Programm umgehen kann
wenn es wie eines bedienbar ist, das ich schon seit 25 Jahren benutze.
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: Trackermodul-Engine (sehr einfach)

Beitrag von DOSferatu »

zatzen hat geschrieben:Ich lerne gerade Renoise. Jedenfalls versuche ich es einmal, auf gut Glück, ob ich damit die
gleiche Performance erreiche wie mit X-Tracker, dessen Beschränkungen für richtige Produktionen
mich mittlerweile doch ziemlich nerven.
Also eher Bewegung in Richtung noch mehr Features.
zatzen hat geschrieben:AtavISM muss nicht ganz exakt wie X-Tracker bedienbar sein, wichtig ist dass die Features drin sind.
AtavISM ist sowieso ein "eigenständiges" Programm (eigentlich nur das Schwesterprogramm von prISM) - es ist kein X-Tracker-Nachbau und soll es auch nicht sein. Ich muß hier sowieso abwägen, was noch in das ursprüngliche Bedienkonzept hineinpaßt und was nicht - damit ich nicht einen kompletten Feature-Klotz an das eigentliche Programm dilettantsch "außenherum anflansche", weil es dem ganzen Konzept entgegenläuft. Ich hatte jetzt 2 Wochen Urlaub und habe einfach keine Kraft oder Lust aufgebracht, an diesem Programm weiterzuzimmern.
zatzen hat geschrieben:Aber es ist natürlich schon wahr, dass ich persönlich schneller mit dem Programm umgehen kann
wenn es wie eines bedienbar ist, das ich schon seit 25 Jahren benutze.
Der Effekt ist mir bekannt - geht mir ja genauso. Es ist ja auch kein Geheimnis, daß ich mir viele meiner Tools selbst programmiere - und zwar aus dem entgegengesetzten Grund wie bei Dir:
Mir sind vorhandene Programme einfach mit viel zu vielen Features überladen - so etwas macht sie für mich unübersichtlich und umständlich. Ich habe z.B. noch nicht ein einziges Malprogramm gesehen, mit dem ich wirklich längerfristig arbeiten wollen würde. - Das (und nur das) ist der Grund, wieso ich mir ein eigenes Malprogramm gebaut habe.

Vor einer Weile habe ich mal gesehen, wie so Programme aussehen, mit denen man 3D-Objekte/Räume usw. heutzutage macht - bäh! So würde ich das nie im Leben machen... Ehe man da überhaupt mal ein einziges brauchbares Ergebnis zusammengebaut hat... naja. Wahrscheinlich bin ich einfach zu alt für diesen ganzen Kram.

Meine Tools (Abgesehen von Auftragsarbeiten) baue ich NIE "um ihrer selbst Willen", also, weil ich denken würde: "Man könnte ja mal so ein Ding bauen..." - sondern immer nur, wenn/weil ich sie brauche. Das einzige, was ich "um ihrer selbst Willen" baue, sind Spiele.

P.S.: Mal sehen, wann (und ob überhaupt) ich noch weiter an AtavISM arbeite. Ich sehe es ja kommen, daß nach eventuelem Einbau der genannten Features nicht etwa endlich Benutzbarkeit von AtavISM ansteht, sondern stattdessen schon die nächsten Features und Änderungswünsche warten werden. Eigentlich habe ich ja auch noch andere Pläne.
Antworten