【问题标题】:MIDI Song with CC带有 CC 的 MIDI 歌曲
【发布时间】:2012-02-02 18:24:42
【问题描述】:

关注此 Midi 播放器并希望添加自定义控件 (CC) 以使用 ShortMessage 将通道 0 和 1 的音量降低到 10%: http://www.jsresources.org/examples/MidiPlayer.html

我发现它并没有在 MIDI 歌曲开始播放后立即降低音量。

ShortMessage volMessage = new ShortMessage();
  for(int i=0;i<2;i++) {
    try{
      volMessage.setMessage(ShortMessage.CONTROL_CHANGE,i, 7, 10);
    } catch(InvalidMidiDataException e) {}
      midiReceiver.send(volMessage,-1); 
    }

有人用 ShortMessage 控制 MIDI 通道吗?

【问题讨论】:

标签: java midi


【解决方案1】:

您正试图在 catch 块中结束消息 - 它应该紧跟在 try 块中的 .setMessage() 调用之后!

【讨论】:

  • 我试图将 midiReceiver.send 放在 setMessage 之后,但仍然无法正常工作。
  • 这首歌很可能包含一些 CC7 消息,这些消息在您发送的消息之后才生效。
  • 如果您可以测试示例代码,我可以提出请求吗?
【解决方案2】:

只有当乐器符合GM (General MIDI) standard 时,MIDI CC 7 才会作为音量控制。如果你想控制音量,你应该在带有渲染音频输出的混音器中进行。

另外,如果我没记错的话,第二个数据字节是 0-127 之间的值,而不是 0-100。所以如果你想要 10% 的音量,那将是 12 或 13 的值。;)

【讨论】:

  • 实际上,根据我的经验,大多数仪器都能识别 CC7,即使它们与 GM 不兼容。我很确定 CC7 用于批量的约定早于 GM 标准。
  • 你在第二点上基本上是对的,只是对音量的感知并不是真正的线性比例。
  • 是的,CC7 是正在查看的每个通道的音量。我不确定为什么它不起作用,你能用这个例子试试我的代码吗?它以另一种方式工作(不使用上面的示例),但我需要在序列开始后使用睡眠功能,这在某些情况下会引入竞争条件,这是一个坏主意。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-29
  • 2021-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多