Hi,
ich schreibe momentan ein kleines Programm in dem ich Midi-Datein abspielen kann und die Noten visualisiere. In einfachster Form sieht das momentan so aus, dass ich mir Klaviertasten anzeigen lasse und die Noten, welche gespielt werden, leuchten auf.
Bisher habe ich das so gelöst, dass ich die Midi-Datei auslese und mir NoteOn und NoteOff mit Tonhöhe und Tick speichere.
Dazu hab ich mir einen Timer gebaut, der in etwa der MidiTick-Schrittgeschwindigkeit gleicht, allerdings ist das problematisch, da der Timer und die Ereignissbehandlung, teilweise nicht so schnell hinterherkommen. Daher update ich nicht auf jeden Tick, sondern nur jeden 4.ten was schonmal nicht so toll ist.
Sprich wenn ich starte, fängt die Midi-Datei an abzuspielen und der Timer startet. Im Timer wird mit jedem Aufrufen ein Int-Wert inkrementiert (in dem Fall um 4) und dieser dann mit dem Tick-Wert der in einem Array gespeicherten Noten verglichen und dementsprechend dann drauf reagiert.
Da das Ganze jedoch recht umständlich und nicht ganz genau ist, würde ich gern einen anderen Weg gehen.
Meine Idee ist es eigentlich einen Listener an den Abspieler, also an den Sequencer, zu hängen, der mir bescheid gibt wenn ein Event beim Abspielen der Midi-Datei aufgetreten ist. Jedoch habe ich da nur die Möglichkeiten einen ControllerEventListener oder einen MetaEventListener anzumelden. Diese scheinen mich jedoch beide nicht weiter zu bringen.
Dann hatte ich mir gedacht, dass es vielleicht funktioniert, wenn ich eine Brücke über Transmitter und Receiver baue, aber auch an die kann ich keinen Listener anmelden.
Übersehe ich etwas? Würde mich freuen, wenn mir da jemand weiterhelfen könnte.
ich schreibe momentan ein kleines Programm in dem ich Midi-Datein abspielen kann und die Noten visualisiere. In einfachster Form sieht das momentan so aus, dass ich mir Klaviertasten anzeigen lasse und die Noten, welche gespielt werden, leuchten auf.
Bisher habe ich das so gelöst, dass ich die Midi-Datei auslese und mir NoteOn und NoteOff mit Tonhöhe und Tick speichere.
Dazu hab ich mir einen Timer gebaut, der in etwa der MidiTick-Schrittgeschwindigkeit gleicht, allerdings ist das problematisch, da der Timer und die Ereignissbehandlung, teilweise nicht so schnell hinterherkommen. Daher update ich nicht auf jeden Tick, sondern nur jeden 4.ten was schonmal nicht so toll ist.
Sprich wenn ich starte, fängt die Midi-Datei an abzuspielen und der Timer startet. Im Timer wird mit jedem Aufrufen ein Int-Wert inkrementiert (in dem Fall um 4) und dieser dann mit dem Tick-Wert der in einem Array gespeicherten Noten verglichen und dementsprechend dann drauf reagiert.
Da das Ganze jedoch recht umständlich und nicht ganz genau ist, würde ich gern einen anderen Weg gehen.
Meine Idee ist es eigentlich einen Listener an den Abspieler, also an den Sequencer, zu hängen, der mir bescheid gibt wenn ein Event beim Abspielen der Midi-Datei aufgetreten ist. Jedoch habe ich da nur die Möglichkeiten einen ControllerEventListener oder einen MetaEventListener anzumelden. Diese scheinen mich jedoch beide nicht weiter zu bringen.
Dann hatte ich mir gedacht, dass es vielleicht funktioniert, wenn ich eine Brücke über Transmitter und Receiver baue, aber auch an die kann ich keinen Listener anmelden.
Übersehe ich etwas? Würde mich freuen, wenn mir da jemand weiterhelfen könnte.