Метод чтения Android AudioRecord: может ли он прочитать больше данных, чем было записано?

У меня много проблем с классом Android AudioRecord. Меня всегда смущало, как работает метод чтения в AudioRecord, надеюсь, кто-нибудь ответит...

Рассмотрим этот сценарий;

  1. Я создал новый объект AudioRecord со значением sampleRateInHz 44100 Гц.
  2. Затем я вызываю метод startRecording(), и устройство начинает записывать звук с микрофона.
  3. Ровно через 500 мс (или 22050 отсчетов) я вызываю метод чтения и пытаюсь прочитать 44100 отсчетов в новый массив длиной 44100.

Поскольку объект AudioRecord записывался только в течение 500 мс (или 22050 сэмплов), а я пытаюсь прочитать последние 44100 сэмплов, что произойдет? Мои возможные мысли:

  • Метод чтения будет бездействовать в течение 500 мс, пока не будет достаточно данных, а затем прочитать все 44100 записанных выборок или
  • Метод чтения читает то, что находится в буфере AudioRecord (внутри объекта AudioRecord) независимо от того, сколько данных было записано в него. Таким образом, в этом случае первые 22050 сэмплов будут содержать данные, записанные с микрофона, а последующие 22050 сэмплов будут содержать нули, поскольку функция чтения обращается к области буфера, в которую еще не выполнялась запись.

Я неустанно пытался проверить это на своем устройстве Android, но это действительно не так просто проверить. Чтобы ответить, потребуется больше ума, чем я... Любая помощь приветствуется...


person JoshR    schedule 21.03.2013    source источник


Ответы (1)


Я также нашел это неясным, поскольку документация Android на самом деле не говорит. Однако есть несколько ответов на SO, в которых люди подтверждают, что первый из ваших двух вариантов верен - метод блокируется до тех пор, пока не будет доступно достаточно данных. Посмотрите на второй ответ на этот вопрос для довольно подробного объяснения.

person devrobf    schedule 20.05.2013