2

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

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

Кажется, из всего, что я прочитал, это должно правильно инициализировать объект. Я играл с множителем на buflen, чтобы он варьировался от 512 (результат функции) до 102400, потому что я слышал, что устройствам HTC требуется что-то выше 8192.

Для тестирования моей проблемы я создал новую, небольшой проект, который как можно проще воссоздает мою проблему. Я вытаскиваю константы, необходимые в локальные ints, затем запускаю конструктор и обращаюсь к методу 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

--edit--

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

--end edit--

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

+0

Спасибо, думаю, я слишком быстро вскочил, пытаясь заставить звук работать, не понимая, что я должен был это сделать. Огромное спасибо. –

+8

Зачем ему нужен вибратор? – Tom

14

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

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

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

Смежные вопросы