0


我正在尝试使用 javax.sound 包中的 midi 类与 USB midi 控制器通信。我成功地从设备获得了输入,但我不知道如何与设备通信。该设备是生动的OhmRGB。根据 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()

当我打开输入时,接收器类处理传入的 midi 消息。当我请求设备时,我看不到来自设备的任何响应(我希望它在输入接收器上)。我请求了所有可用的输出端口,甚至在任何情况下都在输入接收器上发送了消息。我也在java中复制了它并得到了相同的结果。我认为我使用错误的方式从设备获取响应。

非常感谢,
安东

4

0 回答 0