区分大小写- Android AudioRecord无法找到工作配置



我正在尝试缓冲音频数据以分析分贝水平。

我使用AudioRecord类,因为它允许从缓冲区处理数据,而不需要将它们存储在文件中。

我正在使用

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

许可。Edit:这是错误的!

我用

从我在onStart()的主要活动中启动它作为服务
Intent intent = new Intent(this, Audio2.class);
startService(intent);

业务在onStartCommand(...)期间呼叫findAudioRecord()

private int[] sampleRates = new int[] { 44_100, 22_050, 11_025, 8_000 };
private short[] audioFormats = new short[] { AudioFormat.ENCODING_PCM_16BIT, AudioFormat.ENCODING_PCM_8BIT };
private short[] channelConfigs = new short[] { AudioFormat.CHANNEL_IN_MONO, AudioFormat.CHANNEL_IN_STEREO };
public AudioRecord findAudioRecord() {
    for (int rate : sampleRates){
        for (short audioFormat : audioFormats){
            for (short channelConfig : channelConfigs){
                try {
                    Log.d(TAG, "Attempting rate " + rate + "Hz, " + audioFormat + " bits, channel: " + channelConfig);
                    bufferSize = AudioRecord.getMinBufferSize(rate, channelConfig, audioFormat);
                    if (bufferSize != AudioRecord.ERROR_BAD_VALUE) {
                        AudioRecord recorder = new AudioRecord(MediaRecorder.AudioSource.DEFAULT, rate, channelConfig, audioFormat, bufferSize*10);
                        if (recorder.getState() == AudioRecord.STATE_INITIALIZED) {
                            return recorder;
                        } else {
                            recorder.release();
                        }
                    }
                } catch (Exception e) {
                    Log.e(TAG, rate + "Exception, keep trying.",e);
                }
            }
        }
    }
    Log.wtf(TAG, "No working configuration found!");
    return null;
}

这总是返回null。我得到错误:

E/AudioRecord﹕ AudioFlinger could not create record track, status: -1
E/AudioRecord-JNI﹕ Error creating AudioRecord instance: initialization check failed.
E/AudioRecord-Java﹕ android.media.AudioRecord Error code -20 when initializing native AudioRecord object.

我用的是三星Galaxy S4。

我的尝试没有成功:

  • 多次重启设备
  • 在GT-S6790N上进行了测试
  • 在模拟设备上尝试过
  • AudioRecord对象未初始化尝试了这篇文章中的所有内容(以及任何形式的相关文章)

经过几个小时的努力,我终于找到了问题所在。如果您使用Android Studio的自动完成功能并键入

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

后跟回车,Android Studio将会填充

<uses-permission android:name="ANDROID.PERMISSION.RECORD_AUDIO" />
然而,这不起作用,因为大小写显然很重要。没有警告,什么都没有。在我把它改成 之后
<uses-permission android:name="android.permission.RECORD_AUDIO" />

最新更新