如下图:
矩形框中是声音文件: 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 增加声音重复播放!
效果图: