2012-11-26 35 views
10

我知道Visualizer在使用android Media Player播放音頻時顯示一些波。如何在Android中錄製音頻時使用Visualizer

但我想在錄製音頻的同時錄製視頻展示,同時錄製我想顯示基於用戶語音節拍改變的線性波形。

是否有可能在android中完成。

+0

將水平儀是足夠的,還是你需要每個頻率級別? – elgui

+0

我需要atleast一些節拍值來繪製我自己使用圖形api的圖形 – koti

+0

隨着時間間隔的增加繪製記錄的字節..請參閱下面的答案 – everlasto

回答

14

通過調用每x毫秒的MediaRecorder.getMaxAmplitude(),你要去有(從official documentation):

因爲到 最後一次調用這個方法被採樣的最大絕對幅度。

然後,您可以實時處理此值以繪製圖形或更改某些視圖屬性。
並不完美,但我希望它有助於=)

編輯:只是讓你知道,檢索到的值將是相同的在所有的Android設備:0和32767之間(我有超過10,000用戶報告當他們吹麥克風時給我這個數值)。

+0

謝謝我會嘗試這個 – koti

+0

它需要指定輸出文件..是否可以跳過? –

+0

不,它不能,給這樣的記錄器: File cacheDir = getWritableCacheDir(); samplePath = cacheDir.getAbsolutePath()+「/ sample」; mRecorder.setOutputFile(samplePath); 並在完成後刪除它... – elgui

1

您可能需要使用AudioRecorder類代替MediaRecorder。

檢查AudioRecorder#read(...)將音頻數據放到byte []而不是直接放到文件中的方法。

要顯示圖形的變化,您必須分析數據(以PCM 8或16位編碼 - link)並實時更新圖形。

3

兩個重要的事情:

  • 你需要轉換直播字節(從話筒),以序繪製它們的數值。
  • 由於您使用實時圖表來繪製這些點 使用SurfaceView。

    轉換記錄字節數值參考: Android: Listener to record sound if any sound occurs在那裏你會看到變量「TEMP」握着你的聲音的數值。

    Plot points 這些數字值表示您的Y值,並以X(時間間隔)值(0,1,2 ..)爲增量繪製曲線圖。使用SurfaceView 例如..,

//canvas.drawLine(previous X value,previous Y value,X,Y, paint); 
canvas.drawPoint(X,Y,paint); 
SurfaceHolder.unlockCanvasAndPost(canvas); 

你不必繪製所有值,效率可以用你的條件和一定的時間間隔情節過濾那些值。

希望這有助於:)