Я хочу записывать звук PCM в течение нескольких часов, но я хочу сохранить только последние 5 минут записи при нажатии кнопки STOP. Значение, когда START нажата, и запись достигла 5 минут, следующим шагом будет удаление начала записи и добавление дополнительного буфера чтения в запись, чтобы 5 минут всегда оставались неизменными. Мне нужно сделать это с помощью AudioRecord.как записывать PCM в течение нескольких часов, но сохранять только последние 5 минут записи при остановке?
Я попытался использовать класс AudioRecord для записи 20 секунд вместо 5 минут. Я читал байты в один большой байтовый [] буфер. При нажатии кнопки START байты считываются в байт [] буфера, и когда 20 секунд достигнуты, он начинает перезаписывать буфер байта [] с начала, когда 40 секунд достигнуты, он снова начинает перезаписывать байт [] с начала, когда STOP нажат I перестроить буфер байта [] в правильную последовательность и записать в файл. Этот метод работает, но с его использованием мне нужно выделить память для байтового [] буфера с самого начала, а 5 минут слишком велики, я ударил ограничение размера кучи и закончил память. Я делаю это, используя частоту дискретизации 44100 Гц.
Итак, есть ли лучший способ сделать запись 5min, как описано выше, не выделяя слишком много памяти?
Я предполагаю, что для любого используемого вами метода потребуется как минимум этот объем памяти. – Keppil
Вы можете избежать ограничения размера кучи java с собственным распределением в jni-коде и циклическим буфером, реализованным там, однако вы все еще работаете на устройстве с ограниченной памятью и убийцей OOM, который будет с энтузиазмом отправлять фоновые процессы, когда он заканчивается память для передних. Более низкая частота дискретизации или моно уменьшила бы потребность в памяти, поскольку, конечно же, было бы уже упомянутое сжатие. –