У меня возникла проблема с использованием 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. Все это приводит к тому, что переменная test становится равной 0 после запуска состояния получения (неудачная инициализация).
Из всего, что я прочитал, кажется, что это должно правильно инициализировать объект. Я поиграл с множителем на 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();
}
}