У меня возникла проблема с использованием 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();
}
}