5 ポイント 投稿者 fcbayernmuller 2024-01-29 | 5件のコメント | WhatsAppで共有

vibra

  • 楽曲認識サービスである Shazam のサーバーと通信するクライアントを C++ で実装したプロジェクトです。
  • 既存の Rust 製オープンソース Shazam クライアント songrec より約2倍高速に動作します。
  • wav ファイルを読み込み、そのファイルがどの楽曲かのデータを取得できます。
  • stdin に raw PCM data を入力する方法で、マイクで録音中の楽曲も認識できます。
  • fingerprinting に必要な libfftw3 と、Shazam サーバーとの通信に必要な libcurl が必要です。
  • wav file の downsampling や channel convert などの PCM data を効率よく処理するため高速です。
  • 依存ライブラリが少なくビルドが容易なため、組み込み機器で活用できます。

5件のコメント

 
mdisprgm 2024-01-29

RustではなくC++を選ばれた理由はありますか?

 
cosine20 2024-01-29

共有ありがとうございます! どのように性能改善をされたのか、個人的に気になりますね。
Raspberry Pi 4で1秒前後であれば、本当に実用的な性能ですね。

 
fcbayernmuller 2024-01-29

実のところ Rust の Songrec があまりにも非効率だったのは、入力された PCM data に対して downsampling、mono への変換、16bit への変換をすべて別々に行っていたからです。

そこで、各工程ごとに PCM data を毎回走査していた部分を改善しました。もちろん、C++ と Rust という言語の違いも大きいと思います。

 
cosine20 2024-01-29

ああ、Rustのコードではその3つの工程を別々に処理していたんですね。それを改善するのも並大抵のことではなかったはずなのに、すごいです ' v)b`

 
fcbayernmuller 2024-01-29

ありがとうございます〜!!!