Как изменить высоту тона (частоту дискретизации) во время исполнения с помощью portaudio?

Как изменить высоту тона (частоту дискретизации) во время выполнения с помощью portaudio? Большое спасибо.

1 ответ

Ресамплирование не является способностью PortAudio. Подобно собственным API ввода-вывода аудио, которые упаковывает PortAudio, потоки PA работают с постоянной частотой дискретизации. Чтобы изменить высоту (частоту воспроизведения) сэмпла, необходимо выполнить преобразование частоты сэмплирования на лету. Вы можете сделать это путем интерполяции исходного сигнала с использованием фазового индекса, который увеличивается с некоторой частотой, не равной единице.

В зависимости от ваших требований вы можете исследовать изменение ресэмплинга / интерполяции или изменение времени подачи.

Обычно используются высококачественные алгоритмы полиномиальной интерполяции с низким и средним качеством для аудио: линейная интерполяция и интерполяция кубического Эрмита. Более качественная интерполяция может быть выполнена с некоторым вариантом оконной интерполяции sinc. Библиотека, которую вы можете использовать для интерполяции sinc - это Secret Rabbit Code.

Для преобразования высоты звука во время (т. Е. Смещения высоты звука или растяжения времени) вы можете рассмотреть возможность использования библиотеки DIRAC, которая имеет версию с открытым исходным кодом для моносигналов. Доступны и другие коммерческие библиотеки, например, из исследования z-plane.

Другие вопросы по тегам