两个同时的AVAudioSessions

时间:2019-02-23 15:53:25

标签: swift avaudioplayer avaudiosession audiotoolbox

我有一个使用WebRTC进行语音聊天的应用。 经过大量的故障排除后,我得出的结论是,每当我收到流时,WebRTC都会将AVAudioSession共享实例设置为以下内容: try AVAudioSession.sharedInstance().setCategory(.playAndRecord, mode: .voiceChat, options: .allowBluetooth)

我想播放一个音频文件(大约一秒钟),如果我只是加载并执行player.play(),它将无法播放。如果我尝试将类别设置为.playback或对音频文件有意义的任何设置,则流的音频将停止播放。

我还尝试创建一个新的AVAudioSession实例,但是一旦播放了音频文件,流的音频就会停止。

我是否可以在不影响流的音频及其配置的情况下播放音频文件?

这是完整的代码

    private func playTapSound() {
        guard let url = Bundle.main.url(forResource: App.AudioFile.emojiTapSound, withExtension: "mp3") else { return }

        do {
            let audioSesson = AVAudioSession()
            try audioSesson.setCategory(.playback, mode: .default)
            try audioSesson.setActive(true)

            audioPlayer = try AVAudioPlayer(contentsOf: url, fileTypeHint: AVFileType.mp3.rawValue)

            guard let player = audioPlayer else { return }

            player.play()

        } catch let error {
            LogManager.shared.print("Error - playing emoji tap audio -", error.localizedDescription, type: [.Error, .Audio])
        }
//        var chime1URL: NSURL?
//        var chime1ID: SystemSoundID = 0
//        let filePath = Bundle.main.path(forResource: "emojiTapSound", ofType: "wav")
//        chime1URL = NSURL(fileURLWithPath: filePath!)
//        AudioServicesCreateSystemSoundID(chime1URL!, &chime1ID)
//        AudioServicesPlaySystemSound(0)
    }

我也尝试使用AudioToolBox,但由于某些原因,它只能在模拟器上播放。我尝试了Apple的一种预装声音,验证了这不是我手机的设置,并且可以正常工作。

0 个答案:

没有答案