在OS X,C ++中播放MIDI

时间:2010-02-19 23:37:54

标签: c++ macos midi

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

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

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

我想使用CoreMIDI,因为它似乎可能是最简单的,但多平台的东西将是一个奖励。

非常感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

另一个选项是rtmidi

它的目标是简单和跨平台

我使用类似的rtaudio进行实时音频i / o,并且它相对容易使用。

您应该能够使用示例代码列出所有midi设备,然后选择GM库,并在您选择带有程序更改消息的钢琴后发送相应的MIDI消息(音符开/关消息)。维基百科有helpful page开始使用

答案 1 :(得分:0)

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

要执行您要执行的操作,您可以使用以下内容修改我提供的示例项目:

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

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