1

I have an app that uses WebRTC for voice chat. After a lot of troubleshooting I came to the conclusion that whenever I receive a stream, the WebRTC will set the AVAudioSession shared instance to the following: try AVAudioSession.sharedInstance().setCategory(.playAndRecord, mode: .voiceChat, options: .allowBluetooth)

I want to play an audio file (about a second long) and if I simply load it and do player.play(), it won't play. If I try to set the category to .playback or anything that would make sense for an audio file, the stream's audio will stop playing.

I also tried to create a new AVAudioSession instance but once the audio file plays, the stream's audio will stop.

Is there a way for me to get the audio file to play without affecting the stream's audio and its configuration?

Here's the full code

    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)
    }

I also tried using the AudioToolBox but for some reason it only played on the simulator. I verified that it's not my phone's settings by trying one of Apple's preloaded sounds and it worked.

Tarek
  • 783
  • 10
  • 31

0 Answers0