我想在我的项目中实现 ShazamKit。但我有一些问题。我使用 AVCaptureSession 在我的应用程序中拍照,但无法使用 ShazamKit。
我尝试使用三种不同的方式在我的 AVCaptureSession 期间使用 AVAudioEngine 但我没有从 Shazam 获得任何结果。在停止我的 AvCaptureSession 后尝试使用 ShazamKit 但这会导致一些问题和一些崩溃。尝试使用我的 AVCaptureSession 的缓冲区直接捕获音频而不使用 AVAudioEngine。
这是我与 AVAudioEngine 一起使用的代码:
尝试!audioSession.setActive(真,选项:.notifyOthersOnDeactivation)
let inputNode = self.audioEngine.inputNode
let recordingFormat = inputNode.outputFormat(forBus: 0)
let audioFormat = recordingFormat //AVAudioFormat(standardFormatWithSampleRate: self.audioEngine.inputNode.outputFormat(forBus: 0).sampleRate,
// channels: 1)
inputNode.installTap(onBus: 0, bufferSize: 1024, format: audioFormat) { (buffer: AVAudioPCMBuffer, when: AVAudioTime) in
try! self.signatureGenerator.append(buffer, at: nil)
self.session.matchStreamingBuffer(buffer, at: nil)
}
self.audioEngine.prepare()
try! self.audioEngine.start()
我可以选择两种方法来执行此操作,使用 AVCaptureSession 输出将其传递给 ShazamKit 或在 AVCaptureSession 停止后使用 AVAudioSession。
所以我有两个问题:
我可以在 SHSession 中使用来自 AVCaptureSession 缓冲区的 CMSampleBufferRef 吗?如果答案是肯定的怎么办?
如果我想在停止 AVCaptureSession 后使用 AVAudioSession,如何防止此错误?
[aurioc] AURemoteIO.cpp:1117 失败:-10851(启用 1,outf< 2 ch,0 Hz,Float32,deinterleaved> inf< 2 ch,0 Hz,Float32,deinterleaved>)[avae] AVAEInternal.h:76
需要条件为假:[AVAEGraphNode.mm:834:CreateRecordingTap: (IsFormatSampleRateAndChannelCountValid(format))] *** 由于未捕获的异常“com.apple.coreaudio.avfaudio”而终止应用程序,原因:“所需条件为假:IsFormatSampleRateAndChannelCountValid(format) )'
谢谢