如下圖:
矩形框中是聲音文件: jazz_drum.mp3的振幅顯示。一條運動的黃線是當然播放位置。
空間中的五個torus會根據聲音的振幅縮放,與聲音同步~
程序依賴庫:
bass.h bass.lib bass.dll
glut.h glut.lib glut.dll
程序簡介:
1,chan:一個DWORD類型的全局句柄保持內存中的聲音數據
2,BASS_ChannelGetLength:獲得聲音文件的字節長度
每個像素字節數 = 文件的字節長度 / 顯示區域的寬度
Bpp = file_length / area_width
將文件的字節數據分爲area_width塊。每塊有bpp個字節。
3,QWORD pos = BASS_ChannelGetPosition(chan,BASS_POS_BYTE); 獲得當前播放字節的位置。4,DWORD wpos = pos / g_bypePerPixel; 獲得當前像素位置:第pos個字節位於第幾個數據塊
5,DWORD peaks_level = BASS_ChannelGetLevel(chan); 獲得當前波峯的峯值,振幅
DWORD avg_level = ( LOWORD(peaks_level) + HIWORD(peaks_level) )/2; 需要計算出平均峯值。
6,波峯值的區間是0~32768,所以可以將平均峯值轉化到區間:[0,1]。在display函數中,每次根據當前聲音的波峯值轉化到標準0,1區間,以此作爲3d場景中的模型縮放因子。
7,scanPeaks函數是預處理聲音文件,存儲所有的峯值數據顯示。
8,可以修改width的數值。Width值越大,顯示出來的聲音波更加精確。
修改日誌:
11/7/2010 增加聲音重複播放!
效果圖: