Forum: Mikrocontroller und Digitale Elektronik Polyphonischer DDS Lilypond Music Player für µCs gesucht


von Mampf F. (mampf) Benutzerseite


Lesenswert?

Guten Mittag,

hat sowas jemand zufällig in der Schublade liegen?

Ich bräuchte einen Lilypond-Parser, der mir dann mehrstimmig mehrere DDS 
anwirft, um hübsche Melodien abzuspielen und das muss natürlich auf 
einem µC laufen - also nicht unbedingt AVR, aber Cortex M3 schon ;-)

Ah sorry, heute ist ja noch garnicht Freitag xD

von Joe F. (easylife)


Lesenswert?

Und MIDI magst du nicht?

von Mampf F. (mampf) Benutzerseite


Lesenswert?

Joe F. schrieb:
> Und MIDI magst du nicht?

Gute Frage, und du hast absolut recht ...

Ich hab mir mftext von abcmidi angeschaut und das Programm ist äußerst 
schlank und dumpt quasi nur das Midi auf die Console.

Verwendet (so gut wie) keine dynamische Speicherverwaltung und lässt 
sich ohne große Kunstkniffe direkt auf dem STM32L1 kompilieren.

Das ganze File-I/O lässt sich direkt aus einem Array bedienen, wenn man 
der Library eine 4-zeilige Funktion übergibt, die jeweils ein Zeichen 
linear hintereinander aus dem Array zurück liefert ...

mftext legt netterweise auch gleich Arrays an, die man dann nur 
abspielen muss (Timestamp, Note-On, Note-Off, Pitch, ...) - genau das, 
was ich gesucht hab :)

Dachte erst, ein Lilypond-Parser wäre einfacher, aber das ist es nicht 
wirklich, weil man das Timing über die Notenlängen rekonstruieren muss 
... Midi ist da viel viel simpler.

: Bearbeitet durch User
von Joe F. (easylife)


Lesenswert?

Mampf F. schrieb:
> Midi ist da viel viel simpler.

So siehts aus.
Und daher gibt's dann auch zu jedem "Greatest Hit" irgendwo ein MIDI 
File, mit dem man dann ganz prima die Fahrstühle und Hotellobbys der 
Welt akustisch verseuchen kann. Besonders beliebt so um die 
Weihnachtszeit.

von Mampf F. (mampf) Benutzerseite


Lesenswert?

Hmm, könnte mir jemand bitte erklären, was der obere Block der Ausgabe 
zu heißen hat?

Wofür braucht man dieses microseconds-per-MIDI-quarter-note-Gedöhns? :)

1
Header format=1 ntrks=2 division=480
2
Track start
3
Time=0  Meta Text, type=0x02 (Copyright Notice)  leng=35
4
     Text = <Copyright (c) xxxx Copyright Holder>
5
Time=0  Meta Text, type=0x07 (Cue Point)  leng=21
6
     Text = <Created by Rosegarden>
7
Time=0  Meta Text, type=0x07 (Cue Point)  leng=31
8
     Text = <http://www.rosegardenmusic.com/>
9
Time=0  Tempo, microseconds-per-MIDI-quarter-note=416666
10
Time=0  Time signature=4/4  MIDI-clocks/click=24  32nd-notes/24-MIDI-clocks=8
11
Time=124800  Tempo, microseconds-per-MIDI-quarter-note=1000000
12
Time=124920  Tempo, microseconds-per-MIDI-quarter-note=1000000
13
Time=125040  Tempo, microseconds-per-MIDI-quarter-note=983606
14
Time=125160  Tempo, microseconds-per-MIDI-quarter-note=983606
15
Time=125280  Tempo, microseconds-per-MIDI-quarter-note=967741
16
Time=125400  Tempo, microseconds-per-MIDI-quarter-note=952380
17
Time=125520  Tempo, microseconds-per-MIDI-quarter-note=952380
18
Time=125640  Tempo, microseconds-per-MIDI-quarter-note=937500
19
Time=125760  Tempo, microseconds-per-MIDI-quarter-note=923076
20
Time=125880  Tempo, microseconds-per-MIDI-quarter-note=923076
21
Time=126000  Tempo, microseconds-per-MIDI-quarter-note=909090
22
Time=126120  Tempo, microseconds-per-MIDI-quarter-note=895522
23
...
24
Time=139560  Tempo, microseconds-per-MIDI-quarter-note=428571
25
Time=139680  Tempo, microseconds-per-MIDI-quarter-note=425531
26
Time=139800  Tempo, microseconds-per-MIDI-quarter-note=422535
27
Time=139920  Tempo, microseconds-per-MIDI-quarter-note=422535
28
Time=140040  Tempo, microseconds-per-MIDI-quarter-note=419580
29
Time=140160  Tempo, microseconds-per-MIDI-quarter-note=416666
30
Time=245759  Meta event, end of track
31
Track end
32
Track start
33
Time=0  Meta Text, type=0x03 (Sequence/Track Name)  leng=10
34
     Text = <Vibraphone>
