• 全部
  • 问答

如何显示音量电平?

li_zhifu 2001-12-10 04:04:34
如何像好多多媒体播放软件那样动态地显示音量电平?(如Media Player 8)哪里有控件?或是给出实现的源代码就更好了。(在Win98下可用Vumeter,但它在Win2k上用不了)
...全文
342 点赞 收藏 11
写回复
11 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
Ken_Hall 2002-03-20
Sorry, 网速太慢,发了两次。
回复
Ken_Hall 2002-03-20
如果是你自己的代码在进行播放,如利用WaveOut或DSound,你应该都可以得到音频数据,电平的计算是基于求平均数的原理进行的:即在一个很短的Buffer中求所有采样的平均值。该平均值的求取是以已知音频数据的格式为前提的,具体讲就是要根据采样频率、采样的位数、立体声与否来对Buffer中的数据进行解释,从而得到每个声道的单个采样的采样值。这个采样值应该经过规一化(都转化到0.0~1.0区间,注意8bit是无符号整数而16bit则是有符号的)后再进行平均计算。这个平均值就可以近似看成该音频数据流在瞬时的音量。剩下的就是显示的问题了。

另外,在显示上,由于人耳对于音量大小的感觉是基于对数关系的,所以最好将电平的值换算为分贝值(取以10为底的对数,再进行线性变化以变化到可显示的区间)再进行显示。
回复
Ken_Hall 2002-03-20
如果是你自己的代码在进行播放,如利用WaveOut或DSound,你应该都可以得到音频数据,电平的计算是基于求平均数的原理进行的:即在一个很短的Buffer中求所有采样的平均值。该平均值的求取是以已知音频数据的格式为前提的,具体讲就是要根据采样频率、采样的位数、立体声与否来对Buffer中的数据进行解释,从而得到每个声道的单个采样的采样值。这个采样值应该经过规一化(都转化到0.0~1.0区间,注意8bit是无符号整数而16bit则是有符号的)后再进行平均计算。这个平均值就可以近似看成该音频数据流在瞬时的音量。剩下的就是显示的问题了。

另外,在显示上,由于人耳对于音量大小的感觉是基于对数关系的,所以最好将电平的值换算为分贝值(取以10为底的对数,再进行线性变化以变化到可显示的区间)再进行显示。
回复
li_zhifu 2002-03-19
贴子时间太长了,请大家多多看看,不管解决问题与否,3天之内结账。
回复
mzm100 2001-12-13
一般的讲,音频数据就是解码器的音频流,如果你能够得到数据流,电平就可以得到了,如果你使用PlaySound等API函数,是不能得到音频数据的。
回复
如果是MP3,可以看看 http://www.avsuper.com -> MP3 有例子程序的。
回复
li_zhifu 2001-12-10
问题是,怎样取得电平?
回复
mzm100 2001-12-10
其实很简单,用CStatic控件就可以实现该功能,从CStatic派生CXX类,再OnPaint()里画电平就行了,只要有点想象力,可以做的非常漂亮!
回复
cobi 2001-12-10
不懂,所以关注
回复
atongm 2001-12-10
强烈关注
回复
szchengyu 2001-12-10
强烈关注
回复
相关推荐
发帖
游戏开发
创建于2007-08-27

7920

社区成员

游戏开发相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2001-12-10 04:04
社区公告
暂无公告