c++ - 如何在 OSX 上的 C++ 应用程序中播放合成器声音?

标签 c++ macos midi audiounit vst

我想在我的应用中播放器乐声音。声音的持续时间是灵活的,因此 MIDI 似乎是最好的解决方案。

我目前正在使用开放框架。 使用音频单元,我设法处理输入声音,而不是通过乐器演奏。 我在我的 Mac 上找到了 AUi 仪器,但我不知道如何从我的代码中访问它们。 我没有找到任何方法来播放 General Midi(内置 MIDI 乐器)。 RTMidi 未找到输出端口。

有人有解决办法吗? 谢谢!

最佳答案

我在 this 中找到了解决方案项目。

您需要使用音频单元。 添加具有此组件描述的节点:

description.componentType           = kAudioUnitType_MusicDevice;
description.componentSubType        = kAudioUnitSubType_DLSSynth;
description.componentManufacturer   = kAudioUnitManufacturer_Apple;
description.componentFlags          = 0;
description.componentFlagsMask      = 0;
AUGraphAddNode (graph, &description, &synthNode);

打开并初始化您的音频单元并像这样播放音符:

MusicDeviceMIDIEvent (synthUnit, channel, note, velocity, 0);

关于c++ - 如何在 OSX 上的 C++ 应用程序中播放合成器声音?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18282801/

相关文章:

c++ - 如何避免模板类中typedef的重新定义?

c++ - 在数组中的对象上使用 delete []

ios - 是否可以创建自定义核心数据持久存储协调器?

java - 如果java中的MIDI不是用来播放歌曲的话,它的用途是什么

java - 如何将 Java midi 连接到其他应用程序

c++ - 在 C++ 中逐 block 迭代二维数组

c++ - Qt C++ : Include all library files in project folder

mysql - 使用 homebrew 安装 MySQL 是否包括 Workbench 和 GUI(是否首选安装 native )?

java - JFrame repaint() 和 revalidate() 仅在 Mac 操作系统上调整窗口大小时更新

swift - Audiokit Midi 多个虚拟端口