12

(序文:これはスタック オーバーフローに関する私の最初のオーディオ関連の質問です。そのため、できる限りこれを言葉で表現しようとします。編集を歓迎します。)

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

UISliders がスナップするビートをマークする以外は何もしたくありません。

  • loadMusicメソッドに音声ファイルをフィードします。
  • ライブラリを介して実行して、ビートまたはそれらの間の間隔を検出します(おそらく)。
  • その値をスライダーのsetNumberOfTickMarks:メソッドにフィードします。
  • 利益!

残念ながら、私が Google や SO 経由で見つけた結果のほとんどは、リミキサーが使用するような、はるかに高度なビート検出ライブラリをもたらしました。私の場合はやり過ぎです。

これは、CoreMedia、AVFoundation、または AudioToolbox で処理できるものですか? そうでない場合、これを処理できる他のライブラリはありますか? Apple のドキュメントに関する私の調査では、関連する結果のみが得られました... MIDI ファイルについてです。しかし、Apple 独自のソフトウェアには、 iMovie の snap-to-beats 機能など、このような機能があります。

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

編集:もう少し掘り下げた後、私が探しているものの正しい用語はonset detectionです。

4

1 に答える 1

4

オンセット検出アルゴリズムには、生の音楽信号を調べることから、周波数ドメイン技術を使用することまで、さまざまな種類があります。

ビートがどこにあるかをすばやく簡単に判断したい場合:

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

  2. 信号の二乗和平均を計算します: Sum(Xn ^2) / N(ここNで、 は あたりのサンプル数20-50ms)

より洗練されたテクニックが必要な場合は、次を調べてください。

https://adamhess.github.io/Onset_Detection_Nov302011.pdf

またはそれのハードコアな治療のために:

https://scholar.google.com/citations?view_op=view_citation&hl=en&user=PMHXcoAAAAAJ&citation_for_view=PMHXcoAAAAAJ:uJ-U7cs_P_0C

于 2012-04-03T14:17:12.757 に答える