【问题标题】:How do you access data from MIDI IN stream in java?你如何在 java 中访问 MIDI IN 流中的数据?
【发布时间】:2013-09-17 13:54:12
【问题描述】:

我想利用来自设备中 MIDI 的数据。当某些事件发生时,我需要得到通知,以便我可以做一些事情,比如即时转置某些音符或调用方法或任何你能想到的东西。

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

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

【问题讨论】:

  • 显示代码。如果您解释您遇到的问题,我们会提供帮助...
  • 这就是我什至不知道从哪里开始的问题。使用 Sequencer 接口,这一切都非常简单,因为您可以使用 addControllerEventListener() 或 addMetaEventListener() 作为在定序器播放指定消息时的触发器。不幸的是,这些方法不适用于 Sequencer 以外的设备。
  • 您提出了一些非常有趣和独特的问题。如果您可以发布您拥有或可以找到的任何相关代码,您可能会成功。尝试将问题缩小到非常具体的问题。我希望看到 SO 社区帮助您实现目标。

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


【解决方案1】:

要录制 MIDI 数据,您必须

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

(见documentation

【讨论】:

  • 感谢您的努力,但这也不是我的意思。我知道我在解释自己方面做得很糟糕,尤其是作为一名音乐家而不是程序员。
【解决方案2】:

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

我正在从事的项目(顺便说一句,这超出了我的想象)是一个 MIDI 键盘编曲器。如果您不知道它是什么,它是一个键盘,可以演奏模式(风格)并根据演奏的和弦改变音调和排列。我需要的是我认为从端口中的 midi 转储的东西,这样我的程序就可以找出播放的和弦,以便它可以让音序器以不同的方式响应。

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多