在目标C中录制来自非默认音频设备的音频

时间:2014-06-15 07:52:31

标签: objective-c macos core-audio audio-recording

我们知道没有用于录制OS X(输出声音)的实时流媒体音频的API。我们应该安装像SoundFlower这样的内核扩展,然后通过内核扩展记录输出通道的音频。

我知道像Audacity这样的开源应用程序使用Port Audio库来捕获除系统默认音频设备之外的其他音频设备的音频。但是我无法编译Port Audio,因为在Xcode上构建它时会出现太多错误。

我想知道有一个直接的Core Audio API,它有能力选择录制设备吗? AudioQueue API无法确定记录设备的类型。 如何使用某些特定的Mac提供的API记录在目标C中通过SoundFLower播放的输出声音?

提前感谢您的回复。

1 个答案:

答案 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文件。