我一直在尝试使用新的ShazamKit
将Shazam匹配添加到我的应用程序中。我使用了苹果的示例代码,找到了here并对其进行了轻微的修改。
import ShazamKit
import AVFAudio
import Combine
@available(iOS 15.0, *)
class ShazamMatcher: NSObject, ObservableObject, SHSessionDelegate {
// MARK: - Properties
@Published var result: SHMatch?
@Published var isRecording = false
private var isInitialSetupDone = false
private var session: SHSession?
private let audioEngine = AVAudioEngine()
// MARK: - Actions
func match() throws {
result = nil
session = SHSession()
session?.delegate = self
try doInitialSetupIfNeeded()
AVAudioSession.sharedInstance().requestRecordPermission { [weak self] success in
guard success, let self = self else {
return
}
try? self.audioEngine.start()
self.isRecording = true
}
}
func stopMatching() {
audioEngine.stop()
isRecording = false
}
// MARK: - Setup
private func doInitialSetupIfNeeded() throws {
guard !isInitialSetupDone else {
return
}
let audioFormat = AVAudioFormat(
standardFormatWithSampleRate: audioEngine.inputNode.outputFormat(forBus: 0).sampleRate,
channels: 1
)
audioEngine.inputNode.installTap(onBus: 0, bufferSize: 2048, format: audioFormat) { [weak session] buffer, audioTime in
session?.matchStreamingBuffer(buffer, at: audioTime)
}
try AVAudioSession.sharedInstance().setCategory(.record)
isInitialSetupDone = true
}
// MARK: - SHSessionDelegate
func session(_ session: SHSession, didFind match: SHMatch) {
// Handle match here
}
func session(_ session: SHSession, didNotFindMatchFor signature: SHSignature, error: Error?) {
// Handle error here
}
}
但是,在调用match()
时,委托最终会报告错误The operation couldn’t be completed. (com.apple.ShazamKit error 202.)
我已使用我的ShazamKit服务包标识符添加了一个新密钥并下载了.p8
文件。我是否需要此文件?如果需要,如何使用?
有人能解决这个错误吗?
2条答案
按热度按时间odopli941#
我找到了一个解决方案。首先,显然应用程序间的音频授权必须启用。
其次,看起来您还需要一个
SHSignatureGenerator
(我认为调用matchStreamingBuffer
就足够了下面是有效的代码:https://github.com/heysaik/ShazamKit-Demo/blob/main/Shazam/ViewController.swift
mum43rcc2#
1.转到您的开发人员帐户(developer.apple.com)。
1.在“标识符”下选择您正在处理的bundleid。
1.选择“应用程序服务”选项卡。
1.选中复选框“ShazamKit”并保存。