Jython/Java使用javax.sound.midi.*与usb midi设备通信。(利维仪器)
我正在尝试使用javax.sound包中的midi类与usb midi控制器通信。我成功地从设备获取了输入,但我无法确定如何与设备通信。 这个装置是青灰色的。 根据wiki的说法,我应该发送一些SysEx消息以获得带有参数的响应。我以前没有使用java库,所以可能我用错了。您将看到下面的方法从设备请求一些数据,但设备不会对任何系统消息做出响应 伪代码Jython:Jython/Java使用javax.sound.midi.*与usb midi设备通信。(利维仪器),java,jython,midi,javax.sound.midi,jython-2.7,Java,Jython,Midi,Javax.sound.midi,Jython 2.7,我正在尝试使用javax.sound包中的midi类与usb midi控制器通信。我成功地从设备获取了输入,但我无法确定如何与设备通信。 这个装置是青灰色的。 根据wiki的说法,我应该发送一些SysEx消息以获得带有参数的响应。我以前没有使用java库,所以可能我用错了。您将看到下面的方法从设备请求一些数据,但设备不会对任何系统消息做出响应 伪代码Jython: class Communicator: def __init__(self): self.outputs = []
class Communicator:
def __init__(self):
self.outputs = []
self.inputs = []
self.input = None
self.output = None
def getMidiDevices(self):
devices = MidiSystem.getMidiDeviceInfo()
for dev in devices:
midi = MidiSystem.getMidiDevice(dev)
# get outputs
if midi.getMaxReceivers() != 0: #(-1 or positive)
self.outputs.append(dev)
if midi.getMaxTransmitters() != 0:
self.inputs.append(dev)
def openOutput(self, dev): #!right device resolved somewhere
self.output = MidiSystem.getMidiDevice( dev )
self.output.open()
def openInput(self, dev):
self.input = MidiSystem.getMidiDevice( dev )
inReceiver = SomeReciever()
self.input.getTransmitter().setReceiver(inReceiver)
self.input.open() #input open and receiver print messages from dev.
def requestDevice(self):
device = self.resolveOutput()
self.openOutput(device)
data = [240, 0, 1, 97, 0, 7, 8, 247]
_bytes = bytearray(b"")
for i in data: _bytes.append(i)
# create message from array
message = SysexMessage(str(_bytes), len(_bytes)) # it works correctly
self.output.getReceiver().send(message,-1L)
self.output.close()
communacate = Communicator()
communacate.openInput()
time.sleep(2)
communicate.requestDevice()
当我打开输入时,receiver类处理传入的midi消息。
当我请求设备时,我看不到来自设备的任何响应,我希望它出现在输入接收器上。我请求所有可用的输出端口,甚至在任何情况下都在输入接收器上发送消息。我还用java复制了它,得到了同样的结果。我想我用了错误的方法从设备上得到响应
非常感谢,
Anton我是否成功地从设备获取了输入?参考此Java代码?不,在Java中,我只尝试在midi输出上发送sysex消息。