У меня есть приложение, которое использует 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, и он сработал.