35
Time=0  Program, chan=1 program=11
36
Time=0  Parameter, chan=1 c1=10 c2=64
37
Time=0  Parameter, chan=1 c1=93 c2=0
38
Time=0  Parameter, chan=1 c1=7 c2=100
39
Time=0  Parameter, chan=1 c1=91 c2=0
40
Time=0  Note on, chan=1 pitch=88 vol=72
41
Time=239  Note off, chan=1 pitch=88 vol=64
42
Time=480  Note on, chan=1 pitch=76 vol=72
43
Time=480  Note on, chan=1 pitch=71 vol=72
44
Time=719  Note off, chan=1 pitch=76 vol=64
45
Time=719  Note off, chan=1 pitch=71 vol=64
46
Time=719  Note on, chan=1 pitch=83 vol=72
47
Time=960  Note off, chan=1 pitch=83 vol=64
48
Time=1439  Note on, chan=1 pitch=76 vol=72
49
...


Reicht nicht der untere Teil?

Da steht doch alles, was man wissen muss, oder etwa nicht?

von Mampf F. (mampf) Benutzerseite


Lesenswert?

Midi war der richtige Weg!

Danke Joe :)

https://www.youtube.com/watch?v=Z4Sc5Gkq_4Y&feature=youtu.be

von Clemens L. (c_l)


Lesenswert?

Mampf F. schrieb:
> Wofür braucht man dieses microseconds-per-MIDI-quarter-note-Gedöhns?

Damit du weißt, wie schnell du es abspielen musst.

> division=480

Also 480 Ticks pro quarter-note.

> microseconds-per-MIDI-quarter-note=416666

Damit kannst du dann die Länge eines Ticks ausrechnen.

("quarter-note" entspricht nicht notwendigerweise einer 'echten' 
Viertelnote; es ist hier nur eine Zeiteinheit.)

> Time=719 ...

Alle Zeitstempel sind in Ticks.

> Time=125280  Tempo, microseconds-per-MIDI-quarter-note=967741

Und dass sich das Tempo zwischendurch ändert, macht das Ganze natürlich 
besonders interessant.


Und auf einem µC, der die MIDI-Kommandos in Echtzeit empfängt, brauchst 
du das alles nicht ...

von Mampf F. (mampf) Benutzerseite


Lesenswert?

Clemens L. schrieb:
> Damit kannst du dann die Länge eines Ticks ausrechnen.
>
> ("quarter-note" entspricht nicht notwendigerweise einer 'echten'
> Viertelnote; es ist hier nur eine Zeiteinheit.)
>
>> Time=719 ...
>
> Alle Zeitstempel sind in Ticks.
>
>> Time=125280  Tempo, microseconds-per-MIDI-quarter-note=967741
>
> Und dass sich das Tempo zwischendurch ändert, macht das Ganze natürlich
> besonders interessant.

Oh! Ah krass ... Hmmhmm ... Ob ich mir soetwas antue ... :)

Clemens L. schrieb:
> Und auf einem µC, der die MIDI-Kommandos in Echtzeit empfängt, brauchst
> du das alles nicht ...

Das tut er nicht - soll eher eine Midi-Melodie als Alarm-Sound 
abspielen. Ist ein Armbanduhr-Projekt :)

Aber jetzt funktionierts so, wie es soll ... :)

von Axel R. (Gast)


Lesenswert?

Elm Chan's Spieldose lief 6Stimmig Polyphone mit DDS. Im Projekt sind 
auch ein, zwei Phyton-Scripte für die Melodie.
läuft aufm Tiny45.

StromTuner

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.