У меня много проблем с классом Android AudioRecord. Меня всегда смущало, как работает метод чтения в AudioRecord, надеюсь, кто-нибудь ответит...
Рассмотрим этот сценарий;
- Я создал новый объект AudioRecord со значением sampleRateInHz 44100 Гц.
- Затем я вызываю метод startRecording(), и устройство начинает записывать звук с микрофона.
- Ровно через 500 мс (или 22050 отсчетов) я вызываю метод чтения и пытаюсь прочитать 44100 отсчетов в новый массив длиной 44100.
Поскольку объект AudioRecord записывался только в течение 500 мс (или 22050 сэмплов), а я пытаюсь прочитать последние 44100 сэмплов, что произойдет? Мои возможные мысли:
- Метод чтения будет бездействовать в течение 500 мс, пока не будет достаточно данных, а затем прочитать все 44100 записанных выборок или
- Метод чтения читает то, что находится в буфере AudioRecord (внутри объекта AudioRecord) независимо от того, сколько данных было записано в него. Таким образом, в этом случае первые 22050 сэмплов будут содержать данные, записанные с микрофона, а последующие 22050 сэмплов будут содержать нули, поскольку функция чтения обращается к области буфера, в которую еще не выполнялась запись.
Я неустанно пытался проверить это на своем устройстве Android, но это действительно не так просто проверить. Чтобы ответить, потребуется больше ума, чем я... Любая помощь приветствуется...