Android AudioRecord无法初始化

时间:2010-11-12 04:40:38

标签: android android-emulator audiorecord android-audiorecord

我在使用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。

从我读过的所有内容看来,这应该正确初始化对象。我已经玩过buflen的乘数,它的范围从512(函数的结果)到102400,因为我听说过HTC设备需要8192以上的东西。

为了测试我的问题,我创建了一个新的小项目,尽可能简单地重现我的问题。我将所需的常量拉出到本地int中,然后运行构造函数并访问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 个答案:

答案 0 :(得分:14)

我认为他的意思是你需要清单中的RECORD_AUDIO权限:

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

这对我有用。

答案 1 :(得分:2)

- 编辑 -

请参阅比尔的回答。

- 结束编辑 -

也许你应该检查一下你是否获得了正确的许可。 例如如果需要振动设备,则需要在AndroidManifest.xml文件中获取android.permission.VIBRATE。