基於bass& glut的聲音可視化

 

 

如下圖:

矩形框中是聲音文件: jazz_drum.mp3的振幅顯示。一條運動的黃線是當然播放位置。

空間中的五個torus會根據聲音的振幅縮放,與聲音同步~

 

 

程序依賴庫:

bass.h  bass.lib  bass.dll

glut.h  glut.lib  glut.dll

 

程序簡介:

1chan:一個DWORD類型的全局句柄保持內存中的聲音數據

2BASS_ChannelGetLength:獲得聲音文件的字節長度

每個像素字節數 = 文件的字節長度 / 顯示區域的寬度

Bpp = file_length / area_width

將文件的字節數據分爲area_width塊。每塊有bpp個字節。

3QWORD pos = BASS_ChannelGetPosition(chan,BASS_POS_BYTE); 獲得當前播放字節的位置。4DWORD wpos = pos / g_bypePerPixel; 獲得當前像素位置:第pos個字節位於第幾個數據塊

5DWORD peaks_level = BASS_ChannelGetLevel(chan);     獲得當前波峯的峯值,振幅

DWORD avg_level = ( LOWORD(peaks_level) + HIWORD(peaks_level) )/2;  需要計算出平均峯值。

6,波峯值的區間是0~32768,所以可以將平均峯值轉化到區間:[0,1]。在display函數中,每次根據當前聲音的波峯值轉化到標準01區間,以此作爲3d場景中的模型縮放因子。

7scanPeaks函數是預處理聲音文件,存儲所有的峯值數據顯示。

8,可以修改width的數值。Width值越大,顯示出來的聲音波更加精確。

 

 

修改日誌:
11/7/2010 增加聲音重複播放!

效果圖:

 

發佈了218 篇原創文章 · 獲贊 94 · 訪問量 95萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章