我们知道没有用于录制OS X(输出声音)的实时流媒体音频的API。我们应该安装像SoundFlower这样的内核扩展,然后通过内核扩展记录输出通道的音频。
我知道像Audacity这样的开源应用程序使用Port Audio库来捕获除系统默认音频设备之外的其他音频设备的音频。但是我无法编译Port Audio,因为在Xcode上构建它时会出现太多错误。
我想知道有一个直接的Core Audio API,它有能力选择录制设备吗? AudioQueue API无法确定记录设备的类型。 如何使用某些特定的Mac提供的API记录在目标C中通过SoundFLower播放的输出声音?
提前感谢您的回复。
答案 0 :(得分:0)
这是SoundFlowerBed中用于查找和选择特定音频设备的相关代码:
/* From Interface */
AudioDeviceID mSoundflower2Device;
AudioDeviceID mSoundflower16Device;
/* Implementation */
// find soundflower devices, store and remove them from our output list
AudioDeviceList::DeviceList &thelist = mOutputDeviceList->GetList();
int index = 0;
for (AudioDeviceList::DeviceList::iterator i = thelist.begin(); i != thelist.end(); ++i, ++index) {
if (0 == strcmp("Soundflower (2ch)", (*i).mName)) {
mSoundflower2Device = (*i).mID;
AudioDeviceList::DeviceList::iterator toerase = i;
i--;
thelist.erase(toerase);
}
else if (0 == strcmp("Soundflower (16ch)", (*i).mName)) {
mSoundflower16Device = (*i).mID;
AudioDeviceList::DeviceList::iterator toerase = i;
i--;
thelist.erase(toerase);
}
else if (0 == strcmp("Soundflower (64ch)", (*i).mName)) {
mSoundflower16Device = (*i).mID;
AudioDeviceList::DeviceList::iterator toerase = i;
i--;
thelist.erase(toerase);
}
}
您需要在此处下载源表单:https://github.com/mattingalls/Soundflower并在项目中包含AudioDevice和AudioDeviceList文件。