Sequencer Prinzip ELM - Wavetable Melody Generator (ASM)

Gast #578151
Lesenswert?

http://elm-chan.org/works/mxb/report_e.html beschreibt ein Aufbau zur 
DDS einer elektronischen Spieluhr mit 6 Stimmen.

Ähnlich wird es in http://www.microsyl.com/doorbell/doorbell.html 
gemacht, allerdings mit zwei Stimmen und einem für mich einfacher zu 
durschauenden 'Sequencer', da in C programmiert.
Mit Sequencer meine ich den Teil, der aus den Musikdaten die Musik 
macht.

Ich verstehe Assembler nicht gut, deswegen ist mir ChaNs Prinzip leider 
nicht ganz klar. Hier mal ein Ausschnitt aus den Musikdaten 
(http://elm-chan.org/works/mxb/mg.zip):

120, 0, E5|en,
150, 0, Dis5|en,
180, 0, E5|en,
210, 0, Dis5|en,
240, 0, E5|en,
14, 1, H5|en,
44, 1, D5|en,
74, 1, C5|en,
104, 1, A5, A3|en,
134, 1, E3|en,
164, 1, A4|en,
194, 1, C4|en,
224, 1, E4|en,
254, 1, A5|en,
...

en steht für 128 und kennzeichnet end of line. In einer Zeile stehen 
also zwei Werte und mindestens eine Note (Dezimal bis ca. 50), davon ist 
die Letzte mit dem eol Bit versehen. Es gibt 378 Zeilen.

Die Notenlänge hängt anscheinend von der Note selbst ab (wird nur 
angeschlagen und klingt dann aus).

Die beiden ersten Werte werden immer erhöht und bilden zusammen 
anscheinend den Einsatzzeitpunkt (absolut!?). Mit C würde man vielleicht 
direkt einen 16bit Wert benutzen? Warum wird diese Reihenfolge der Bytes 
verwendet?

Jetzt die eigentliche Frage: wie ist der Timer umgesetzt und wie 
getaktet?
Gast #578158
Lesenswert?

Hier noch das asm listing.
Warum ist das Timing wohl absolut? Wäre es nicht speichersparender, 
einfach den Abstand zur nächsten Note zu benutzen? Natürlich schränkt 
das die Abstände etwas ein, aber in der verwendeten Melodie spielt das 
doch keine Rolle..
Angehängte Dateien:
Gast #578229
Lesenswert?

Aus der Aufnahme geht hervor, dass der Abstand der ersten beiden Noten 
etwa 0.24s ist, das wären 8ms pro tick. In der ISR mit 32.xxkHz wird 
also vermutlich ein Register benutzt, das etwa mit 8ms (125Hz) überläuft 
(125x256=32k).
Mit dem zweiten Register kommt man dann theoretisch auf 8'44'' 
Musikgenuss.
Gast #580136
Lesenswert?

Es ist wohl doch besser, das Timing absolut zu gestalten, und zwar mit 
16 bit. Mit je einem byte für Notendauer und Pausenlänge kommt man 
schnell an die Grenzen.

Midi verwendet auch absolute Zeitangaben, vermutlich lässt sich die 
Mehrstimmigkeit so auch besser umsetzen. Spart vielleicht Rechenzeit.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren