Как обрабатывать размеры аудио буфера, которые не делятся на 64 при работе с libpd?

API libpd позволяет обрабатывать аудио только в кадрах по 64 сэмпла за раз. В прошлом я устанавливал размер буфера аудиоустройства на число, кратное 64. Никаких проблем там нет.

Теперь мне нужно сделать приложение для Windows, совместимое с ASIO. Я использую RtAudio. Проблема заключается в том, что когда я инициализирую свою звуковую карту ASIO (Roland FA-66) с помощью API RtAudio, он игнорирует параметр размера буфера и выбирает один из его собственных, который не делится на 64.

Я думал об обходном пути. Это будет происходить в функции обратного вызова аудио:

  1. Убедитесь, что размер буфера не делится на 64. Если так:
  2. Скажите libpd обработать количество кадров, превышающее необходимый размер, и сохранить его во временном буфере.
  3. Используйте memcpy для копирования нужного количества кадров из временного буфера в выходной буфер.
  4. Используйте memcpy, чтобы сохранить дополнительные сэмплы в другом буфере (называемом extra) и использовать их при следующем вызове звукового обратного вызова.

Я не пробовал это, но я думаю, что это будет работать.

Однако я хотел бы знать, существует ли «стандартная» или «хорошо известная» процедура для решения этой проблемы. Может быть, есть предупреждения или советы, которые я не знаю?

1

Решение

Ваш подход кажется верным. Единственное, с чем вам нужно быть осторожным, это выравнивание памяти.

Вот отличная (и очень короткая) статья о memcpyПодводные камни, которые могут вызвать у вас головную боль: http://www.codepolice.org/c/memcpy.html

1

Другие решения


По вопросам рекламы [email protected]