0

我想在我的项目中实现 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) )'

谢谢

4

0 回答 0