2016年8月22日 星期一

Unity筆記整理: 節拍檢測架構

上傳音樂的流程需要用到 bass.net library,本節僅介紹Bass 音頻庫。
節拍檢測主要以「分析高低頻率」及「偵測是否有節拍點」為目標。



一、Bass 音頻庫
簡介:BASS音頻庫是一款對非商業用戶免費的音頻處理類庫。功能強大,支持幾乎所有音頻的解碼編碼等處理。以及強大的擴展功能! BASS在很多軟件中都可以看到其身影,不管是音樂播放器還是視頻播放器還是其他媒體處理軟件。比如其中一款比較有名的叫做AIMP3的音樂播放器,裡面就用到BASS音頻庫。還有國產視頻軟件 快播,迅雷看看等等,裡面都有用到BASS音頻庫。

Bass 音頻庫官網:http://www.un4seen.com/
Bass 音頻庫使用入門:http://tieba.baidu.com/p/2643045626

僅需要下載其windows版的dll放入遊戲資料夾即可。

二、節拍檢測簡易架構

使用FFT algoritm(詳細:http://www.csie.ntnu.edu.tw/~u91029/Wave.html#7)來分析。
其資料結構:

  • public enum beatmode // 三種mode:Energy, Frequency, Both
  • public enum beatType // 四種type:無感應、高頻、中頻、低頻、強拍
  • ...和一堆樂理變數設定。


Function:

  • isBeat() 
  • setUpEnergy()
  • setUpFrequency ()
  • isBeatEnergy()
  • isBeatFrequency()


Start()時setup Energy 和 Frequency其細節數值。
設tIni和tIniF陣列的timer, 確保點與點之間不會重合。
每一次Update()都會判斷isBeat()和beatType的狀況。

關於isBeat() ,利用GetComponent<AudioSource>().GetSpectrumData,來得知其區塊內當前播放音樂的波譜資料(Provides a block of the currently playing audio source's spectrum data)。
判斷是何種beatMode後利用isBeatEnergy()和isBeatFrequency()做運算。


三、其他參考資料
尚未做成但值得研究的資料們。




1 則留言:

  1. 博主你好,我最近在研究类似的架构,请问可以加我qq:601064362 ,告诉我更多相关的细节吗?

    回覆刪除