@Zvercheg

Как работать со звуком в С#?

Идея заключается в том чтобы проверить на сходство одну аудио дорожку с другой. Обе записаны с помощью микрофона. Для этого с помощью С# и библиотеки NAudio я снял значения с микрофона. Получил WAV файл. Далее загнал значения в массив байтов (byte a []). И получил 1,2 миллиона значений для дорожки длиной 9с. Пытался сравнивать их в "тупую" миллион значений с милионом и получал откровенный бред. На руках имею книгу в которой описаны музыкальные ноты в ггц, пример Ля 1 актавы (A1) = 440 ГГц. Теперь вопрос сколько значений отвечают за эту ноту ля (частота дискретизации у меня = 44100 и 2 канала). Как мне понять что в этот момент времени амплитуда 440, а в другую секунду предположим 330. Из этого массива. Мне советовали использовать БПФ ОПФ (быстрое преобразование фурье или оконное преобразование фурье) но откровенно говоря я не до конца понимаю как они работают м что могут мне дать. Прошу о помощи, кому не жалко своего времени - объясните.
  • Вопрос задан
  • 1328 просмотров
Решения вопроса 1
@res2001
Developer, ex-admin
В wav сигнал пишется во временной области, т.е. как он снимается с микрофона и преобразуется в цифру в таком виде и попадает в wav (ну это упрощенный вариант). Во временной области частот нет. Частоты это синусоиды. Временная область представляет собой сумму всех синусоид составляющих сигнал.
Чтобы перейти к частотам (герцам) вам нужно выполнить дискретное преобразование Фурье (в матлабе - fft() ).
На выходе fft вы получите массив частот. В первой половине массива будет то что вам нужно, берете элемент с индексом 440 (частота 440 Гц) значение этого элемента будет амплитуда частоты 440 Гц.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Нужно поискать на тему акустического отпечатка. Допустим, https://en.wikipedia.org/wiki/Acoustic_fingerprint
Есть также библиотека pHash.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы