avfoundation / coremedia /その他のフレームワークを使用してビート /発症を検出する

StackOverflow https://stackoverflow.com/questions/9355524

質問

(序文: これは、スタックオーバーフローに関する私の最初のオーディオ関連の質問ですので、できる限り最高のものにしようと思います。編集歓迎。)

ユーザーが音楽をループできるようにするアプリケーションを作成しています。現時点では、当社のプロトタイプでは、これらの「ループマーカー」(UISLIDERSとして実装されています)が毎秒スナップし、ループの開始と終了を指定しています。明らかに、音楽をループするとき、秒はこれを処理するのに非常に粗雑な方法ですので、代わりにビートを使用したいと思います。

マークビート以外は何もしたくない。

  • 私たちを養います loadMusic メソッドオーディオファイル。
  • ライブラリを通してそれを実行して、ビートまたはそれらの間の間隔を検出します(多分)。
  • その値をスライダーに送ります setNumberOfTickMarks: 方法。
  • 利益!

残念ながら、私がGoogleを介して遭遇した結果のほとんどは、リミキサーが使用するようなより高度なビート検出ライブラリを生成しました。私の場合は過剰です。

これは、Coremedia、Avfoundation、またはAudiotoolboxが処理できるものですか?そうでない場合、これを処理できる他のライブラリはありますか? Appleのドキュメントに関する私の研究は、MIDIファイルについて、関連する結果のみをもたらしました。しかし、Apple独自のソフトウェアには、このような機能があります。 ImovieのSnap-to-Beats機能.

ガイダンス、コード、または要約は、この時点で非常に役立ちます。

編集: もう少し掘り下げた後、それは私が探しているものの正しい用語のようです 開始検出.

役に立ちましたか?

解決

開始検出アルゴリズムには、生の音楽信号を見ることから周波数ドメイン技術の使用まで、多くのフレーバーがあります。

ビートがどこにあるかを簡単に簡単に判断する方法が必要な場合:

  1. 音楽信号を小さなセグメントに切り刻む(20-50ms チャンク)

  2. 信号の平方根平均を計算します。 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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top