Android分贝仪

android分贝仪
邻居的音响影响你的睡眠?工地的噪音影响你的听力?
利用手机的咪克风,测量声音强度.
你需要android的录音AudioRecord接收声音
static android.media.AudioRecord          Audio_Record;
每个采样单位所占空间
static int BitsPerSample = 16;
设置音频采样率,44100是目前的标准,但是某些设备仍然支持22050,16000,11025
static int    Audio_Frequency = 44100;音频采样率
设置音频的录制的声道CHANNEL_IN_STEREO为双声道,CHANNEL_CONFIGURATION_MONO为单声道
设置声道配置-单声道,双声道除非你有两个咪克风,否则无意义.
static int    Audio_Channel   = AudioFormat.CHANNEL_CONFIGURATION_MONO;
static int    Audio_Channel_Count = 1;// 一个声道
static int    Audio_Encoding  =  AudioFormat.ENCODING_PCM_16BIT;// 音频编码
static byte   Audio_Buffer[];
static int    Audio_Buffer_Size;

1.计算缓冲的大小
Audio_Buffer_Size = android.media.AudioRecord.getMinBufferSize(Audio_Frequency, Audio_Channel, Audio_Encoding);
2.分配内存空间
Audio_Buffer = new byte[Audio_Buffer_Size];
3.分配录音对象
Audio_Record = new android.media.AudioRecord(MediaRecorder.AudioSource.MIC,
Audio_Frequency, Audio_Channel, Audio_Encoding,
Audio_Buffer_Size);
4.启动录音
Audio_Record.startRecording();
5.退出时要释放资源
Audio_Record.stop();// 停止
Audio_Record.release();// 释放

读取音频数据
size = Audio_Record.read(Audio_Buffer,0, Audio_Buffer_Size);
if(size == android.media.AudioRecord.ERROR_INVALID_OPERATION )
return true;
v = 0;
Audio_Size = Audio_Size + size;// 文件的大小

for(int i=0;i<size;i=i+2)
{
value = (Audio_Buffer[i+1] << 8) + Audio_Buffer[i];
v = v + (value * value);
}
平方和除以数据总长度,得到音量大小。
mean = v /(double)(size);  // 音量
最后计算分贝
Decibel_Val = 10 * Math.log10(mean);

创建新的线程
Audio_Thread = new Thread(new Runnable() {
public void run() {
while(Audio_State == STATE_RUN)
{
Read(); // 读取

}

Audio_Record.stop();// 停止
Audio_Record.release();// 释放
Audio_Record = null;
Audio_Thread = null;
}} );

評論