Android: код ошибки AudioRecord -20 при инициализации собственного объекта AudioRecord

Android: я хочу читать буферы с микрофона, чтобы я мог выполнять на нем процесс. Ниже приведен мой код.

int sampleRateInHz = 8000;// 44100, 22050 and 11025
        int channelConfig = AudioFormat.CHANNEL_CONFIGURATION_MONO;
        int audioFormat = AudioFormat.ENCODING_PCM_16BIT;

        //int bufferSize =11025 + 
        int bufferSize = AudioRecord.getMinBufferSize(sampleRateInHz,channelConfig, audioFormat);


        short[] buffer = new short[bufferSize];

        AudioRecord audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC, sampleRateInHz,channelConfig, audioFormat, bufferSize);

        if(audioRecord.getState()== AudioRecord.STATE_INITIALIZED){
            audioRecord.startRecording();
            Log.e("recording", "before");


            boolean flag = true;
            while (flag) {
                int bufferReadResult = audioRecord.read(buffer, 0, bufferSize);
                System.out.println(buffer);
            }

            audioRecord.stop();
            audioRecord.release();
        }
        Log.e("recording", "stopeed");


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

Я получаю следующую ошибку каждый раз, когда пытаюсь протестировать программу

06-04 00:18:17.222: E/AudioRecord-Java(488): [ android.media.AudioRecord ] Код ошибки -20 при инициализации собственного объекта AudioRecord.


person d-man    schedule 03.06.2012    source источник


Ответы (2)


Насколько я понимаю, CHANNEL_CONFIGURATION_MONO устарел, и вместо него следует использовать CHANNEL_IN_MONO при чтении в буфер. У меня была аналогичная проблема с созданием экземпляра объекта AudioRecord, и это оказалось для меня решением.

person user1429581    schedule 03.06.2012
comment
Мой уровень API 7 и в API 7 нет CHANNEL_IN_MONO только CHANNEL_CONFIGURATION_MONO - person d-man; 03.06.2012
comment
Я использовал платформу Android 1.5 уровня API 3, вот в чем проблема. Я обновил уровень API до уровня API 7, который является платформой 2.1, и это исправлено. Я также изменил CHANNEL_CONFIGURATION_MONO на CHANNEL_IN_MONO. Я также заметил, что на уровне API 3 в эмуляторе нет свойства для записи звука. спасибо за большую помощь. - person d-man; 04.06.2012

Это исключение также возникает, если

  1. аудиозапись уже идет или
  2. запись недоступна или
  3. У приложения нет надлежащего разрешения, например: у приложения нет разрешения на запись и т. д.
person Jeevan    schedule 17.05.2013
comment
Здесь важно третье предложение, так как ошибка вообще не является описательной. Для всех остальных просто добавьте это в свой манифест: ‹uses-permission android:name=android.permission.RECORD_AUDIO/› - person ajselvig; 16.09.2013
comment
Просто для новичков в Android, когда targetApi ›= 23, вам нужно предоставить разрешение во время выполнения. ознакомьтесь с этой статьей - person Tura; 18.06.2018