avfoundation / coremedia /その他のフレームワークを使用してビート /発症を検出する
-
28-10-2019 - |
質問
(序文: これは、スタックオーバーフローに関する私の最初のオーディオ関連の質問ですので、できる限り最高のものにしようと思います。編集歓迎。)
ユーザーが音楽をループできるようにするアプリケーションを作成しています。現時点では、当社のプロトタイプでは、これらの「ループマーカー」(UISLIDERSとして実装されています)が毎秒スナップし、ループの開始と終了を指定しています。明らかに、音楽をループするとき、秒はこれを処理するのに非常に粗雑な方法ですので、代わりにビートを使用したいと思います。
マークビート以外は何もしたくない。
- 私たちを養います
loadMusic
メソッドオーディオファイル。 - ライブラリを通してそれを実行して、ビートまたはそれらの間の間隔を検出します(多分)。
- その値をスライダーに送ります
setNumberOfTickMarks:
方法。 - 利益!
残念ながら、私がGoogleを介して遭遇した結果のほとんどは、リミキサーが使用するようなより高度なビート検出ライブラリを生成しました。私の場合は過剰です。
これは、Coremedia、Avfoundation、またはAudiotoolboxが処理できるものですか?そうでない場合、これを処理できる他のライブラリはありますか? Appleのドキュメントに関する私の研究は、MIDIファイルについて、関連する結果のみをもたらしました。しかし、Apple独自のソフトウェアには、このような機能があります。 ImovieのSnap-to-Beats機能.
ガイダンス、コード、または要約は、この時点で非常に役立ちます。
編集: もう少し掘り下げた後、それは私が探しているものの正しい用語のようです 開始検出.
解決
開始検出アルゴリズムには、生の音楽信号を見ることから周波数ドメイン技術の使用まで、多くのフレーバーがあります。
ビートがどこにあるかを簡単に簡単に判断する方法が必要な場合:
音楽信号を小さなセグメントに切り刻む(
20-50ms
チャンク)信号の平方根平均を計算します。
Sum(Xn ^2) / N
(どこN
あたりのサンプル数です20-50ms
)
より洗練されたテクニックが必要な場合は、以下を調べてください。
http://bingweb.binghamton.edu/~ahess2/onset_detection_nov302011.pdf
またはそれの筋金入りの扱いのために:
http://www.elec.qmul.ac.uk/people/juan/documents/bello-tsap-2005.pdf