ストリーミングはほとんどのブラウザと
Developerアプリで視聴できます。
-
ShazamKitの詳細
ShazamKitを使用すると、App内でShazamの正確なオーディオマッチング機能を利用できます。膨大なShazamカタログを利用して、Appで撮影したビデオのバックグラウンドで再生されている正確な曲をすばやく認識したり、部屋で再生されている音楽に基づいてダイナミックな視覚効果を提供したり、外部のオーディオと同期するコンパニオンAppでの体験を提供するなど、さまざまな体験を生み出す方法について確認します。また、ShazamKit内でカスタムカタログを作成し、デバイス上であらゆるオーディオソースにマッチさせる方法も紹介します。 さらに詳しく知りたい方は、「ShazamKitによるカスタムオーディオエクスペリエンスの構築」をご確認ください。Code-Alongを通じて、ストリーミングされたビデオコンテンツと完全に同期する教育Appの構築方法を確認することができます。
リソース
関連ビデオ
WWDC23
WWDC22
WWDC21
-
ダウンロード
こんにちは 私はマール Shazam Project所属です WWDC21を 楽しんでいらっしゃいますか? 今日はShazamkitを ご紹介します ご自身のアプリでも 音声認識を導入できる フレームワークで 今日はそのShazamkitを ご紹介し 応用法をいくつか ご紹介します その後は同僚ジェームズに 引継ぎ Shazamの 「カタログ認識」の仕組みや 導入にあたる 注意点をご説明します まず Shazamkitとは何でしょう Shazam自体は ご存知かもしれません AppStore設置当初の アプリとして 2008年に登場した 音声認識アプリです 十三年後は かなりの成長を遂げ Shazamを動詞化する人も Siriの「この歌 何? ]を\tN支える技術であり 「ショートカット」や コントロールセンターも同様です 根幹となる技術は 音声認識で 周囲から雑音が入っても 迅速・正確に 音声マッチングが可能です 音源固有の 音響シグネチャを 探知し 類似するオーディオを 探す仕組みのもので Shazamの 音源カタログとの照会 また ユーザー指定の音源とも 照会ができるようになっています ただSoundAnalysisとは違い Shazamは 発話・歌・鼻歌などと 音声を分類することは ありません Shazamは 笑い声や歓声など 特定の音の種類は 探知しないのです 数分後はジェームズが 詳しく説明しますが 音声の検知や分類に 興味をお持ちの場合は SoundAnalysisの動画も ございます 今は あなたのアプリに オーディオ特定の 能力を授ける ShazamKitに 専念しましょう ShazamKitには 3つの機能があり Shazamの 音源カタログからの探知 カスタムカタログからの探知 ライブラリ管理があります Shazamカタログ探知は アプリに曲特定機能を 導入するのに使い カスタムカタログ探知では さらに広く ユーザー指定のどの音源とも マッチングができます このプレゼンは Shazamカタログ探知と ライブラリ管理に 着目していますが アプリからの カスタム音源探知を あなたに伝授する アレックスのプレゼンも ご覧ください では Shazamkitの 活躍するアプリを 今から 見ていきましょう 自撮りの達人になりたい そう思ったらやはり 辺りの雰囲気 五感全てを 演出したいですね Shazamのカタログ探知では 流れる曲のタイトル 歌手を特定して 音の演出する雰囲気を とらえられます また 家撮りでも いつも通りの音楽を流し 平凡な雰囲気を 演出してしまわない様 お手伝いできます The ShazamKit APIは ジャンルも メタデータで保存しますが それでクラブの雰囲気を 再現することができます ShazamKitは楽曲特定以外も 可能です オンライン授業などでも 活用ができます 授業中の アプリ切り替えや こまめな画面確認など オンラインは先生・生徒とも 心細いかも しかし カスタム 音源探知を使えば オンライン授業も 効率的で簡便なものに なりえます 合図の文句を録音し 先生がそう発言する度に ツールが 児童の画面を自動操作 そんなこともできます こうすれば 内容をさかのぼるときも 画面がちゃんとついていき 先生も一安心です さて 私のように リフォーム番組がお好きな方は 良さそうな家具が 出てきたら すぐに検索してしまう 衝動が分かるのでは? ShazamKitを使えば お家のスマホで ARさながらの ショッピングができます 生放送・録画を問わず 家具の名が発せられる度に シミュレーションでお試し 即時オーダーができます 実体験での 使用例を一つ 自分や友達の動画を見て 流れている音楽が 気になったということは ありますか? この動画は 友達が 自分の金曜日を 紹介するもの 他にいない このバイブス 二人きりで この鼓動を このアプリは ShazamKitを使い Shazamカタログ内の 曲を特定しました 曲名が分かったr ライブラリに保存して 週末のプレイリストに 追加! 次はジェームズが Shazamカタログ探知の 仕組みを説明します マール じゃあ こんにちは! Shazam部マネージャーの ジェームズです ShazamKitがどうやって あの動画から 曲名を特定したか ご説明します マールが「曲を特定」ボタンを 押した時 何が起こったのでしょう Shazamkitは動画の音声を Shazamのサーバーに送り Shazamカタログ内の曲と マッチング 曲情報を受け取って アプリが表示したわけですが マッチングの仕組みを もっと詳しく見ていきましょう Shazamは音源自体とは マッチングしない これは大事です シグネチャーと呼ぶ 有損失表現を作り それとマッチングを するのです この方法は 二つの長所があります 一つ目はシグネチャーが 音源に比べて 十倍以上容量が小さいことで これにより ネットワーク上の データ送信量を 大きく削れます 二つ目はシグネチャーが 可逆不能である点で 音源が 再構築できなくなっています お客様のプライバシー保護の 観点から こだわっています では人間には どう聞こえるのでしょう? シグネチャーから 曲が当てられますか? 簡単ですね ビリー・アイリッシュの "My Future"です ちなみにこれ自体を Shazamすることもできます 次はカタログについての ご説明 カタログは シグネチャーをまとめたもの シグネチャーだけでは 無意味ですから 曲を特定する メタデータも カタログに入っています それぞれ特定の曲を 参照するので レファレンス(参照) シグネチャーと呼称します Shazamカタログは 全世界の曲が ほとんど 収録されていて Appleが維持する クラウドに 置きます 新曲が出る度に こまめに更新され カタログ内全ての シグネチャは 曲全体をもとに 生成さています 曲のメタデータも 一緒に挙げています では 自分の音源を 参照したい場合は? この場合は カスタムカタログを使います 音楽だけでなく どんな音源からも シグネチャを作成し 集めたものです メタデータも 自由に追加できます クラウド上び Shazamカタログとは異なり カスタムカタログは アプリ内に保存します 興味のある方は "ShazamKitで動画を カスタムしよう"で プログラミングを お付き添いします カタログを照会する際は マッチング音声から 切り取った 「問合せシグネチャー」で 検索します このアプリの場合 曲の流れる 部分ですね この図解は この問合せシグネチャーを 曲全てを網羅した 参照シグネチャーに 照会し 特定に成功しています Shazam上での マッチングは 全て同じ仕組みを 利用しています 最初の説明図の内容も ネットワークに 問合せシグネチャーを送り 参照シグネチャと 楽曲情報の集成の カタログから曲を特定 となりますね マールが「特定」を押してから こうして楽曲を見つけ 情報を得たわけですが ShazamKitが 優れているのは セッションオブジェクトを 使う点です 音源・シグネチャー双方から 検索できます 結果はデリゲートを介して 伝えらます ただしShazamカタログから 検索する前に Developerのポータルにて Shazamkit App Serviceを 有効化します カスタムカタログの場合は そ必要はありません プログラム上は どうなるのでしょうか まずセッションオブジェクトを 作ります デフォルト初期化子は Shazamカタログと設定 つぎに一致が見つかれば 通知が来るよう デリゲートを作ります マイクなど断続的でない 音源とのマッチングは そ場合最適なのが matchStreamingBuffer これを使うことを お勧めします しかし 私は今 コンピューター上の 音源にアクセスできるので シグネチャー変換器を作り それに オーディオを通します マッチングを行う場合は シグネチャー変換器で シグネチャーの音源を 変換し このシグネチャーを セッションオブジェクトにて マッチングします また アプリの話です 音源からシグネチャーを 作成し セッションで Shazamカタログ内から 合致する曲を探る その次のステップは 曲情報の認識です カタログは シグネチャーに加え メタデータも含むと 先ほど述べました Shazamカタログ内では 曲名やアーティスト さらにはアルバムの盤面 に至る 情報がメタデータとして 存在します ShazamKit内では メディアアイテムが この情報を担います マッチ済みの シグネチャーは 曲内の該当箇所や 周波数のゆがみなど 原曲を比較した 追加情報も提供します これは マッチメディアアイテムで メディアアイテムの サブクラスです コードの見本で デリゲートを設けましたが マッチを行う際 これで成功・失敗・エラーと 進展状況を確認できます 一つのシグネチャーで 複数の楽曲の探知も可能です この場合メディアアイテムが 複数個 表示されます ここでは 一番目を使ってみましょう 表示される曲情報を 選定しましょう このアルバムアートは artworkURLから読み取ります 曲名とアーティストは 対応プロパティから 事前設定されています 検知した楽曲は Apple Music収録で 曲情報も 掲載済なので Apple Musicの ガイドラインに 適った記述の 必要があります このアプリでは 曲とともに Apple Musicリンクも 表示します あなたのアプリで 探知した曲を そのまま Shazamライブラリに保存も可です Shazamのアプリから直接 アクセスするか 曲探知コントロールという モジュールの長押しでも アクセス可で 全デバイス共通です やってみましょう まず曲探知コントロール センターのモジュールを 長押し もう数曲 保存されているようですね 次はアプリ内で 「+」ボタンを押して 先ほど探知した曲を 加えます ライブラリを開き 成功したか確認します よし!入っています 探知を行ったアプリも ソースとして 記載されています プログラムは こうなります SHMediaLibraryはユーザーの ライブラリに対応の 規定インスタンス E2E暗号化して 保存されますが これは 二段階認証の デバイスのみ可能です ライブラリは Shazamカタログに 収録された楽曲のみ 保存可です Shazamライブラリと 接続するのに 手続きは不要ですが ライブラリに保存の際は ユーザーにご確認ください ライブラリに保存された曲は 送信元のアプリとともに 表示されます また メディアアイテムには 他にも色々な 曲情報があり 例えば楽曲の マッチ箇所を示す matchOffsetが あります また最新の MusicKitには 楽曲やその関係性など 強く片付けされた オブジェクトも 楽曲のプロパティとして Swiftに掲載しました 詳しく知りたい方は 「SwfitのためのMusicKit」で これで仕組みは 全て解明しました セッションで 音声シグネチャを Shazamカタログと 照会し 特定します 次にセッションは デリゲートを開始 マッチメディアアイテムとして 曲情報送信 ユーザーは Shazamライブラリに この曲を保存することも 可能です では しめはマールが ケースごとの最善策を ご説明 じゃあ お願いします ありがとう Shazamが何であり どんな仕組みか 分かったら 導入の準備も万全 ShazamKitを使う際は 次のお得情報を 覚えておいて下さい マイクなど リアルタイムの音声を使う場合 matchStreamingBufferを 使うべきです この方が簡便で 範囲付けがしっかりした シグネチャーを 作ることができます また マイクを使う場合は 必要箇所が終わったら すぐ録音終了を そうすれば エネルギー消費を抑え ユーザーを不意に 録音する事態が避けられます 最後にライブラリへの 保存についてですが ユーザーに趣旨を説明し 許可を問う 必要があります ShazamKit 興味深いでしょうか あなたのつくる 未来的な ツールが待ち遠しいです 必要な情報や 書類へのリンクは ページに添付していますので そろそろお別れの時間です カスタムカタログ探知の ワークショップも お忘れなく ありがとうございました 他のWWDC21も楽しみください [音楽]
-
-
9:11 - Matching signatures using SHSession
// Matching signatures using SHSession let session = SHSession() session.delegate = self let signatureGenerator = SHSignatureGenerator() try signatureGenerator.append(buffer, at: nil) let signature = signatureGenerator.signature() session.match(signature)
-
10:45 - Receive matches via session delegate
// Receiving matches via the session delegate 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 } } }
-
12:24 - Add to Shazam library
// Adding to a customer’s library guard let matchedMediaItem = match.mediaItems.first else { return } SHMediaLibrary.default.add([matchedMediaItem]) { error in if error != nil { // handle the error } }
-
-
特定のトピックをお探しの場合は、上にトピックを入力すると、関連するトピックにすばやく移動できます。
クエリの送信中にエラーが発生しました。インターネット接続を確認して、もう一度お試しください。