我正在使用 asoundlib 在 C++ 中编写 MIDI 音序器。有时我希望我的应用程序停止所有声音,调用 All-Notes-Off 事件。我通过在每个通道上为每个音符调用一个音符关闭来实现这一点,因为这是我知道的唯一方法,但出于某些原因,我不太愿意一次发送 16*128=2048 个事件。还有其他方法吗?如果我可以将事件发送到控制队列,那就太完美了,有吗?如果没有,那么应该怎么做?
欢迎任何帮助,因为互联网缺少良好、详细的 ALSA 文档。
答案1
根据midi 规范速成课程你只需发送一个事件“Z”,并将所有音符关闭,解释为00 B0 7B 00
00 to indicate no time delay
B0 to send a midi control signal
7B to send an all notes off
00 does nothing (padding)
您可以在此处看到 midi 控制字节的列表:MIDI 控制器编号
祝您狩猎愉快!