Как изменить высоту тона (частоту дискретизации) во время исполнения с помощью portaudio?
Как изменить высоту тона (частоту дискретизации) во время выполнения с помощью portaudio? Большое спасибо.
1 ответ
Ресамплирование не является способностью PortAudio. Подобно собственным API ввода-вывода аудио, которые упаковывает PortAudio, потоки PA работают с постоянной частотой дискретизации. Чтобы изменить высоту (частоту воспроизведения) сэмпла, необходимо выполнить преобразование частоты сэмплирования на лету. Вы можете сделать это путем интерполяции исходного сигнала с использованием фазового индекса, который увеличивается с некоторой частотой, не равной единице.
В зависимости от ваших требований вы можете исследовать изменение ресэмплинга / интерполяции или изменение времени подачи.
Обычно используются высококачественные алгоритмы полиномиальной интерполяции с низким и средним качеством для аудио: линейная интерполяция и интерполяция кубического Эрмита. Более качественная интерполяция может быть выполнена с некоторым вариантом оконной интерполяции sinc. Библиотека, которую вы можете использовать для интерполяции sinc - это Secret Rabbit Code.
Для преобразования высоты звука во время (т. Е. Смещения высоты звука или растяжения времени) вы можете рассмотреть возможность использования библиотеки DIRAC, которая имеет версию с открытым исходным кодом для моносигналов. Доступны и другие коммерческие библиотеки, например, из исследования z-plane.