android 版 tom猫录音

tom猫上面的猫会在音量大的时候竖起耳朵录音。用什么方法能监听mic的音量,在音量达到一定值以后开始录音呢?我用到AudioRecord可以得到“振幅”,我就不知道如何在... tom猫上面的猫会在音量大的时候竖起耳朵录音。
用什么方法能监听mic的音量,在音量达到一定值以后开始录音呢?
我用到AudioRecord可以得到“振幅”,我就不知道如何在AudioRecord一直获取振幅的情况下,在达到条件后开始录音!
请指教!最好能给出代码啊~
或发我邮箱:ydx1987@vip.qq.com
展开
 我来答
帐号已注销
2012-04-28 · TA获得超过890个赞
知道小有建树答主
回答量:318
采纳率:0%
帮助的人:409万
展开全部
有这样的一个例子,测试测试看?希望可以帮到你。

import android.media.AudioFormat;
import android.media.AudioRecord;
import android.media.MediaRecorder;
import android.util.Log;

public class RecordThread extends Thread {
private AudioRecord ar;
private int bs;
private static int SAMPLE_RATE_IN_HZ = 8000;
private boolean isRun = false;

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

public void run() {
super.run();
ar.startRecording();
// 用于读取的 buffer
byte[] buffer = new byte[bs];
isRun = true;
while (isRun) {
int r = ar.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("spl", String.valueOf(v / (float) r));
}
ar.stop();
}

public void pause() {
// 在调用本线程的 Activity 的 onPause 里调用,以便 Activity 暂停时释放麦克风
isRun = false;
}

public void start() {
// 在调用本线程的 Activity 的 onResume 里调用,以便 Activity 恢复后继续获取麦克风输入音量
if (!isRun) {
super.start();
}
}
}
追问
这个是我第一次找到的例子,我也试了下!这个确实能监听到振幅。
但是,如果我想在振幅超过3000(也就是v / (float) r的值)的时候,开始录音并生成音频文件!
这个是我想得到的结果呢~
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式