www.mikrocontroller.net

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


Autor: Jochen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Jochen (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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..

Autor: Jochen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jochen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.