2012-02-20 68 views
12

前言:這是我的第一個關於堆棧溢出的音頻相關問題,所以我會盡力將其儘可能最好地表達出來,編輯歡迎。 )使用AVFoundation/CoreMedia /其他框架來檢測節拍/發音

我正在創建一個允許用戶循環播放音樂的應用程序。目前我們的原型允許這些「循環標記」(實現爲UISliders)每秒捕捉一次,指定循環的開始和結束。顯然,當循環播放音樂時,秒是處理這種情況的一種非常粗糙的方式,所以我想用beat來代替。

我不想做的比標記以外的任何擊敗了UISliders捕捉到:

  • 訂閱我們的loadMusic方法的音頻文件。
  • 通過庫運行它來檢測節拍或它們之間的時間間隔(也許)。
  • 將該值輸入到滑塊的setNumberOfTickMarks:方法中。
  • 利潤!

不幸的是,我通過Google和SO運行的大部分結果都產生了更多高級節拍檢測庫,如混音器將使用的那些。誇大我的情況。

這是CoreMedia,AVFoundation或AudioToolbox可以處理的事情嗎?如果沒有,是否還有其他庫可以處理這個問題?我對蘋果文檔的研究僅僅爲MIDI文件產生了相關的結果。但是蘋果自己的軟件具有這樣的功能,例如iMovie's snap-to-beats functionality

在這一點上,任何指導,代碼或摘要都是非常有用的。

編輯:做了一些更四處之後,它似乎是正確的術語爲我正在尋找的是開始檢測

+1

那麼,你需要獲得純PCM數據。選擇音頻庫提供的內容並將現有的algortihms應用於數據 – 2012-02-20 11:11:25

+0

看到這個問題?它似乎有一些相當不錯的解決方案的鏈接。 http://stackoverflow.com/questions/657073/how-to-detect-bpm-of-the-song-by-programming – 2012-03-03 22:55:39

回答

4

通過查看原始音樂信號到使用頻域技術,發音檢測算法有許多種類。

如果你想有一個快速簡便的方法來determin其中節拍:

  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