Итак, у меня есть AudioRecord, настроенный на работу с FFT для определения частот для определения нот.
Во время настройки прошу
AudioRecord.getMinBufferSize(rate, channelConfig, audioFormat)
Затем у меня есть несколько операторов if, которые устанавливают следующую большую степень двойки. Для моего телефона это обычно 2048 (2 ^ 11). Цель состоит в том, чтобы следующее, что я выполняю, было БПФ, для которого алгоритму требуется длина буфера, равная степени двойки.
Поправьте меня, если я ошибаюсь, но у меня сложилось впечатление, что причина, по которой вы находите минимальный размер буфера, заключается в том, что это уменьшит задержку.
Все было хорошо, пока я не прочитал, что для точного определения конкретных нот, особенно тех, которые имеют более низкую частоту, у вас должен быть больший размер выборки для подачи на БПФ; Желательно, чтобы размер выборки превышал 16 384 (2^14).
Я предполагаю, что вопрос, который у меня есть. Когда я создаю AudioRecord:
AudioRecord recorder = new AudioRecord(MediaRecorder.AudioSource.DEFAULT,
rate, channelConfig, audioFormat, bufferSize1);
могу ли я использовать один размер буфера, меньший для меньшей задержки, чем при чтении буфера:
AudioRecord().read(thisbuffer, 0, bufferSize2);
использовать другой размер буфера большей длины перед отправкой в БПФ? Или есть лучший способ сделать это?