Распознавание нот по записанному звуку. Часть 2. Python - PullRequest
1 голос
/ 15 сентября 2010

это продолжение этого вопроса здесь .

Это код, который я использовал для получения образцов:

spf = wave.open(speech,'r')
sound_info = spf.readframes(-1)
sound_info = fromstring(sound_info, 'Int16')

Длина звуковой информации равна 194560 , что в 4,4 раза превышает частоту дискретизации 44100 .Длина звукового файла составляет 2,2 секунды , поэтому не должно ли sound_info вдвое превышать его длину?

Также я могу только найти достаточно информации о , почему БПФиспользуется для получения частотного спектра .

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


Помощь будет очень ценится.:)


Это основной график sound_info

plot(sound_info)

Это график БПФ

freq = [abs(x.real) for x in fft(sound_info)]
plot(freq)

Ответы [ 2 ]

1 голос
/ 15 сентября 2010

Если ваш wav-файл имеет два канала, то длина sound_info будет равна 2 * частота дискретизации * длительность (секунды).Данные канала чередуются, поэтому, если вы поместили все значения в одномерный массив data, тогда значения, связанные с одним каналом, будут data[::2], а другим будет data[1::2].

*.1006 *

Грубо говоря, гладкие функции могут быть представлены в виде сумм синусоидальных и косинусных волн (с различными амплитудами и частотами).

БПФ (быстрое преобразование Фурье) связывает функцию с коэффициентами (амплитудами) этих синусоидальных и косинусных волн.То есть существует взаимно-однозначное соответствие между функцией, с одной стороны, и последовательностью коэффициентов, с другой.

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

0 голосов
/ 28 мая 2016

Не изобретайте велосипед:)

Проверьте http://librosa.github.io, особенно часть о кратковременном преобразовании Фурье (STFT) или в вашем случае скорее что-то вроде Constant-Q-Transform (CQT).

Но обо всем по порядку: давайте предположим, что у нас есть стереофонический сигнал (2 канала) из аудиофайла.Сейчас мы отбрасываем пространственную информацию, которая закодирована в двух каналах аудиофайла путем создания среднего канала (суммируйте оба канала и разделите на 2).Теперь у нас есть сигнал, который является моно (1 канал).Поскольку у нас есть цифровой сигнал, каждый момент времени называется сэмплом.

Теперь начинается забавная часть, мы нарезаем сигнал на маленькие кусочки (называемые кадрами), отбирая последовательные сэмплы (512 или кратные 2стандартные значения).Взяв дискретное преобразование Фурье (DFT) для каждого из этих кадров, мы получаем частотно-временное представление, называемое спектрограммой.Любые дальнейшие концепции (дублирование и т. Д.) Можно прочитать в каждой книге DSP или в таких ресурсах, как этот лабораторный курс: https://www.audiolabs -erlangen.de / content / 05-fau / Professor / 00-mueller / 02-learning /2016s_apl / LabCourse_STFT.pdf

Обратите внимание, что ось частоты ДПФ линейно разнесена.В западной музыкальной системе октава разделена на 12 полутонов, центральные частоты которых разнесены логарифмически.Посмотрите сценарий выше о стратегии биннинга, как получить логарифмически разнесенную ось частот от линейного STFT.Однако этот подход является очень базовым, и существует множество других и, возможно, более подходящих подходов.

Теперь вернемся к вашей проблеме распознавания нот.Во-первых: это очень сложно.:) Как упомянуто выше, реальный звук, который играет инструмент, содержит обертоны.Кроме того, если вам интересно транскрибировать ноты, исполняемые целыми группами, вы получаете помехи от других музыкантов и т. Д.

Говоря о методах, которые вы могли бы попробовать: в наши дни многие люди используют неотрицательную матричную фаторизацию (NMF илианалогичные LDPCA) или нейронные сети для решения этой задачи.Например, NMF включен в scikit-learn.Для начала я бы порекомендовал NMF.Используйте только монотимбральные звуки, то есть один инструмент, играющий одновременно.Инициализируйте шаблоны с помощью простых затухающих обертонных структур и посмотрите, что произойдет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...