Ich habe ein Java-Projekt geerbt, das eine alte C ++ - DLL verwendet, um MIDI-Daten von einem mit dem Computer verbundenen Piano zu empfangen .
Nun, da Java integrierte Unterstützung für MIDI-Geräte hat, möchte ich die ältere C ++ - DLL loswerden und einfach reines Java verwenden. Unterstützt Java das Empfangen von Daten von einem mit dem Computer verbundenen Piano? Ich habe Google ohne Erfolg nach Beispielen durchsucht.
Ja, die JavaSound-API kann zum Lesen von MIDI-Daten von einem MIDI-Gerät verwendet werden.
JFugue ist eine Java-API für die Musikprogrammierung, die die JavaSound-API verwendet und die Interaktion mit JavaSound vereinfachen kann. In JFugue 5.x ist der Beispielcode für 10 Sekunden MIDI-Daten von einem MIDI-Gerät wie folgt:
%Vor%Sie können auch mit dem Hören eines Geräts beginnen und aufhören:
%Vor%Wenn Sie nur mit der MIDI-API von Java (javax.sound.midi. *) aufnehmen möchten, ist dies sehr einfach. Dies ist kein Code zum Kopieren und Einfügen, aber es sollte Ihnen helfen, mit der Programmierung Ihres eigenen MIDI-Recorders zu beginnen, was eigentlich ziemlich einfach ist.
Der erste Schritt besteht darin, Ihre Eingabe und Ausgabe MidiDevice zu definieren. Also zuerst müssen Sie eine Liste von IO-Möglichkeiten finden und eine GUI erstellen, in der Sie das Eingabe- und Ausgabegerät für Ihre MIDI-Aufnahme und Wiedergabe auswählen können.
%Vor%Es gibt also eine Liste Ihrer MIDI-Geräte. Als nächstes möchten Sie ein MIDI-Gerät auswählen, zum Beispiel können Sie die Indizes im Infos-Array auswählen.
%Vor%Sie werden auch einige Globals angeben wollen: Sequenzer, Sender und Empfänger.
%Vor%Jetzt gibt es einen Aufnahmeknopf, den Sie verwenden möchten.
%Vor%Vorsicht , dieser Code kann MidiUnavailableExceptions auslösen und Sie sollten die close-Methoden für alle Dinge aufrufen, die Sie in einer finally-Anweisung geöffnet haben.
Aber das ist nur der Kern dessen, wie der Code aussehen sollte. Es zeichnet alles auf die Sequenz seq
auf, sobald Sie die Methode sequencer.startRecording()
aufrufen.
Dann möchten Sie die Aufnahme stoppen und in der Lage sein, die Sequenz als MIDI in eine Datei zu speichern oder eine Wiedergabe zu machen. Dies könnte beispielsweise Code sein, wenn Sie auf die Schaltfläche "Aufnahme stoppen" oder etwas drücken.
%Vor%Auch die Track-Klasse (eine Sequenz kann mehrere Spuren enthalten) enthält die eigentlichen Eingabedaten, auf die Sie einfach mit einer get-Methode zugreifen können. Die Track-Klasse besteht aus MidiEvents. Zum Beispiel ist die Spur:
%Vor%Und jedes MidiEvent hat einen bestimmten Zeitstempel, der in MIDI Ticks ausgedrückt wird, so dass Sie das Tempo leicht ändern können, indem Sie die Anzahl der Ticks pro Sekunde erhöhen oder verringern.
Das schwierigste Problem hier ist, dass MidiEvents in Byte-Code ausgedrückt werden, daher müssen Sie ein Referenz-Byte-Codeblatt verwenden, das Ihnen mitteilt, welches Byte für welche Aktion steht. Dies sollte Sie damit beginnen: Ссылка
Hier ist ein Beispiel für reines Java, das auf einen MIDI-Port hört und das empfangene Event auf die Konsole überträgt . Sie sollten damit arbeiten können. :)