如何在 java 中访问来自 MIDI IN 流的数据



我想利用来自设备中 MIDI 的数据。当某些事件发生时,我需要收到通知,以便我可以执行诸如即时转置某些音符或调用方法或任何您能想到的事情。

虽然我对编程,特别是Java很陌生,但我已经能够使用javax.sound.midi使用音序器播放序列。我甚至可以添加一个侦听器,告诉我某些事件何时由音序器播放。现在我希望能够用 MIDI IN 流做类似的事情,但我不知道怎么做。

欢迎任何想法或解决方法,因为我现在很困。

要录制 MIDI 数据,您必须

    通过调用输入端口的
  • setReceiver方法将输入端口的Transmitter连接到SequencerReceiver
  • 创建新的Sequence/Track对象,并将它们连接到Sequencer
  • 在您的轨道上启用录制,以及
  • 开始在您的Sequencer上录制。

(请参阅文档)

我终于找到了解决方案,我想澄清这个问题并添加我的解决方案,以防它对其他人有帮助。

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

因此,要回答我自己的原始问题,您需要为您的 midi 端口创建一个新的发射器。然后创建一个新的接收器来接收来自新发射器的数据流。最后让接收器将数据发送到 PrintStream,然后您就可以对数据流做您想做的事情了!

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

最新更新