現在、ピアノのミッドポートをコンピュータに接続しようとしています。 私はそれについて見つけ出すことができるすべてを読んだが、何とか何かが欠けているので、ここの誰かが私を助けてくれることを願っています。私は今一週間これをやろうとしており、本当にイライラしています。まあJavaでMidiDeviceにアクセスする
public class MidiDeviceGetter {
public MidiDeviceGetter() {}
public static void listTransmitterDevices() throws MidiUnavailableException {
MidiDevice.Info[] infos = MidiSystem.getMidiDeviceInfo();
for (int i = 0; i < infos.length; i++) {
MidiDevice device = MidiSystem.getMidiDevice(infos[i]);
if (device.getMaxTransmitters() != 0)
System.out.println(device.getDeviceInfo().getName().toString()
+ " has transmitters");
}
}
// should get me my USB MIDI Interface. There are two of them but only one
// has Transmitters so the if statement should get me the one i want
public static MidiDevice getInputDevice() throws MidiUnavailableException {
MidiDevice.Info[] infos = MidiSystem.getMidiDeviceInfo();
for (int i = 0; i < infos.length; i++) {
MidiDevice device = MidiSystem.getMidiDevice(infos[i]);
if (device.getMaxTransmitters() != 0
&& device.getDeviceInfo().getName().contains("USB")) {
System.out.println(device.getDeviceInfo().getName().toString()
+ " was chosen");
return device;
}
}
return null;
}
public static void main(String[] args) throws MidiUnavailableException,
IOException {
MidiDevice inputDevice;
// MidiDeviceGetter.listTransmitterDevices();
inputDevice = MidiDeviceGetter.getInputDevice();
// just to make sure that i got the right one
System.out.println(inputDevice.getDeviceInfo().getName().toString());
System.out.println(inputDevice.getMaxTransmitters());
// opening the device
System.out.println("open inputDevice: "
+ inputDevice.getDeviceInfo().toString());
inputDevice.open();
System.out.println("connect Transmitter to Receiver");
// Creating a Dumpreceiver and setting up the Midi wiring
Receiver r = new DumpReceiver(System.out);
Transmitter t = inputDevice.getTransmitter();
t.setReceiver(r);
System.out.println("connected.");
System.out.println("running...");
System.in.read();
// at this point the console should print out at least something, as the
// send method of the receiver should be called when i hit a key on my
// keyboard
System.out.println("close inputDevice: "
+ inputDevice.getDeviceInfo().toString());
inputDevice.close();
System.out.println(("Received " + ((DumpReceiver) r).seCount
+ " sysex messages with a total of "
+ ((DumpReceiver) r).seByteCount + " bytes"));
System.out.println(("Received " + ((DumpReceiver) r).smCount
+ " short messages with a total of "
+ ((DumpReceiver) r).smByteCount + " bytes"));
System.out.println(("Received a total of "
+ (((DumpReceiver) r).smByteCount +
((DumpReceiver) r).seByteCount) + " bytes"));
}
}
、私がこれまで持っているものthatsの。私はちょうどそこに行くことができるようにピアノを接続したいと思ったが、私が言ったように、私はそれを働かせることはできません。
私はDumpReceiverクラスを http://www.jsresources.org/examples/DumpReceiver.java.htmlから取得しました。
ご協力いただき、ありがとうございます。
P .:私の英語では申し訳ありませんが、私は母国語ではありません。
EDIT1:コメントによると:
私は私が System.in()が実行されている間、キーを押したときにプログラムの開発は、コンソールで何かを印刷することを期待Receiverの送信中(Midimessage、長い)ので、最後の行はPrinstream.print(midimsg)です。 Receiverが接続されているTransmitterでノートが再生されている場合は、Receiverインターフェイスクラスのsendメソッドが常に呼び出されると考えていますか? それだけではうまくいかない場合は、それを把握することができますが、ヒットしたキーの数を保存する必要がある受信側のメンバー変数もありますが、これらのメンバー変数は常にnullです。だから私の主な問題は、sendメソッドが呼び出されないことです。 私の主な問題点を明確にしたいと思います。
Edit2:この「JavaでのMIDIプログラミング」の中に重大な間違いがない場合は、教えてください。私はちょうどSteinbergs CubaseでMidisignalsを取得できないことを知りました。おそらく今回は、問題は画面の前ではなかった。
* "私はそれを働かせることができません" *たぶんストライキ、または眠い、または単に平凡な怠け者です。第一に、交渉する。第二に、それは良い夜の休息を与え、朝にそれを試してください。 3日目は、ニンジン&スティックのアプローチを試してみてください。何か他には、1)何が起こると予想されたか2)実際に何が起こったか、そして実用性について3)なぜあなたは(1)が起こることを期待したのかを説明してください。また、早くより良い助けを得るために、[SSCCE](http://sscce.org/)を投稿してください。 –