2013-02-21 3 views
1

Я пытаюсь читать исходные данные из микрофона с помощью следующего кода:AudioRecord чтения() возвращает странные значения

  short buffer[] = new short[AudioRecord.getMinBufferSize(8000, 
        AudioFormat.CHANNEL_IN_MONO, 
        AudioFormat.ENCODING_PCM_16BIT)]; 
      Log.d("O_o",""+buffer.length); 
      AudioRecord rec = new AudioRecord(
        MediaRecorder.AudioSource.MIC, 8000, 
        AudioFormat.CHANNEL_IN_MONO, 
        AudioFormat.ENCODING_PCM_16BIT, buffer.length); 

      rec.startRecording(); 
      int read = rec.read(buffer, 0, buffer.length); 
      for (int i = 0; i < read; i++) { 
       Log.d("O_o",i+" "+buffer[i]); 
      } 
      rec.stop(); 
      rec.release(); 

Но буфера всегда заполнен 257 значений. Что случилось?

UDP: посмотреть как начальные значения i'ts. Вызов read() в цикле вызывает нормальные значения.

+0

Вы тестируете эмулятор? –

+0

Нет, на реальном устройстве. – styanton

+3

Lol .. приятный отладочный тег :) – JoxTraex

ответ

1

Вы обязательно должны взглянуть на this question + answer. Он показывает некоторый код, который очень улучшил бы ваш код.

В основном, ваша проблема заключается в том, что вы пытаетесь прочитать его синхронно. Процесс аудио, как правило, должен выполняться асинхронно, и вы будете получать 256 байт размером куски звука в любой момент времени.

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