Как работать с размерами аудио буфера, которые не делятся на 64 при работе с libpd?
API libpd позволяет обрабатывать аудио только в кадрах по 64 сэмпла за раз. В прошлом я устанавливал размер буфера аудиоустройства на число, кратное 64. Никаких проблем там нет.
Теперь мне нужно сделать приложение для Windows, совместимое с ASIO. Я использую RtAudio. Проблема в том, что когда я инициализирую свою звуковую карту ASIO (Roland FA-66) с помощью API RtAudio, он игнорирует параметр размера буфера и выбирает один из его собственных, который не делится на 64.
Я думал об обходном пути. Это будет происходить в функции обратного вызова аудио:
- Убедитесь, что размер буфера не делится на 64. Если так:
- Скажите libpd обработать количество кадров, превышающее необходимый размер, и сохранить его во временном буфере.
- Используйте memcpy для копирования нужного количества кадров из временного буфера в выходной буфер.
- Используйте memcpy, чтобы сохранить дополнительные сэмплы в другом буфере (называемом extra) и использовать их при следующем вызове звукового обратного вызова.
Я не пробовал это, но я думаю, что это будет работать.
Однако я хотел бы знать, существует ли "стандартная" или "общеизвестная" процедура для решения этой проблемы. Может быть, есть предупреждения или советы, которые я не знаю?
1 ответ
Ваш подход кажется верным. Единственное, с чем вам нужно быть осторожным, это выравнивание памяти.
Вот отличная (и очень короткая) статья о memcpy
Подводные камни, которые могут вызвать у вас головную боль: http://www.codepolice.org/c/memcpy.html