我让自己的应用可以选择音频输出。 (例如'系统默认'或'用户的DAC')
但是当用户从系统偏好设置面板中选择输出 - 声音时,我的应用程序的输出将跟随输出用户选择。
我搜索了很多并添加了一些监听器,因此如果系统输出已更改,我可以立即将我的应用程序的输出更改为先前用户选择的。
但它使得延迟几毫秒的时间非常短暂。
我想这是因为我已将应用程序的输出更改为系统默认值后切换。
所以我想知道如果我能在系统默认输出改变之前知道。 (像来自可可的viewWillAppear api)
谢谢。
我用来了解系统默认音频输出的监听器来自下面的文章。How to get notification if System Preferences Default Sound changed
感谢
我使用AudioUnitSetProperty(audioOut, kAudioOutputUnitProperty_CurrentDevice, kAudioUnitScope_Output, 0, &deviceID, (UInt32)sizeof(deviceID))
来选择输出设备。 apple document
并添加此侦听器
func addListenerBlock(listenerBlock: @escaping AudioObjectPropertyListenerBlock, onAudioObjectID: AudioObjectID, forPropertyAddress: inout AudioObjectPropertyAddress) {
if (kAudioHardwareNoError != AudioObjectAddPropertyListenerBlock(onAudioObjectID, &forPropertyAddress, nil, listenerBlock)) {
LOG("Error calling: AudioObjectAddPropertyListenerBlock") }
}
func add() {
var propertyAddress = AudioObjectPropertyAddress(mSelector: kAudioHardwarePropertyDefaultOutputDevice,
mScope: kAudioObjectPropertyScopeGlobal,
mElement: kAudioObjectPropertyElementMaster)
self.addListenerBlock(listenerBlock: audioObjectPropertyListenerBlock,
onAudioObjectID: AudioObjectID(bitPattern: kAudioObjectSystemObject),
forPropertyAddress: &propertyAddress)
}
答案 0 :(得分:1)
kAudioUnitSubType_DefaultOutput
跟踪用户在“声音首选项”中选择的当前输出设备。要播放特定设备,请使用kAudioUnitSubType_HALOutput
。 AUComponent.h
中的评论很有帮助:
@enum Apple input/output audio unit sub types (OS X)
@constant kAudioUnitSubType_HALOutput
- desktop only
The audio unit that interfaces to any audio device. The user specifies which
audio device to track. The audio unit can do input from the device as well as
output to the device. Bus 0 is used for the output side, bus 1 is used
to get audio input from the device.
@constant kAudioUnitSubType_DefaultOutput
- desktop only
A specialisation of AUHAL that is used to track the user's selection of the
default device as set in the Sound Prefs
@constant kAudioUnitSubType_SystemOutput
- desktop only
A specialisation of AUHAL that is used to track the user's selection of the
device to use for sound effects, alerts
and other UI sounds.
您没有说明如何设置输出(AUGraph
?),因此使用kAudioUnitSubType_HALOutput
的方式会有所不同。