2010-11-12 164 views
2

我一直在使用AudioRecord for Android時遇到問題。我已經閱讀了儘可能多的網上有關它,但我似乎無法得到一個良好的初始化。我嘗試了Android 2.2模擬器,1.5模擬器和我的手機,HTC Incredible運行Froyo。仿真器和手機無法初始化。我嘗試過採樣率爲8000,11025和44100,CHANNEL_IN_MONO/STEREO和CHANNEL_CONFIGURATION_MONO/STEREO,8位和16位編碼(8位使getMinBufferSize失敗)以及MIC和DEFAULT的AudioSource格式。運行get狀態(初始化失敗)後,變量測試中的所有結果都變爲0。Android AudioRecord無法初始化

從我讀過的一切看來,這應該正確地初始化對象。我玩過buflen的乘法器,它的範圍從512(函數的結果)到102400,因爲我聽說HTC設備需要8192以上的東西。

爲了測試我的問題,我做了一個新的,儘可能簡單地重現我的問題的小型項目。我將所需的常量抽出到本地整數中,然後運行構造函數並訪問getState方法來檢查它是否工作。

package com.example.audiorecordtest; 

import android.app.Activity; 
import android.os.Bundle; 
import android.media.AudioFormat; 
import android.media.AudioRecord; 
import android.media.MediaRecorder; 

public class audioRecordTest extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     int freq =8000; 
     int chan = AudioFormat.CHANNEL_IN_MONO; 
     int enc = AudioFormat.ENCODING_PCM_16BIT; 
     int src = MediaRecorder.AudioSource.MIC; 
     int buflen = AudioRecord.getMinBufferSize(freq, chan, enc); 
     AudioRecord ar = new AudioRecord(src,freq,chan,enc,20*buflen); 
     int test = ar.getState(); 
    } 
} 

回答

2

- 編輯 -

請參閱比爾的答案。

--end edit--

也許你應該檢查你是否獲得了正確的許可。 例如如果需要振動設備,則需要在AndroidManifest.xml文件中獲取android.permission.VIBRATE。

+0

謝謝,我猜想我跳得有點太快,試圖讓音頻工作,卻沒有意識到我必須這樣做。謝謝一堆。 – 2010-11-12 13:27:07

+8

他爲什麼需要使用振動器? – Tom 2011-01-24 11:57:35

14

我想他的意思是你需要的RECORD_AUDIO權限在清單:

<uses-permission android:name="android.permission.RECORD_AUDIO" /> 

爲我工作。

相關問題