Приложение C # WinForms для отображения формы сигнала воспроизведения и записанного звука - PullRequest
1 голос
/ 03 марта 2011

Я хочу написать приложение C # WinForms, которое может воспроизводить WAV-файл.Во время воспроизведения файла он отображает форму волны (аналогичную осциллографу).

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

Надеюсь, это достаточно ясно.Пожалуйста, не стесняйтесь просить больше разъяснений, если это не ясно.Большое спасибо.

Ответы [ 3 ]

2 голосов
/ 03 марта 2011

Вы можете делать то, что вы хотите с C #, но это не сработает, как вы думаете.Фактически нет никакой связи между тем, как запись выглядит на дисплее типа осциллографа, и тем, как эта запись звучит для человеческого уха.Так, например, если я покажу вам два файла WAV, отображаемых на дисплее осциллографа, и скажу вам, что одна запись была о воспроизведении тубы, а другая о человеке, произносящем предложение, вы бы не поняли, что именно от просмотрана них.

Если вы хотите сравнить звуки пользователя с предварительно записанным WAV, вы должны получить более сложный и выполнить FFT-анализ обоих и сравнить частотные спектры, но даже это не будет работатьза то, что вы пытаетесь сделать.

Обновление: после некоторой мысли, я не думаю, что я полностью согласен с моими приведенными выше утверждениями.То, что вы хотите сделать, может быть своего рода работой, если вы хотите использовать эффект типа осциллографа для сравнения высоты (или частоты) WAV и голоса человека.Если вы настроите осциллограф так, чтобы одновременно отображалось относительно небольшое количество длин волн (например, 20), пользователь сможет быстро увидеть эффект повышения или понижения высоты своего голоса.

Iу меня есть небольшое приложение на C #, которое я написал около 2 лет назад и которое делает что-то вроде этого, только оно отображает спектрограф, произведенный БПФ, вместо осциллографа (разница состоит в том, что спектрограф показывает информацию в частотной области, а осциллограф показываетинформация во временной области).Это в режиме реального времени, так что вы можете говорить / петь / что угодно в микрофон и смотреть динамическое изменение спектрографа.

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

1 голос
/ 03 марта 2011

Библиотека NAudio имеет множество функций, которые (возможно) дадут вам то, что вам нужно. Я использовал его в прошлом для некоторых простых операций, но он намного мощнее, чем мне приходилось использовать.

0 голосов
/ 04 марта 2011

@ ZombieSheep Наудио действительно полезен, но у него есть ограничения. Например, управление отображением формы сигнала не сильно контролируется, его нельзя снова очистить и перерисовать. Кроме того, если он становится слишком длинным, невозможно прокрутить назад, чтобы увидеть форму волны в передней части. Еще одна вещь заключается в том, что он работает только с воспроизведением звука, но не работает с записью звука. Спасибо.

...