我想利用来自设备中 MIDI 的数据。当某些事件发生时,我需要得到通知,以便我可以做一些事情,比如即时转调某些音符或调用方法或任何你能想到的东西。
虽然我对一般编程特别是 java 还是很陌生,但我已经能够使用 javax.sound.midi 使用音序器播放序列。我什至可以添加一个侦听器,告诉我音序器何时播放某些事件。现在我希望能够用 MIDI IN 流做类似的事情,但我不知道怎么做。
欢迎任何想法或解决方法,因为我现在很困惑。
我想利用来自设备中 MIDI 的数据。当某些事件发生时,我需要得到通知,以便我可以做一些事情,比如即时转调某些音符或调用方法或任何你能想到的东西。
虽然我对一般编程特别是 java 还是很陌生,但我已经能够使用 javax.sound.midi 使用音序器播放序列。我什至可以添加一个侦听器,告诉我音序器何时播放某些事件。现在我希望能够用 MIDI IN 流做类似的事情,但我不知道怎么做。
欢迎任何想法或解决方法,因为我现在很困惑。
在您自己的类中实现 javax.sound.midi.Receiver 接口的 send(javax.sound.midi.ShortMessage, long) 方法,并像使用其他 Receiver 对象一样使用后者的实例。
我终于找到了解决方案,我想澄清这个问题并添加我的解决方案,以防它对其他人有帮助。
我正在从事的项目(顺便说一句,这超出了我的想象)是一个 MIDI 键盘编曲器。如果您不知道它是什么,它是一个键盘,可以演奏模式(风格)并根据演奏的和弦改变音调和排列。我需要的是我认为从端口中的 midi 转储的东西,这样我的程序就可以找出播放的和弦,以便它可以让音序器以不同的方式响应。
因此,要回答我自己的原始问题,您需要为您的 midi in 端口创建一个新的发射器。然后创建一个新的接收器来接收来自新发射器的数据流。最后让接收者将数据发送到 PrintStream,然后您就可以对数据流做您想做的事情了!
要录制 MIDI 数据,您必须
Transmitter
到您Sequencer
的端口,Receiver
setReceiver
Sequence
/Track
对象,并将它们连接到Sequencer
,Sequencer
.(见文档)