不录音时返回麦克风输入的幅度

时间:2011-01-28 17:03:17

标签: java android audio

我有以下代码,需要能够在手机上收听麦克风并使用该值以图形方式显示在某种可视化工具上:

Timer micTimer = new Timer();
micTimer.schedule(new TimerTask(){
    @Override
    public void run(){
        int x = MediaRecorder.getAudioSourceMax();
        Log.v("Timer", "" + x);
    }
}, 0, 100);

我知道这可能是错误的。在课堂后期我使用AudioRecorder对象来录制一些后期处理的声音。在这里,我不想记录任何只是在可视化器上显示声音。此代码中的日志每100ms输出一次数字6。它可以与它自动调整增益有关吗?如果是这样,我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

好吧,我很遗憾地说Sam,但是如果没有录音你就无法从麦克风获得振幅。我开发了一个与此非常相似的应用程序。你必须开始录制,调用getMaxAmplitude()函数(它将返回0),等待一点,然后再次调用它,它将返回自上次调用函数以来的最大幅度。看看NoiseAlert app.这对我有帮助。

另外,作为附注,在我的研究中,我发现使用MediaRecorder对象更容易,因为它没有自动增益;你得到麦克风实际上听到的东西。

答案 1 :(得分:1)

您的代码中的日志实际上每100毫秒输出一次数字6。你应该做这个改变:

mediaRecorder = new MediaRecorder();
//...
//...
//int x = MediaRecorder.getAudioSourceMax(); change to:
int x = mediaRecorder.getMaxAmplitude();