C++ 中的 MIDI 音符消息

Posted

技术标签:

【中文标题】C++ 中的 MIDI 音符消息【英文标题】:MIDI Note Message in C++ 【发布时间】:2015-06-07 15:39:51 【问题描述】:

我正在尝试使用 C++ 制作一个软件,该软件在按下某个 MIDI 键时播放 .wav 音频样本。我想到的最好方法是使用if 语句(如果有更简单的方法,我将不胜感激,但我是编程新手,所以请保持简单)。

上网查了一下,发现不同的 MIDI 键对应不同的 NOTE ON 信息(例如 NOTE ON 60 对应中间 C),所以基本上我只是在寻找如何说“当 NOTE ON 60 收到,播放 X .wav 文件”。我还发现 NOTE ON 的状态是 9n,这是否意味着计算机会收到 9x60(使用 60 = Middle C 示例)?

在此之后,我只需要了解如何使用sndfile.h 播放音频样本,我相信如下:

SNDFILE *sndFile = sf_open("Sample1.wav").

任何帮助将不胜感激。

【问题讨论】:

这里的问题是你的英语有点不对劲。实际上你的意思是"when NOTE ON 60 is received, play X .wave file" 并且“when”与“if”有很大不同,至少在C++ 编程。因此,这是一个广泛的问题。 嗯,好的,我现在编辑一下。 【参考方案1】:

你可以使用 PortAudio 它拥有您可以使用 midi 和您的波形文件的所有内容

【讨论】:

啊太棒了!我将如何使用 PortAudio 编写“收到 NOTE ON 60 时,播放 X .wav 文件”的代码?非常感谢您的回复!【参考方案2】:

您可以使用 portAudio 实现流功能,并使用 portMidi 检查当按下例如音符 c4 时,播放该文件 看看那里的文档

【讨论】:

以上是关于C++ 中的 MIDI 音符消息的主要内容,如果未能解决你的问题,请参考以下文章

在 Java 中读取 MIDI 消息:缺少音符关闭事件?

MIDI,如何获取小节和音符

如何从 MIDI 序列中获取 Note On/Off 消息?

C++ 在音符中转换 MIDI 音符 ID

读取 MIDI 文件

在 Java 中从 Receiver 获取 midi 消息