Android AudioRecord初始化每次都失败

Dav*_*ave 13 android microphone audiorecord android-audiorecord

我的问题很容易解释 - 我试图创建一个AudioRecord对象,但它无法初始化(即在构造函数之后,getState返回0,表示失败).我在运行OS 2.2.1的MotoDroid 1上从Eclipse运行它.我的AndroidManifest.xml是AFAIK,使用了正确的权限,RECORD_AUDIO(我不知道如何确认):

<application android:icon="@drawable/icon" android:label="@string/app_name" android:debuggable="true">
    <uses-permission android:name="android.permission.RECORD_AUDIO"/>
    <activity android:name=".SphinxMic"
              android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>
Run Code Online (Sandbox Code Playgroud)

我执行以下操作来创建AudioRecord:

bufferSize = AudioRecord.getMinBufferSize(8000, CHANNEL_IN_MONO, ENCODING_PCM_8BIT);
audioRecorder = new AudioRecord(AudioSource.MIC, 8000, CHANNEL_IN_MONO, ENCODING_PCM_8BIT, 50*bufferSize);
if (audioRecorder.getState() != AudioRecord.STATE_INITIALIZED)
  throw new Exception("AudioRecord init failed");
Run Code Online (Sandbox Code Playgroud)

audioRecorder.getState()返回0(即STATE_UNINITIALIZED)

我还没有找到任何使用这个API的完整示例,我非常喜欢Android初学者,所以解决方案可能很简单.我该怎么做才能找出失败的原因?

有些人提出了类似的问题,但他们肯定遇到了与我不同的问题,因为他们批准的修复措施对我没有帮助.最值得注意的是这个.但批准的解决方案令人困惑,无论如何都不适用于我.我还尝试了各种比特率(8000,16000,11025,44100),单声道和立体声以及8和16比特.成功初始化后没有组合回来.

Luk*_*eau 40

我花了几个小时来解决这个问题,并发现了移动

<uses-permission android:name="android.permission.RECORD_AUDIO" />
Run Code Online (Sandbox Code Playgroud)

在应用程序块之外实际解决了它!

...
    </application>

    <uses-permission android:name="android.permission.RECORD_AUDIO" /> 
</manifest>
Run Code Online (Sandbox Code Playgroud)


bra*_*hy1 7

另一个问题:

RECORD_AUDIO在清单中启用了权限,但对于API级别23,我还必须在运行时请求权限.

  • 你是如何在运行时请求权限的? (2认同)