android 录音获取相关值

录音音量监测线程实现
本文介绍了一个基于Android平台的录音音量监测线程的实现方法,通过AudioRecord类实时捕捉麦克风输入的音频数据,并计算音频的音量大小及分贝值。该线程能够启动和暂停,便于在Activity的生命周期中管理。
//
class  VoiceVolumeThread extends Thread{
    private AudioRecord maudiorecord;
    private int bs;
    private int SAMPLE_RATE_IN_HZ = 8000;
    private boolean isRun = false;

    public VoiceVolumeThread() {
        super();
        bs = AudioRecord.getMinBufferSize(SAMPLE_RATE_IN_HZ, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT);
        maudiorecord = new AudioRecord(MediaRecorder.AudioSource.MIC, SAMPLE_RATE_IN_HZ, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT, bs);

    }


    @Override
    public void run() {
        super.run();
        maudiorecord .startRecording();
        // 用于读取的buffer
         byte[] buffer = new byte[bs]; isRun = true; while (isRun) {
            int r = maudiorecord.read(buffer, 0, bs);
            int v = 0;
                // 将 buffer 内容取出,进行平方和运算
            for (int i = 0; i < buffer.length; i++) {
        // 这里没有做运算的优化,为了更加清晰的展示代码
                v += buffer[i] * buffer[i];
            }
        // 平方和除以数据总长度,得到音量大小。可以获取白噪声值,然后对实际采样进行标准化。
        // 如果想利用这个数值进行操作,建议用 sendMessage 将其抛出,在 Handler 里进行处理。
            Log.d(TAG, String.valueOf(v / (float) r));
            double dB = 10*Math.log10(v/(double)r);
            Log.d(TAG,"分贝:"+dB);

        }
        maudiorecord.stop();

    }

    public void pause() {
        // 在调用本线程的 Activity 的 onPause 里调用,以便 Activity 暂停时释放麦克风
        isRun = false;
    }
    public void start() {
        // 在调用本线程的 Activity 的 onResume 里调用,以便 Activity 恢复后继续获取麦克风输入音量
        if (!isRun) {
            super.start();
        }
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值