Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将midi从java程序发送到OSX上的IAC总线_Java_Macos_Midi - Fatal编程技术网

如何将midi从java程序发送到OSX上的IAC总线

如何将midi从java程序发送到OSX上的IAC总线,java,macos,midi,Java,Macos,Midi,我正在尝试编写一个程序,将MIDI信息发送到外部合成器。在Java中使用默认synth(mac上为1.8)时,它确实可以工作,并且在连接到Java中的默认合成器时,每秒都会发出一声漂亮的ping声。正如预期的那样,这是一个无聊的声音,但它确实验证了我能够制作出由合成器解释为声音的短midi序列 然后我试着将信号传送到IAC设备,这样其他程序(包括合成器)就可以接收到信号,发出有趣的声音。然而,似乎我制作的所有事件都没有被IAC设备实际拾取。它们看起来不像是在JVM之外发送的,或者如果它们是在JV

我正在尝试编写一个程序,将MIDI信息发送到外部合成器。在Java中使用默认synth(mac上为1.8)时,它确实可以工作,并且在连接到Java中的默认合成器时,每秒都会发出一声漂亮的ping声。正如预期的那样,这是一个无聊的声音,但它确实验证了我能够制作出由合成器解释为声音的短midi序列

然后我试着将信号传送到IAC设备,这样其他程序(包括合成器)就可以接收到信号,发出有趣的声音。然而,似乎我制作的所有事件都没有被IAC设备实际拾取。它们看起来不像是在JVM之外发送的,或者如果它们是在JVM之外发送的,它们也不会以某种方式被丢弃

我的问题很简单:有人这样做过吗?他们能告诉我他们做了什么吗

本质上,我的代码是这样做的:

final MidiDevice.Info[] infos = MidiSystem.getMidiDeviceInfo();
for (int i = 0; i < infos.length; i++) {
       final MidiDevice device = MidiSystem.getMidiDevice(infos[i]);

       final String  deviceInfo = device.getDeviceInfo().getName();

       // My IAC device is called "Bus 1"
       if ("Bus 1".equals(deviceInfo)) {

          Receiver rcvr = device.getReceiver()
          ShortMessage myMsg = new ShortMessage();
          // Start playing the note Middle C (60),
          // moderately loud (velocity = 93).
         myMsg.setMessage(ShortMessage.NOTE_ON, 0, 60, 93);
         rcvr.send(myMsg, timeStamp);
       }
  }
final MidiDevice.Info[]infos=MidiSystem.getMidiDeviceInfo();
for(int i=0;i
我通过将IAC设备连接到MS-20软合成器进行测试,不会产生声音。然后我将一个“MockMidi”键盘连接到“Bus1”IAC设备,然后我就可以播放MS-20总线了。然后,我尝试将MockMidi键盘作为输入设备连接到总线1,但没有看到任何事件

看起来很简单,但据我所知,当从Java发送时,IAC设备从未接收到midi消息,但该机制在Java内部和外部都运行良好

我被卡住了,所有的帮助都将得到高度赞赏(当github工作时,源代码将在github上共享(发送到IAC将视为工作)):-)

报告说:

使用此方法获取
接收器
,不会打开设备。要使用该设备,必须通过调用
open()
显式打开该设备


这就解决了问题。我爱你使用它的程序在“”中,目前它处于完全混乱状态,但是现在这个问题已经解决了,我希望有时间清理它,使它真正有用。