如何从java中的MIDI IN流中访问数据?

时间:2013-09-17 13:54:13

标签: java midi javax.sound.midi midi-instrument

我想利用来自MIDI设备的数据。我需要在发生某些事件时收到通知,以便我可以做一些事情,例如动态调换某些音符或调用方法或任何你能想到的事情。

虽然我对编程很新,特别是java,但我已经能够使用javax.sound.midi在序列器中播放序列了。我甚至可以添加一个监听器,告诉我什么时候顺控器播放某些事件。现在我希望能够用MIDI IN流做类似的事情,但我不知道怎么做。

任何想法或变通办法都会受到欢迎,因为我现在很困惑。

3 个答案:

答案 0 :(得分:0)

要录制MIDI数据,您必须

  • 通过调用Transmitter方法将输入端口Sequencer连接到Receiver的{​​{1}},
  • 创建新的setReceiver / Sequence个对象,并将它们连接到Track
  • 在您的音轨上启用录音,
  • 开始在Sequencer上录制。

(参见documentation

答案 1 :(得分:0)

我终于找到了解决方案,我想澄清问题并添加我的解决方案以防其他人有用。

我正在研究的项目(顺便说一下,这是我的头脑)是midi键盘编曲。如果您不知道它是什么,它是一个键盘,可以播放模式(样式)并根据所演奏的和弦改变音调和排列。我需要的是我认为从端口midi中调用的转储,以便我的程序可以找出弹奏的和弦,以便它可以让音序器以不同的方式响应。

所以要回答我自己的原始问题,你需要为你的midi端口创建一个新的发射器。然后创建一个新接收器以接收来自新发射器的数据流。最后让接收器将数据发送到PrintStream,然后您可以使用数据流执行所需的操作!

答案 2 :(得分:0)

在您自己的类中实现javax.sound.midi.Receiver接口的send(javax.sound.midi.ShortMessage,long)方法,并像使用其他Receiver对象一样使用后者的实例。 / p>