Forum: Mikrocontroller und Digitale Elektronik Sequencer Prinzip ELM - Wavetable Melody Generator (ASM)


von Jochen (Gast)


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?

von Jochen (Gast)


Angehängte Dateien:

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..

von Jochen (Gast)


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.

von Jochen (Gast)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.