我要获取我的音乐播放的时候的实时声音分贝大小,有没有大神有办法或者有demo给我看一下,在网上找了很多都没有一个解决方案 ,求大神指点,万分感谢!
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;
}
AudioManager提供了方法:
publicvoidsetStreamVolume(intstreamType,intindex,intflags)其中streamType有内置的常量,去文档里面就可以看到。
AudioManager mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
//通话音量
int max = mAudioManager.getStreamMaxVolume( AudioManager.STREAM_VOICE_CALL );
int current = mAudioManager.getStreamVolume( AudioManager.STREAM_VOICE_CALL );
//系统音量
max = mAudioManager.getStreamMaxVolume( AudioManager.STREAM_SYSTEM );
current = mAudioManager.getStreamVolume( AudioManager.STREAM_SYSTEM );
//铃声音量
max = mAudioManager.getStreamMaxVolume( AudioManager.STREAM_RING );
current = mAudioManager.getStreamVolume( AudioManager.STREAM_RING );
//音乐音量
max = mAudioManager.getStreamMaxVolume( AudioManager.STREAM_MUSIC );
current = mAudioManager.getStreamVolume( AudioManager.STREAM_MUSIC );
Log.d(MUSIC, max : + max + current : + current);
//提示声音音量
max = mAudioManager.getStreamMaxVolume( AudioManager.STREAM_ALARM );
current = mAudioManager.getStreamVolume( AudioManager.STREAM_ALARM );
有没有大神以前做过或者有类似的 求指导下, 谢谢啦!