我有一對帶麥克風輸入的藍牙耳機。麥克風沒有使用,但是當它是時,輸入和輸出都被強制爲8000kHz。當插入藍牙耳機時,AVAudioEngine使用錯誤的格式
我的AVAudioEngine實例在8000kHz模式下連接到耳機,除非我輸入系統設置並指定我不想使用耳機輸入(每次連接耳機時都必須進行此操作)。
我注意到其他應用程序可以在預期的44100kHz下回放,沒有任何問題。我的AVAudioEngine圖中沒有輸入節點。
如何讓AVAudioEngine更喜歡以合理的採樣率連接?
我有一對帶麥克風輸入的藍牙耳機。麥克風沒有使用,但是當它是時,輸入和輸出都被強制爲8000kHz。當插入藍牙耳機時,AVAudioEngine使用錯誤的格式
我的AVAudioEngine實例在8000kHz模式下連接到耳機,除非我輸入系統設置並指定我不想使用耳機輸入(每次連接耳機時都必須進行此操作)。
我注意到其他應用程序可以在預期的44100kHz下回放,沒有任何問題。我的AVAudioEngine圖中沒有輸入節點。
如何讓AVAudioEngine更喜歡以合理的採樣率連接?
在我寫給蘋果DTS的失敗賞金之後,得到了一個很好的回覆(包括下面我從Objective-C翻譯的代碼示例)。
下面的函數將以純輸出模式連接到默認音頻設備,而不是默認行爲的輸入/輸出模式。記得在引擎啓動之前調用它!
func setOutputDeviceFor(_ engine: AVAudioEngine) -> Bool {
var addr = AudioObjectPropertyAddress(
mSelector: kAudioHardwarePropertyDefaultOutputDevice,
mScope: kAudioObjectPropertyScopeGlobal,
mElement: kAudioObjectPropertyElementMaster)
var deviceID: AudioObjectID = 0
var size = UInt32(MemoryLayout.size(ofValue: deviceID))
let err = AudioObjectGetPropertyData(
AudioObjectID(kAudioObjectSystemObject),
&addr,
0,
nil,
&size,
&deviceID)
if (noErr == err && kAudioDeviceUnknown != deviceID) {
do {
try engine.outputNode.auAudioUnit.setDeviceID(deviceID)
} catch {
print(error)
return false
}
return true
} else {
print("ERROR: couldn't get default output device, ID = \(deviceID), err = \(err)")
return false
}
}
這與https://stackoverflow.com/questions/31501961和https://stackoverflow.com/questions/26728250有關。 – Henrik