vibra、C++製の楽曲認識サービス Shazam クライアント
(github.com/BayernMuller)vibra
- 楽曲認識サービスである Shazam のサーバーと通信するクライアントを C++ で実装したプロジェクトです。
- 既存の Rust 製オープンソース Shazam クライアント songrec より約2倍高速に動作します。
- wav ファイルを読み込み、そのファイルがどの楽曲かのデータを取得できます。
- stdin に raw PCM data を入力する方法で、マイクで録音中の楽曲も認識できます。
- fingerprinting に必要な libfftw3 と、Shazam サーバーとの通信に必要な libcurl が必要です。
- wav file の downsampling や channel convert などの PCM data を効率よく処理するため高速です。
- 依存ライブラリが少なくビルドが容易なため、組み込み機器で活用できます。
5件のコメント
RustではなくC++を選ばれた理由はありますか?
共有ありがとうございます! どのように性能改善をされたのか、個人的に気になりますね。
Raspberry Pi 4で1秒前後であれば、本当に実用的な性能ですね。
実のところ Rust の Songrec があまりにも非効率だったのは、入力された PCM data に対して downsampling、mono への変換、16bit への変換をすべて別々に行っていたからです。
そこで、各工程ごとに PCM data を毎回走査していた部分を改善しました。もちろん、C++ と Rust という言語の違いも大きいと思います。
ああ、Rustのコードではその3つの工程を別々に処理していたんですね。それを改善するのも並大抵のことではなかったはずなのに、すごいです
' v)b`ありがとうございます〜!!!