MIDI
Übersicht

![]() |
VertexBetreff: MIDI |
![]() Antworten mit Zitat ![]() |
---|---|---|
Da ich bei meinem aktuellen Projekt intensiv mit MIDI Dateien arbeite, habe ich dazu ein kleines Modul herausgebracht. Ich verstehe das MIDI Format/Protokoll selber noch nicht vollständig, aber es wird langsam ^^
Nebenbei arbeite ich an einer deutschen Dokumentation: vertex.dreamfall.at/midi/midi.pdf Ist aber nur im Anfangsstadium Hier das Modul: Vertex.MIDI 1.00 Beta Es fehlt in erster Linie noch SystemExclusive Nachrichten sowie running status Events. Hier ein kleines Beispiel, dass eine .mid Datei erzeugt mit einem Track. Das Stück ist von Linkin Park - wers kennt. Code: [AUSKLAPPEN] SuperStrict
Framework BRL.Blitz Import Vertex.MIDI Global MIDI : TMIDI, .. Header : TMIDIHeader, .. Track : TMIDITrack MIDI = New TMIDI Header = New TMIDIHeader ' 480 PPQN -> 480 Ticks / 1/4 Note Header.TimeDevision = 480 MIDI.SetHeader(Header) Track = New TMIDITrack ' DeltaTime = 0 ' Numerator = 4 ' Denominator = 2 ' Metronome = 24 ' 32nds = 8 Track.AddEvent(.. TTimeSignature.Create(0, 4, 2, 24, 8) .. ) ' DeltaTime = 0 ' MPQN = 60000000/120 BPM Track.AddEvent(.. TSetTempo.Create(0, 500000) .. ) Track.AddEvent(.. TText.Create(0, TText.SEQUENCE_TRACK_NAME, .. "Linkin Park - In the end") .. ) ' DeltaTime, Channel, Note, Velocity Track.AddEvent( TNoteOn.Create( 0, 0, 51, 127) ) Track.AddEvent( TNoteOn.Create( 480, 0, 58, 127) ) Track.AddEvent( TNoteOff.Create( 464, 0, 58, 64) ) Track.AddEvent( TNoteOn.Create( 16, 0, 58, 127) ) Track.AddEvent( TNoteOn.Create( 480, 0, 54, 127) ) Track.AddEvent( TNoteOff.Create( 464, 0, 51, 64) ) Track.AddEvent( TNoteOn.Create( 16, 0, 53, 127) ) Track.AddEvent( TNoteOff.Create( 464, 0, 53, 64) ) Track.AddEvent( TNoteOn.Create( 16, 0, 53, 127) ) Track.AddEvent( TNoteOff.Create( 464, 0, 53, 64) ) Track.AddEvent( TNoteOff.Create( 0, 0, 58, 64) ) Track.AddEvent( TNoteOn.Create( 16, 0, 53, 127) ) Track.AddEvent( TNoteOff.Create( 464, 0, 54, 64) ) Track.AddEvent( TNoteOff.Create( 0, 0, 53, 64) ) Track.AddEvent( TNoteOn.Create( 16, 0, 53, 127) ) Track.AddEvent( TNoteOn.Create( 240, 0, 54, 127) ) Track.AddEvent( TNoteOn.Create( 240, 0, 51, 127) ) Track.AddEvent( TNoteOn.Create( 480, 0, 58, 127) ) Track.AddEvent( TNoteOff.Create( 464, 0, 58, 64) ) Track.AddEvent( TNoteOn.Create( 16, 0, 58, 127) ) Track.AddEvent( TNoteOff.Create( 464, 0, 54, 64) ) Track.AddEvent( TNoteOff.Create( 0, 0, 51, 64) ) Track.AddEvent( TNoteOn.Create( 16, 0, 54, 127) ) Track.AddEvent( TNoteOff.Create( 16, 0, 53, 64) ) Track.AddEvent( TNoteOn.Create( 464, 0, 53, 127) ) Track.AddEvent( TNoteOff.Create( 464, 0, 53, 64) ) Track.AddEvent( TNoteOn.Create( 16, 0, 53, 127) ) Track.AddEvent( TNoteOff.Create( 464, 0, 53, 64) ) Track.AddEvent( TNoteOff.Create( 0, 0, 58, 64) ) Track.AddEvent( TNoteOn.Create( 16, 0, 53, 127) ) Track.AddEvent( TNoteOff.Create( 464, 0, 54, 64) ) Track.AddEvent( TNoteOff.Create( 0, 0, 53, 64) ) Track.AddEvent( TNoteOn.Create( 16, 0, 53, 127) ) Track.AddEvent( TNoteOn.Create( 240, 0, 54, 127) ) Track.AddEvent( TNoteOff.Create(1664, 0, 54, 64) ) Track.AddEvent( TNoteOff.Create( 32, 0, 53, 64) ) Track.AddEvent(.. TEndOfTrack.Create(0) .. ) MIDI.AddTrack(Track) MIDI.Save("Linkin Park - In the end.mid") Um sich die MIDI Events ausgeben zu lassen, kann man folgenden Code benutzen: Code: [AUSKLAPPEN] SuperStrict
Framework BRL.Blitz Import Vertex.MIDI Global MIDI : TMIDI, .. Header : TMIDIHeader, .. Track : TMIDITrack Try MIDI = TMIDI.Load("Moby - Porcelain.mid") Header = MIDI.Header Header.Debug() DebugLog("") For Track = EachIn MIDI.Tracks Track.Debug() DebugLog("") Next Catch Exception : Object WriteStdout("Error:~n " + Exception.ToString() + "~n") End Try End Als Referenz nehme ich immer AnvilStudio Ein weiteres geniales Programm ist Synthesia : ![]() ![]() mfg olli |
||
vertex.dreamfall.at | GitHub |
porcus |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Kann das auch Midis abspielen?
Wäre für mich am meisten interessant. |
||
*Account deaktiviert* |
![]() |
Vertex |
![]() Antworten mit Zitat ![]() |
---|---|---|
Leider nicht. Dazu fehlt mir ganz einfach das Wissen, was welches Event genau bewirkt. Weiterhin weiß ich auch nicht, ob die Patches(also praktisch die .wav Dateien der einzelnen Instrumente) nicht irgendwo bei Roland o. ä. patentiert sind.
Allegro bietet vllt. das, was du suchst: http://www.allegro.cc/manual/api/music-routines-(midi)/ http://prdownloads.sourceforge...p?download in src/midi.c MiniFMOD bietet zudem einen open source Player für XM Tracker Musik an. Ich pers. würde auch MIDI Lieder als Hintergrundmusik für Spiele einsetzen. Die XM Musikstücke klingen da bei weitem besser ![]() http://www.fmod.org/index.php/download mfg olli |
||
vertex.dreamfall.at | GitHub |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group