Изменение высоты тона данных PCM в C#
Вопрос
У меня есть программа, которая загружает PCM-данные с веб-сервера, которые позже использует для воспроизведения через стандартный PCM-плеер.Я хочу иметь возможность разрешать пользователям изменять высоту звука данных PCM во время их воспроизведения.
Кто-нибудь знает, как это сделать?
Решение
Я не знаю ни одной библиотеки цифровой обработки сигналов для C #, но, похоже, это полный исходный образец для изменения высоты тона в .net.:
http://sites.google.com/site/mikescoderama/pitch-shifting
Другие советы
Самое простое решение - воспроизвести звук с более высокой частотой дискретизации, чем он был записан - воспроизведение файла с частотой 22 кГц при частоте 44 кГц удвоит высоту звука.Вы можете добиться того же, просто выбросив некоторые сэмплы из звука (плохое качество) или передискретизировав звук (хорошее качество, если используется хороший алгоритм, такой как интерполяция sinc).
Но существует зависимость - изменение высоты тона при воспроизведении с разной частотой дискретизации изменит не только высоту тона, но и длину звука.Длительность и высоту звука можно изменять независимо, но это не так просто и требует изрядной обработки пения для достижения хорошего качества.Обычно это делается в частотной области с использованием быстрых преобразований Фурье.