如何显示音量电平?

li_zhifu 2001-12-10 04:04:34
如何像好多多媒体播放软件那样动态地显示音量电平?(如Media Player 8)哪里有控件?或是给出实现的源代码就更好了。(在Win98下可用Vumeter,但它在Win2k上用不了)
...全文
550 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
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函数,是不能得到音频数据的。
单眼皮的老虎 2001-12-10
  • 打赏
  • 举报
回复
如果是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
  • 打赏
  • 举报
回复
强烈关注

8,325

社区成员

发帖
与我相关
我的任务
社区描述
游戏开发相关内容讨论专区
社区管理员
  • 游戏开发
  • 呆呆敲代码的小Y
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