1

如何从 C++ 程序发送 MIDI 消息并让它们播放来自通用 MIDI 库的声音?

我环顾四周,似乎没有一个简单的答案,在阅读了有关 CoreMIDI 之类的长篇手册后,我的大脑开始融化。

我有一个简单的 C++ 游戏/合成器项目,我想做的就是,例如,当这个球落地时,从 Grand Piano 库触发 C4。我对大部分程序都很好,但到目前为止,完整的 MIDI 部分对我来说完全不透明。

我想使用 CoreMIDI,因为它看起来可能是最简单的,但多平台的东西会是一个奖励。

非常感谢您的帮助!

4

2 回答 2

2

另一种选择是rtmidi

它的目标是简单和跨平台

我已经将类似的 rtaudio 用于实时音频 I/O,而且它相对容易使用。

您应该能够使用示例代码列出所有 MIDI 设备,然后选择 GM 库,并在您选择带有程序更改消息的钢琴后发送适当的 MIDI 消息(音符开/关消息)。维基百科有一个有用的入门页面

于 2010-02-19T23:53:19.290 回答
0

我写了一个教程,可以帮助那些使用 CoreMIDI 遇到同样问题的人。它解释了如何使用声音字体文件中的音效读取 MIDI 文件并通过 AUGraph 输出。它还解释了如何使用虚拟端点来实时访问 MIDI 消息。在这里

要做你想做的事,你可以修改我提供的示例项目,如下所示:

result = MusicDeviceMIDIEvent ([AUSampler], midiStatus, note, velocity, 0);

其中 AUSampler 是指向 AUSampler 的指针,即 AUGraph 中的起点。您可以使用以下命令发送一个要播放的 MIDI 音符,而不是从文件中读取。

于 2012-03-22T21:05:58.533 回答