gpt4 book ai didi

objective-c - 音频队列 |在 audioQueue 运行时更改音频设备

转载 作者:行者123 更新时间:2023-12-02 05:47:08 24 4
gpt4 key购买 nike

我正在使用音频队列在 OSX 上播放和录制 | Mac 并有一个用例,
就像,用户可以在音频队列运行用于播放或录制时更改音频设备(输入和输出),

这就是我到目前为止所做的,

OSStatus result = noErr;

// get the device list
AudioObjectPropertyAddress thePropertyAddress = { kAudioHardwarePropertyDefaultOutputDevice, kAudioObjectPropertyScopeGlobal,
kAudioObjectPropertyElementMaster };
UInt32 thePropSize;

CFStringRef theDeviceName;

// get the device name
thePropSize = sizeof(CFStringRef);
thePropertyAddress.mSelector = kAudioObjectPropertyName;
thePropertyAddress.mScope = kAudioObjectPropertyScopeGlobal;
thePropertyAddress.mElement = kAudioObjectPropertyElementMaster;

// get the name of the device
result = AudioObjectGetPropertyData( (AudioObjectID)input,
&thePropertyAddress, 0, NULL, &thePropSize, &theDeviceName);

if ( result != noErr){
log("Error while getting property");
return;
}

// get the uid of the device
CFStringRef theDeviceUID;
thePropertyAddress.mSelector = kAudioDevicePropertyDeviceUID;
result = AudioObjectGetPropertyData( (AudioObjectID)input,
&thePropertyAddress, 0, NULL, &thePropSize, &theDeviceUID);

try{
XThrowIfError(AudioQueueSetProperty(mQueue,kAudioQueueProperty_CurrentDevice,&theDeviceUID, sizeof(CFStringRef)),"set input device");
}
catch (CAXException e) {

char buf[256];
fprintf(stderr, "Error: %s (%s)\n", e.mOperation, e.FormatError(buf));
}

但它抛出异常kAudioQueueErr_InvalidRunStatereference说队列运行时无法完成;

还有其他方法可以达到同样的效果吗?

最佳答案

不幸的是,没有任何其他方法可以实现这一点(AudioQueue 的功能太少了)。您需要首先停止音频队列,然后更改其属性,最后重新启动它。

关于objective-c - 音频队列 |在 audioQueue 运行时更改音频设备,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20051529/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com