我有一个使用AVFoundation录制音频和视频的应用程序。我希望在我的应用程序中录制音频时继续从其他应用程序(或系统)播放音频,但是当将输入添加到会话中时,另一个应用程序中已经在播放的音频会被神奇地静音。
相应的代码如下:
// set up audio device
if(m_audioenabled) {
print("Audio enabled")
if self.m_audioDevice != nil {
do {
let audioinput = try AVCaptureDeviceInput(device: self.m_audioDevice!)
if self.m_session.canAddInput(audioinput) {
self.m_session.addInput(audioinput)
}
} catch _ {
print("failed adding audio capture device as input to capture session")
}
}
m_audioDataOutput = AVCaptureAudioDataOutput()
m_audioDataOutput?.setSampleBufferDelegate(self, queue: self.m_captureSessionQueueAudio)
if self.m_session.canAddOutput(m_audioDataOutput!){
self.m_session.addOutput(m_audioDataOutput!)
}
}
如果我注释掉对canAddInput(...)的调用,音频将继续播放,当我调用它时,音频播放将被静音。
如何禁用该行为?
请注意,无法迁移到另一个Audio-API。
答案 0 :(得分:0)
像您的AVAudioSession
之类的声音是无法混合的(我认为是默认值)。在设置AVCaptureSession
之前,请尝试激活可混合的音频会话:
let session = AVAudioSession.sharedInstance()
try! session.setCategory(AVAudioSessionCategoryPlayAndRecord, with: [.mixWithOthers])
try! session.setActive(true)