你如何在 java 中访问 MIDI IN 流中的数据?
Posted
技术标签:
【中文标题】你如何在 java 中访问 MIDI IN 流中的数据?【英文标题】:How do you access data from MIDI IN stream in java? 【发布时间】:2013-09-17 13:54:12 【问题描述】:我想利用来自设备中 MIDI 的数据。当某些事件发生时,我需要得到通知,以便我可以做一些事情,比如即时转置某些音符或调用方法或任何你能想到的东西。
虽然我对一般的编程特别是对 java 还是很陌生,但我已经能够使用 javax.sound.midi 使用音序器播放序列。我什至可以添加一个侦听器,告诉我音序器何时播放某些事件。现在我希望能够用 MIDI IN 流做类似的事情,但我不知道怎么做。
欢迎任何想法或解决方法,因为我现在很困惑。
【问题讨论】:
显示代码。如果您解释您遇到的问题,我们会提供帮助... 这就是我什至不知道从哪里开始的问题。使用 Sequencer 接口,这一切都非常简单,因为您可以使用 addControllerEventListener() 或 addMetaEventListener() 作为在定序器播放指定消息时的触发器。不幸的是,这些方法不适用于 Sequencer 以外的设备。 您提出了一些非常有趣和独特的问题。如果您可以发布您拥有或可以找到的任何相关代码,您可能会成功。尝试将问题缩小到非常具体的问题。我希望看到 SO 社区帮助您实现目标。 【参考方案1】:要录制 MIDI 数据,您必须
通过调用setReceiver
方法将输入端口的Transmitter
连接到您的Sequencer
的Receiver
,
创建新的Sequence
/Track
对象,并将它们连接到Sequencer
,
在您的曲目上启用录音,并且
开始在您的 Sequencer
上录制。
(见documentation)
【讨论】:
感谢您的努力,但这也不是我的意思。我知道我在解释自己方面做得很糟糕,尤其是作为一名音乐家而不是程序员。【参考方案2】:我终于找到了解决方案,我想澄清这个问题并添加我的解决方案,以防它对其他人有帮助。
我正在从事的项目(顺便说一句,这超出了我的想象)是一个 MIDI 键盘编曲器。如果您不知道它是什么,它是一个键盘,可以演奏模式(风格)并根据演奏的和弦改变音调和排列。我需要的是我认为从端口中的 midi 转储的东西,这样我的程序就可以找出播放的和弦,以便它可以让音序器以不同的方式响应。
因此,要回答我自己的原始问题,您需要为您的 midi in 端口创建一个新的发射器。然后创建一个新的接收器来接收来自新发射器的数据流。最后让接收方将数据发送到 PrintStream,然后你就可以对数据流做你想做的事了!
【讨论】:
【参考方案3】:在您自己的类中实现 javax.sound.midi.Receiver 接口的 send(javax.sound.midi.ShortMessage, long) 方法,并像使用其他 Receiver 对象一样使用后者的实例。
【讨论】:
以上是关于你如何在 java 中访问 MIDI IN 流中的数据?的主要内容,如果未能解决你的问题,请参考以下文章