Изменение высоты тона данных PCM в C#

У меня есть программа, которая загружает данные PCM с веб-сервера, а затем использует их для воспроизведения через стандартный проигрыватель PCM. Я хочу, чтобы пользователи могли изменять высоту тона данных PCM во время их воспроизведения.

Кто-нибудь знает как это сделать?


person williamtroup    schedule 07.07.2009    source источник


Ответы (2)


Я не знаю какой-либо библиотеки цифровой обработки сигналов для C#, но это, кажется, полный исходный образец для смещения высоты тона в .net.:
http://sites.google.com/site/mikescoderama/pitch-shifting

person Thomas Zoechling    schedule 07.07.2009
comment
Кто-нибудь использовал этот алгоритм с успехом ?? я не могу заставить его работать - person Francesco; 01.10.2013

Самое простое решение — воспроизвести звук с более высокой частотой дискретизации, чем он был записан — воспроизведение файла 22 кГц с частотой 44 кГц удвоит высоту тона. Вы можете добиться того же, просто выбросив некоторые сэмплы из звука (плохое качество) или передискретизировав звук (хорошее качество, если используется хороший алгоритм, такой как интерполяция sinc).

Но есть зависимость — изменение высоты тона путем воспроизведения с разной частотой дискретизации изменит не только высоту тона, но и продолжительность звука. Можно независимо изменить продолжительность и высоту тона, но это не так просто и требует значительной обработки сигнала для достижения хорошего качества. Обычно это делается в частотной области с использованием быстрых преобразований Фурье.

person Daniel Brückner    schedule 07.07.2009