基于bass& glut的声音可视化

102 篇文章 0 订阅
81 篇文章 2 订阅

 

 

如下图:

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

效果图:

 

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值