Jython/Java使用javax.sound.midi.*与usb midi设备通信。(利维仪器)

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 = []

我正在尝试使用javax.sound包中的midi类与usb midi控制器通信。我成功地从设备获取了输入,但我无法确定如何与设备通信。 这个装置是青灰色的。 根据wiki的说法,我应该发送一些SysEx消息以获得带有参数的响应。我以前没有使用java库,所以可能我用错了。您将看到下面的方法从设备请求一些数据,但设备不会对任何系统消息做出响应

伪代码Jython:

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消息。