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
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
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.
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?
Midi war der richtige Weg! Danke Joe :) https://www.youtube.com/watch?v=Z4Sc5Gkq_4Y&feature=youtu.be
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 ...
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 ... :)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.