ハイライト
Apple は、Shazam のコア音声認識テクノロジーを ShazamKit フレームワークにカプセル化しました。開発者は、アプリ内で Shazam の膨大な音楽ライブラリを直接呼び出して曲を認識したり、カスタム オーディオ ディレクトリを作成してオフラインでオーディオ マッチングを実現したりできます。
主な内容
動画を撮ってBGMもいいのですが、曲のタイトルがわかりません。以前のアプローチは、ビデオを友人に送信するか、別の認識アプリを開くことでした。ShazamKit により、これがアプリ内で直接可能になります。
ShazamKit には、Shazam 音楽ライブラリの識別、カスタム カタログの識別、および音楽ライブラリの管理という 3 つのコア機能が含まれています。最初の 2 つは「これは何の音声か」という問題を解決し、3 つ目は「認識されたコンテンツを保存する方法」の問題を解決します。
Shazam の技術原理は、一般的なオーディオ分類器とはまったく異なります。SoundAnalysis フレームワークは「このオーディオに笑い声がある」ことを識別できますが、Shazam は完全一致を行います。つまり、オーディオからシグネチャと呼ばれる圧縮表現を抽出し、ライブラリで正確なシグネチャを検索します。署名は元の音声より少なくとも 1 桁小さく、元に戻すことはできません。署名から元の音声を復元することはできません。
(05:41) この設計には 2 つの利点があります。ネットワーク送信量が非常に少なく、ユーザーのプライバシーが保護されます。
カスタム ディレクトリ認識により、照合結果がローカルでデバイスに移動されます。あらゆる音声 (教育ビデオ、テレビ番組など) の署名を生成してカスタム ディレクトリに保存でき、アプリはローカルで照合を完了できます。これは、リモート指導のシナリオで特に役立ちます。教師がコースビデオを再生すると、生徒側のアプリは自動的にページをめくってインタラクティブなコンテンツを同期して表示でき、一時停止または再生されても進行状況を把握できます。
(04:13) もう 1 つの典型的なシナリオは「ショッピング可能なビデオ」です。視聴者がテレビ番組を見ているとき、アプリは現在の画面内の家具を認識し、AR プレビューと購入リンクをポップアップ表示します。
##詳細
Shazam ライブラリのマッチングを開始する
ShazamKit のコア オブジェクトは次のとおりです。SHSession。デフォルトで初期化すると、Shazam クラウド音楽ライブラリに接続されます。
let session = SHSession()
session.delegate = self
let signatureGenerator = SHSignatureGenerator()
try signatureGenerator.append(buffer, at: nil)
let signature = signatureGenerator.signature()
session.match(signature)
キーポイント:
SHSession()デフォルトで Shazam クラウド ミュージック ライブラリと一致します。 ShazamKit App Service は開発者ポータルで有効にする必要があります。SHSignatureGenerator生のオーディオ データを、Shazam マッチングの中核となるデータ構造である署名に変換します。append(buffer, at: nil)オーディオ バッファをジェネレータに追加します。bufferはいAVAudioPCMBufferタイプsignature()最終的な署名オブジェクトを生成するmatch(signature)照合のために署名を Shazam サーバーに送信します
マイクからリアルタイムで音声を取得している場合は、次を使用する必要があります。matchStreamingBuffer(_:)このメソッドは、署名生成の詳細を自動的に処理します。
一致結果を受け取る
試合結果は合格SHSessionDelegateコールバックが返されます。
extension SongResultViewController: SHSessionDelegate {
public func session(_ session: SHSession, didFind match: SHMatch) {
guard let matchedMediaItem = match.mediaItems.first else {
return
}
DispatchQueue.main.async {
self.songView.titleLabel.text = matchedMediaItem.title
self.songView.artistLabel.text = matchedMediaItem.artist
}
}
}
キーポイント:
SHMatchが含まれていますmediaItems1 つの署名が複数の曲に一致する可能性があるため、配列matchedMediaItemはいSHMatchedMediaItem継承元の型SHMediaItemtitleそしてartistは最も一般的に使用される 2 つの属性で、それぞれ曲のタイトルと演奏者に対応します。- コールバックはバックグラウンド スレッドで発生し、UI を更新するにはメイン スレッドに切り替える必要があります。
- 各試合には次の内容が含まれます
matchOffset、曲内のどの時点で一致が発生したかを示します。
Shazam ライブラリに保存
認識された曲はユーザーの Shazam ライブラリに保存でき、デバイス間で同期されます。
guard let matchedMediaItem = match.mediaItems.first else {
return
}
SHMediaLibrary.default.add([matchedMediaItem]) { error in
if error != nil {
// handle the error
}
}
キーポイント:
SHMediaLibrary.defaultユーザーの Shazam 音楽ライブラリに対応し、エンドツーエンド暗号化を使用- Shazam ライブラリからの一致のみを書き込むことができ、カスタム ディレクトリからの一致は書き込めません。
- 特別な許可は必要ありませんが、ユーザーが明確に理解し、同意することをお勧めします。
- 保存された曲にはソースアプリの名前がタグ付けされます
MusicKit との統合
(13:04) ShazamKit によって返されましたSHMediaItem含むsongsプロパティ。MusicKit フレームワークの厳密に型指定されたオブジェクトです。これを直接使用して、より豊富な音楽メタデータを取得したり、Apple Music の再生ページにジャンプしたりできます。
重要ポイント
- ビデオBGM認識
- 対処法: 動画編集時にユーザーが 1 クリックで BGM を識別し、プレイリストを保存できるようにします
- 価値がある理由: ShazamKit は、ユーザーが他のアプリに切り替えることなく、ビデオ ファイルのオーディオ トラックを直接処理できます。
- 開始方法: を使用します
AVAssetReaderビデオオーディオを抽出して渡すSHSignatureGenerator、そして電話しますsession.match(signature)
- 教室同期学習アシスタント
- 対処方法: 教育アプリは、教師が再生する教育ビデオに基づいて、コースウェアとインタラクティブな質問を自動的に同期して表示します。
- 実行する価値がある理由: カスタム ディレクトリの識別はローカルで完全に完了し、ネットワークに依存しません。生徒は自宅でオンライン授業を受けていても、臨場感あふれる体験を得ることができます。
- 開始方法: コードアロング セッション 10045 を参照し、使用します。
SHCustomCatalog学生が使用するためにコース音声から署名ディレクトリを生成するmatchStreamingBuffer实时匹配
- ソーシャルビデオ音楽タグ
- 何をすべきか: 短いビデオ共有アプリでバックグラウンドミュージックを含むビデオを自動的にタグ付けする
- 価値がある理由: Shazam 音楽ライブラリは、高い認識精度で世界中の膨大な量の音楽をカバーしています。ユーザーはラベルをクリックすると Apple Music に直接ジャンプできます。
- 開始方法: ビデオをアップロードするときにバックグラウンドで音声署名を抽出し、Shazam マッチングを呼び出し、
title、artist、artworkURLビデオのメタデータを保存する
- ライブパフォーマンスのインタラクティブ体験
- 内容: コンサートまたはイベントのライブ アプリは、現在再生中の曲に基づいて照明効果とビジュアル テーマを切り替えます。
- 実行する価値がある理由:
matchStreamingBufferリアルタイムオーディオストリーミング、低遅延、リターン向けに最適化genre属性を使用してさまざまな視覚スタイルに一致させることができます - 開始方法: を使用します
AVAudioEngine周囲の音声をキャプチャするmatchStreamingBuffer返された情報に基づく継続的な識別genreまたはtitleUIテーマの切り替え
関連セッション
- ShazamKit を使用してカスタム オーディオ エクスペリエンスを作成する — コードアロング演習: カスタム ディレクトリを使用して教育用同期アプリを構築する
- MusicKit for Swift の紹介 — ShazamKit によって返されるメディア アイテムは、MusicKit の厳密に型指定されたオブジェクトに直接接続できます。
- サウンド分析を使用してビデオ内のサウンドを分類する — 「笑い声」や「拍手」などのサウンド カテゴリを識別する必要がある場合は、ShazamKit の代わりに SoundAnalysis を使用します。
コメント
GitHub Issues · utterances