我一整天都在喋喋不休,阅读我能找到的所有内容,遵循JDK源代码,没有好运找到关于如何获取midi设备上的数据以及确定什么是什么的关于HOW或WHERE的详细信息.
我试图通过我的NI Audio 8 DJ MIDI IN
端口捕获midi消息,但是,java并没有"看到"MIDI IN端口,只有out,我已成功用于发送midi.我也可以使用M-Audio USB UNO midi设备获得相同的结果:MidiSystem.getMidiDeviceInfo()
只"看到"输出端口.
我已经验证了MIDI IN端口的操作:
amidi -p hw:2,0 -d
并发送一些信号.工作良好.
getMaxTransmitters()
返回零.
MidiSystem.getMidiDeviceInfo()
仅显示两个设备的一个条目:Audio8DJ [hw:2,0]
或Interface [hw:2,0]
下面的代码适用于接收器,我认为只有我需要验证getTransmitter()
抓取端口的位,因为它只适用于另一个并且一切正常,我得到一个MidiUnavailableException/Transmitter不可用的异常.
我甚至把getMaxReceivers()
陷阱拿走了,因为我只是试图看看设备是否只提供了一个条目并将其整理出来,但没有.
public static Transmitter getMidiIn () { if (midiIn == null){ devices = MidiSystem.getMidiDeviceInfo(); for(MidiDevice.Info info: devices){ System.out.println("device class " + info.getClass()); MidiDevice device; try{ device = MidiSystem.getMidiDevice(info); if (info.toString().equals("Audio8DJ [hw:2,0]")){ if (device.getMaxTransmitters() != 0){ try{ device.open(); System.out.println("max transmitters:" + device.getMaxTransmitters()); midiIn = device.getTransmitter(); System.out.println("Found a transmitter: "+ midiIn); break; } catch (Exception e){ e.printStackTrace(); } } } } catch (MidiUnavailableException e1){ e1.printStackTrace(); } } } return midiIn; }
所以让我来到这里的是:alsa只列出一个条目amidi -l
,当我指定作为转储端口时,它工作正常.Java获取相同的文本条目并且无法对MIDI IN进行排序,将其分配给com.sun.media.sound.MidiOutDeviceProvider
类,因此它让我想知道Java是如何做到的,或者Java在哪里找出设备必须提供的内容以及为什么它没有看到输入alsa正在看的港口.
我正在使用带有JDK1.6的eclipse版本:3.8.1 IDE进行编码,在Linux薄型操作系统上.
我很乐意提供任何要求.谢谢阅读!