Hallo Zusammen, ich würde gerne auf einem MC Midi-Files abspielen. Dazu brauche ich einen Midiparser. Kennt jemand von euch ein gutes Projekt? Im ersten Schritt würde ich gerne mittels eines fertigen Programmes auf dem PC Midi-Files untersuchen. Gibt es dazu geeignete Werkzeuge? Vielen Dank im Voraus, chris Für Python habe ich etwas gefunden: http://pypi.python.org/pypi/midiparser Da finde ich allerdings keinen Download.
Ja, pymidi ist anscheinend tot, aber hier gibt's ne ganze Menge anderer Python-Libs, die das evtl. können: http://pypi.python.org/pypi?:action=browse&c=361 Da findest du sicher was. Grüße, Sven
>http://pypi.python.org/pypi?:action=browse&c=361 >Da findest du sicher was. Ich hatte den Eindruck, dass alle diese Sachen etwas "aufgeblasen" sind. Was ich suche ist einfach ein Programm, welches mir die Midibefehle wie z.B. 0x80 in Klartext "NotenOn" übersetzt und auf dem Bildschirm anzeigt. Wahrscheinlich ist es am besten, ich schreibe mir das Ding selber.
Hier könnte was für dich dabei sein: http://www.gnmidi.com/gnfreeen.htm Ist halt alte DOS-Software, aber MIDI ist ja auch nicht gerade das neueste Format ;-) Grüße Mark
"aufgeblasen"... soll das Ding auf einem 486 laufen, oder was? Ansonsten, warum ist es relevant, ob die Bibliothek mehr Funktionen hat als du brauchst? Das ist im Endeffekt der Grund, warum alles in der Computerwelt so schlecht funktioniert: statt existierende Projekte zu verwenden und bei Bedarf zu verbessern erfindet jeder immer das Rad neu.
>"aufgeblasen"... soll das Ding auf einem 486 laufen, oder was? >Ansonsten, warum ist es relevant, ob die Bibliothek mehr Funktionen hat >als du brauchst? >Das ist im Endeffekt der Grund, warum alles in der Computerwelt so >schlecht funktioniert: Ein großes Problem in der "Computerwelt" ist, dass die meisten Programme "Alles" und "Nichts" können. Ständig muss man irgendwelche riesig Pakte Installieren, Abhängigkeite werden nicht erfüllt, es muss etwas nachträglich "Upgedate" werden oder das Programm ist zu kompliziert.
Das Problem mit den Paketen nachinstallieren haste aber nur bei Linux und selbst da wird das autoatisch per aptget erledigt.
Hier im MC-Netz gibt es ja tatsächlich einen Artikel über AVR-Syntehsizer: http://www.mikrocontroller.net/articles/AVR-Synthesizer Bleibt nur die Frage: Wie werden die Mididaten konvertiert?
Das Midi-Format ist sowas von einfach zu interpretieren, vorallem da Daten und Befehlybytes direkt zu unterscheiden sind, das kostet keinen Gehirnschmalz sondern nur Freizeit. Lernt mal was! Gruß
Die frage ist einfach... gibts was für ein mikrocontroller mit wenig Speicher oder nicht ?... hat er es doch geschrieben! hast du schon in Programmersheaven angeschaut ?... Ich habe mich damit vor vielen Jahren befasst und hatte irgend eine Beschreibung gefunden... mals sehen ob ich es wieder finde...
Hier gibts was interesantes... http://www.sonicspot.com/guide/midifiles.html Für ein parser guck mal bei der Propeller Foren ich hab schon dort was gesehen :)
chris schrieb: > Hallo Zusammen, > > ich würde gerne auf einem MC Midi-Files abspielen. Dazu brauche ich > einen Midiparser. Kennt jemand von euch ein gutes Projekt? http://www.mikrocontroller.net/forum/codesammlung?filter=midi
Um Midi Files besser analysieren zu können, versuche ich einen Midi-File Parser zu schreiben. Hier die erste Version in Python. Es werden 3 Midi-Kommandos erkannt: - NoteON - NoteOff - Midicontroller
1 | import binascii |
2 | from struct import unpack |
3 | |
4 | def toByte(value): |
5 | x=unpack('%sB' % len(value), value) |
6 | if len(x)>0: |
7 | return x[0] |
8 | else: |
9 | return 0 |
10 | |
11 | def readFileAndPrint(filename): |
12 | |
13 | with open(filename, "rb") as inf: |
14 | byte =inf.read(1) |
15 | inf.seek(-1,1) # one byte back |
16 | while byte != "": |
17 | byte = inf.read(1) |
18 | if toByte(byte)&0xF0==0x80: |
19 | |
20 | print "NoteOff", |
21 | if toByte(byte)&0xF0==0x90: |
22 | |
23 | print "NoteOn", |
24 | if toByte(byte)&0xF0==0xB0: |
25 | |
26 | print "MidiController", |
27 | print binascii.hexlify(byte), |
28 | |
29 | |
30 | readFileAndPrint("tune.mid") |
Das angehängte Midi-File ergibt folgendes Ergebnis: ... NoteOn 90 48 2c 1e NoteOff 80 4a 40 NoteOff 81 66 ... MidiController b0 40 7f 7c ... Mit ist unklar, wie die Zeitinformationen für das Abspielen der Noten implemtiert sind. Liegen diese im MidiController-Kommando?
Auf der Arduino Seite wird ziemlich viel mit Midi gemacht. Hier ein vereinfachter Midi-Player in C: http://blog.tangrs.id.au/?p=551
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.