2011-01-28 33 views
3

我有下面的代码,并需要能够听手机上的麦克风并使用该值要在某种可视化的图形显示:麦克风输入归来幅度时,没有记录

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

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

回答

2

嗯,我很抱歉地说Sam,但是你不能从麦克风没有录音得到振幅。我开发了一个与此非常相似的应用程序。你必须开始记录,调用getMaxAmplitude()函数(它将返回0),稍等一会,然后再次调用它,它将返回自函数最后调用以来的最大幅度。看看NoiseAlert app.它真的帮了我。另外,作为一个附注,在我的研究中,我发现使用MediaRecorder对象更容易,因为它没有自动增益;你会得到麦克风实际上“听到”的内容。

+0

我试过NoiseAlert应用程序,我在我自己的应用程序中使用代码。 getMaxAmplitude()返回最大值,只是将我的手指靠近麦克风,或者只是说...我的设备中的麦克风是否损坏?录制的音频听起来不错 – Mirko 2013-01-14 17:55:48

1

您的代码中的日志实际上每100ms只输出数字6。你应该做出这样的改变:

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