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?
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..
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.