【发布时间】:2022-08-04 12:30:10
【问题描述】:
我正在使用标准代码开始收听麦克风并使用 SHSession 委托检测带有 ShazamKit 的歌曲。
let audioSession = AVAudioSession.sharedInstance()
audioSession.requestRecordPermission { isGranted in
guard isGranted else { return }
try? audioSession.setActive(true, options: .notifyOthersOnDeactivation)
let inputNode = self.audioEngine.inputNode
let recordingFormat = inputNode.outputFormat(forBus: 0)
inputNode.installTap(onBus: 0, bufferSize: 1024, format: recordingFormat) {
(buffer: AVAudioPCMBuffer, when: AVAudioTime) in
self.session.matchStreamingBuffer(buffer, at: nil)
}
self.audioEngine.prepare()
do {
try self.audioEngine.start()
} catch (let error) {
assertionFailure(error.localizedDescription)
}
}
当通过收听一些外部声源(如音乐栏)进行歌曲检测时,一切正常。但我需要提供机会从另一个应用程序(例如 Soundcloud)打开一些歌曲,打开我的应用程序并检测它。但是,如果执行此代码块,歌曲播放就会停止。我试图通过 setCategory 方法更改总线值、缓冲区大小、添加一些类别,但没有任何帮助。正如我所建议的,问题可能是由使用相同的资源(如总线)引起的,但正如我已经提到的,我试图改变这个值
-
您需要使用
.mixWithOthers设置您的音频会话类别,然后激活它
标签: swift avfoundation