。
MediaRecorder:
这个类的对象初始化比較麻烦。由于它是被设计用来录制一段完整的音频并写入文件系统中的。可是初始化之后获得振幅却比較方便,我们直接用它的无參方法getMaxAmplitude就可以获得一小段时间内音源数据中的最大振幅。
只是取最大值的可能弊端是会受到极端数据的影响。使得后来计算的分贝值波动比較大。只是这种方法是非常多录音应用计算音量等级所採用的办法。
该方法返回的是0到32767范围的16位整型。原理可能是对一段值域为-32768到32767的音源数据取当中绝对值最大的值并返回。这个值与单位为帕斯卡的声压值是有线性函数关系的。另外须要注意的是第一次调用这种方法取得的值是0,代入公式中算出的分贝值是负无穷大。故须要在代码中对这样的情况做推断。能够算出。因为getMaxAmplitude返回的数值最大是32767,因此算出的最大分贝值是90.3。
也就是说。博主令參考振幅值为1。计算出的分贝值正常值域为0 dB 到90.3 dB。
代码片:
package com.example.atest;
import java.io.File;
import java.io.IOException;
import android.media.MediaRecorder;
import android.os.Handler;
import android.util.Log;
/**
* amr音频处理
*/
public class MediaRecorderDemo {
private final String TAG = "MediaRecord";
private MediaRecorder mMediaRecorder;
public static final int MAX_LENGTH = 1000 * 60 * 10;// 最大录音时长1000*60*10;
private String filePath;
public MediaRecorderDemo(){
this.filePath = "/dev/null";
}
public MediaRecorderDemo(File file) {
this.filePath = file.getAbsolutePath();
}
private long startTime;
private long endTime;
/**
* 開始录音 使用amr格式
*
* 录音文件
* @return
*/
public void st