私は自分のシンセサイザーをjavaで設計しましたが、今はMIDIキーボードと接続したいと思っています。下のクラスは、送信機を持つすべてのMIDIデバイスを検索します。それは正常に私のMIDIキーボードを見つける。私は可能なすべてを拾う必要があるように、各デバイスの各トランスミッタに自分のレシーバを追加します。すべてのヘルプドキュメントとjavaドキュメントを読むことから、TransmitterがMidiEventをReceiverに送信し、Receiverがsendメソッドでそれらを処理することが分かりました。だから私はReceiverを実装している自分自身の内部クラスを書き、sendメソッドで何も検出されなかったかどうかを確認するためにprintlnステートメントを使用しました。しかし、何も拾われません。このような単純なことをするのにはほとんど役に立たないようです。すべてのヘルプファイル、javadoc、フォーラムを見てきました。私は何とか見逃してしまったことが本当に明白なものでなければならないと確信しています。Javaキーボードからの入力を取得する
私のシンセサイザをインターフェイスシンセサイザと混同してはいけません。これはMIDIミキサーではありません。それは、合成アルゴリズムを使用し、再生方法を有する。基本的には、再生方法を呼び出す予定のノートをMIDIキーボードに送信するだけです。
import javax.sound.midi.*;
import java.util.ArrayList;
import java.util.List;
import java.io.*;
public class MidiHandler
{
//ArrayList of MidiDevices
private ArrayList<MidiDevice> devices = new ArrayList<MidiDevice>();
public MidiHandler()
{
MidiDevice device;
MidiDevice.Info[] infos = MidiSystem.getMidiDeviceInfo();
for (int i = 0; i < infos.length; i++) {
try {
device = MidiSystem.getMidiDevice(infos[i]);
//does the device have any transmitters?
if (device.getTransmitters().size() > 0) {
//if it does, add it to the device list
System.out.println(infos[i] + ": " + device.getTransmitters().size());
devices.add(device);
}
} catch (MidiUnavailableException e) {}
}
//if any transmitting devices were found
if(devices.size()>0) {
//for each device
for(int i = 0; i<devices.size(); i++) {
try {
//get all transmitters
List<Transmitter> transmitters = devices.get(i).getTransmitters();
//and for each transmitter
for(int j = 0; j<transmitters.size();j++) {
//create a new receiver
transmitters.get(i).setReceiver(
//using my own MidiInputReceiver
new MidiInputReceiver(devices.get(i).getDeviceInfo().toString())
);
}
//open each device
devices.get(i).open();
//if code gets this far without throwing an exception
//print a success message
System.out.println(devices.get(i).getDeviceInfo()+" Was Opened");
} catch (MidiUnavailableException e) {}
}
}
}
//tried to write my own class. I thought the send method handles an MidiEvents sent to it
public class MidiInputReceiver implements Receiver {
public String name;
public MidiInputReceiver(String name) {
this.name = name;
}
public void send(MidiMessage msg, long timeStamp) {
System.out.println("midi received");
}
public void close() {}
}
}
注:Java MIDI - getting data from piano?:私はすでにこれを見てきました 。
と、この:http://www.jsresources.org/examples/MidiInDump.html
インターフェース・シーケンサは、私も欲しいもののために複雑に道を見ました。
大変ありがとうございます!これは動作し、あまり複雑でないコードです。 – Jonathan