Polyphonischer DDS Lilypond Music Player für µCs gesucht

Persönliche Seite #5128387
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
Persönliche Seite #5128849
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.
Persönliche Seite #5129190
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?
#5129372
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 ...
Persönliche Seite #5129528
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 ... :)

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