2011-01-28 122 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();