android 如何监听扬声器分贝的大小

sno_guo 2014-12-12 04:46:18
大家好,我想实现这样的功能:
我自己的APP中有一个函数可以监听 扬声器当前播放声音的大小.
即: 当android原生的播放器在播放轻音乐的时候, 我获取到的音量分贝是很小的, 当播放器播放 劲爆高音的音乐时, 这时我获取到的音量分贝很大。

请问下这个功能如何来实现, 我看AudioManager里没有获取当前音量分贝的函数. 请指教下, 谢谢.


...全文
675 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
nuptmahaibin 2017-04-26
  • 打赏
  • 举报
回复
引用 1 楼 linshunhuang1 的回复:
AudioRecord 可以用来监听环境声音。通过计算每段声音可以求声贝

	public double countDb (short[] data)  
	{  
		float BASE=32768f;
		float maxAmplitude = 0;
		
		for (int i = 0; i < data.length; i++) 
		{
			maxAmplitude += data[i] * data[i];
		}
		maxAmplitude=(float)Math.sqrt(maxAmplitude/data.length);
		float ratio=maxAmplitude / BASE;
		float db =0;
		if(ratio>0)
		{
			db = (float) (20 * Math.log10(ratio))+100;
		}
		
		return db;
	}
问两个问题: 1、short[] data是用AudioRecord的getbuff获取的吗? 2、BASE取32768f,算出的dB值再加100是什么原理?
zqq8419792 2015-08-04
  • 打赏
  • 举报
回复
LZ你解决了问题没有?
sno_guo 2014-12-16
  • 打赏
  • 举报
回复
哦, 谢谢, 这个也是一个办法, 不过 AudioRecord也有一个直接获取分贝的函数: getMaxAmplitude的函数,可以直接获取。 但我一直感觉这样不是很好, 想在没有外音的时候,也可以获取音乐的实时分贝。 谢谢
7号南孚电池 2014-12-15
  • 打赏
  • 举报
回复
AudioRecord 可以用来监听环境声音。通过计算每段声音可以求声贝

	public double countDb (short[] data)  
	{  
		float BASE=32768f;
		float maxAmplitude = 0;
		
		for (int i = 0; i < data.length; i++) 
		{
			maxAmplitude += data[i] * data[i];
		}
		maxAmplitude=(float)Math.sqrt(maxAmplitude/data.length);
		float ratio=maxAmplitude / BASE;
		float db =0;
		if(ratio>0)
		{
			db = (float) (20 * Math.log10(ratio))+100;
		}
		
		return db;
	}

80,348

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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