Android AudioRecord не может инициализироваться - PullRequest
2 голосов
/ 12 ноября 2010

У меня возникла проблема с использованием AudioRecord для Android.Я прочитал столько, сколько я могу найти в Интернете об этом, но я не могу получить хорошую инициализацию.Я пробовал эмулятор Android 2.2, эмулятор 1.5 и мой телефон HTC Incredible под управлением Froyo.Эмуляторы и мой телефон не проходят инициализацию.

Я пробовал частоты дискретизации 8000, 11025 и 44100, форматы CHANNEL_IN_MONO / STEREO и CHANNEL_CONFIGURATION_MONO / STEREO, 8-битные и 16-битные кодировки (8-битный сбой getMinBufferSize)и AudioSource MIC и DEFAULT.Все результаты в результате проверки переменной становятся равными 0 после выполнения состояния get (неудачная инициализация).

Из всего, что я читал, кажется, что это должно правильно инициализировать объект.Я поиграл с множителем на 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 ]

14 голосов
/ 10 апреля 2011

Я думаю, он имеет в виду, что вам нужно разрешение RECORD_AUDIO в манифесте:

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

Это сработало для меня.

2 голосов
/ 12 ноября 2010

- изменить -

См. Ответ Билла.

- завершить редактирование -

Возможно, вам следует проверить, получили ли вы правильное разрешение.Например, вам нужно получить android.permission.VIBRATE в вашем файле AndroidManifest.xml, если вам нужно вибрировать устройство.

...