- Shazamに着想を得た高速オーディオ認識・識別システムのRust実装オープンソース
- 速度、効率、シンプルさを重視して設計されており、CLIを通じてオーディオファイルのインデックス作成と検索を実行可能
主な特徴と利点
- 高速なインデックス作成・検索速度: 数百のオーディオファイルを高速に処理可能
- シンプルなCLIコマンド:
index と search コマンドによる直感的な利用方法を提供
- Rustベースの高性能実装: システムリソースを効率的に活用
- Shazamに類似したオーディオフィンガープリント方式を採用
内部動作の仕組み
前処理 (Preprocessing)
- ステレオをモノラルに変換(左/右チャンネルの平均)
- 計算量削減のためにダウンサンプリング: 44.1kHz → 11.025kHz
- ダウンサンプリング前には、Nyquist周波数以上を除去するためのIIRローパスフィルタを適用
スペクトログラム変換
- Short-Time Fourier Transform(STFT)を使用
- 1024サンプルのHamming窓
- 50%オーバーラップ
- 時間-周波数ドメインに変換してピークを抽出
- 各時間窓を周波数帯域に分け、各帯域で最も高い振幅のみを保持
- 平均以下の振幅は除去し、特徴的なピークのみを維持
フィンガープリントデータの保存方式
- ピークをハッシュとして構成して保存
- 1つの anchor ピークを基準に、周辺ピークとの相対位置をタプルとして保存
(anchor freq, peak freq, delta time) 形式で構成
- 32ビットまたは64ビット整数に変換可能
検索および並べ替えアルゴリズム
- 入力サンプルからフィンガープリントを生成
- データベースで候補フィンガープリントを照会し、時間順にソート
- Longest Increasing Subsequence(LIS)ベースの時間的連続性分析
- スライディングウィンドウを用いて、最も密集したマッチングピーク区間を探索
- マッチングスコアを計算し、高スコア順に結果をソート
まだコメントはありません。