【发布时间】:2018-03-20 18:18:37
【问题描述】:
我正在使用 AVAudioSession 来收听语音输入。它适用于有线耳机,但不适用于连接的蓝牙设备。以下是我用来设置蓝牙麦克风输入的代码
func setupSessionForRecording() { let audioSession = AVAudioSession.sharedInstance() do { try audioSession.setCategory(AVAudioSessionCategoryPlayAndRecord, with: [.allowBluetooth]) } catch let error as NSError { debugPrint("Error in listening "+error.localizedDescription) } var inputsPriority: [(type: String, input: AVAudioSessionPortDescription?)] = [ (AVAudioSessionPortLineIn, nil), (AVAudioSessionPortHeadsetMic, nil), (AVAudioSessionPortBluetoothHFP, nil), (AVAudioSessionPortUSBAudio, nil), (AVAudioSessionPortCarAudio, nil), (AVAudioSessionPortBuiltInMic, nil), ] for availableInput in audioSession.availableInputs! { guard let index = inputsPriority.index(where: { $0.type == availableInput.portType }) else { continue } inputsPriority[index].input = availableInput } guard let input = inputsPriority.filter({ $0.input != nil }).first?.input else { fatalError("No Available Ports For Recording") } do { try audioSession.setPreferredInput(input) try audioSession.setMode(AVAudioSessionModeMeasurement) try audioSession.setActive(true, with: .notifyOthersOnDeactivation) try audioSession.setPreferredIOBufferDuration(10) } catch { fatalError("Error Setting Up Audio Session") } }
此代码停止从设备麦克风获取输入,并且我还在蓝牙耳机中听到声音,它已准备好收听,但它没有从设备接收任何输入。
还有,
当我尝试将任何音频播放到蓝牙耳机时它不起作用。这是播放音频的代码
do { let output = AVAudioSession.sharedInstance().currentRoute.outputs[0].portType if output == "Receiver" || output == "Speaker"{ try AVAudioSession.sharedInstance().overrideOutputAudioPort(.speaker) } else{ try AVAudioSession.sharedInstance().overrideOutputAudioPort(.none) } print("Voice Out \(output)" ) } catch let error as NSError { print("audioSession error: \(error.localizedDescription)") os_log("Error during changing the current audio route: %@" , log: PollyVoiceViewController.log, type: .error, error) } catch { os_log("Unknown error during changing the current audio route", log: PollyVoiceViewController.log, type: .error) } do { let soundData = try Data(contentsOf: url as URL) self.audioPlayer = try AVAudioPlayer(data: soundData) self.audioPlayer?.prepareToPlay() self.audioPlayer?.volume = 3.0 self.audioPlayer?.delegate = self self.audioPlayer?.play() } catch let error as NSError { print("Error getting the audio file"+error.description) }
【问题讨论】:
-
嗨,你解决了吗?
标签: ios swift audio bluetooth voice-recognition