Я играю с библиотекой Android AudioRecord, пытаясь заставить приложение непрерывно считывать данные из audioBuffer. Я думаю, чтобы заставить мое приложение работать, мне нужно лучше понять, как инициализируется буфер с помощью конструктора.
Например, если я инициализирую новый объект AudioRecord:
recorder = new AudioRecord(AudioSource.MIC, 44100, AudioFormat.CHANNEL_IN_MONO,
AudioFormat.ENCODING_PCM_16BIT, 2205000); //50 seconds worth
В приложении я хочу хранить последние 50 секунд данных в инициализированном здесь буфере, но я хочу периодически вытаскивать последние 10 секунд данных (и все 50, если выполняется условие).
Прежде всего, насколько я понимаю, функция recorder.read(short readData[...)
копирует часть внутреннего буфера в массив, который я передаю (?).
Я предполагаю, что внутренний буфер является чем-то вроде кольцевого буфера, так как же я узнаю, какой была последняя выборка? Или это обрабатывается внутри, когда я вызываю recorder.read(short readData[1000],0,1000)
? Дает ли это мне последние 1000 образцов, первые 1000 образцов? Насколько я могу судить, второй параметр (смещение) смещается туда, куда он пишет в параметре readData.
Спасибо!