Android AudioRecord не инициализируется

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

person Brad R.    schedule 12.11.2010    source источник


Ответы (2)


--редактировать--

Пожалуйста, смотрите ответ Билла.

--конец редактирования--

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

person tanyehzheng    schedule 12.11.2010
comment
Спасибо, думаю, я слишком поторопился, пытаясь заставить звук работать, не понимая, что должен это сделать. Огромное спасибо. - person Brad R.; 12.11.2010
comment
Зачем ему вибратор? - person Tom; 24.01.2011
comment
@Том, ты сделал мой день - person Zulqurnain Jutt; 13.03.2019

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

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

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

person Bill    schedule 10.04.2011