So, let me start here: But there are problems with clicking on recorded audio on Bluetooth devices (all noise or no sound during playback). The thing to keep in mind here is that Bluetooth has two entirely separate audio mechanisms, which have very different levels of audio quality and behavior: A2DP -> Playback only, higher quality, modeled as music player. HFP -> Play and record, lower quality audio, modeled as a phone. Switching between those modes isn't immediate, so manipulating the audio session configuration can change how audio sounds and/or cause odd glitches. These issues will also be worse in the background, where your app no longer has direct/less control over the audio session state. In terms of your code, there are a few different issues: (1) AVAudioPlayer should not be used for exactly the same reasons you should not use AVAudioRecorder. All your playback and recording should be going through AVAudioEngine. (