我发现,在MidiDevice的getTransmitters()似乎返回当前的名单 已经打开 发射器,而不是发射是 可
被打开。我相信,通过getTransmitter()方法可以打开一个新的发送器。我已经修改了您的代码以执行此操作:
import javax.sound.midi.*;import java.util.ArrayList;import java.util.List;import java.io.*; public class MidiHandler{ 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 it does, add it to the device list System.out.println(infos[i]); //get all transmitters List<Transmitter> transmitters = device.getTransmitters(); //and for each transmitter for(int j = 0; j<transmitters.size();j++) { //create a new receiver transmitters.get(j).setReceiver( //using my own MidiInputReceiver new MidiInputReceiver(device.getDeviceInfo().toString()) ); } Transmitter trans = device.getTransmitter(); trans.setReceiver(new MidiInputReceiver(device.getDeviceInfo().toString())); //open each device device.open(); //if pre gets this far without throwing an exception //print a success message System.out.println(device.getDeviceInfo()+" Was Opened"); } catch (MidiUnavailableException e) {} }}//tried to write my own class. I thought the send method handles an MidiEvents sent to itpublic 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() {} }}在我的硬件上(我插入了一个简单的USB MIDI控制器),在创建MidiHandler实例后,该代码可以正确打印出“ midi receive”。
希望这可以帮助!



