Обнаружение шага в реальном времени

Я пытаюсь настроить чат в реальном времени для пения пользователей, но у меня много проблем. Я пробовал много методов, включая FFT (FFT Problem (Возвращает случайные результаты)) и автокорреляция (Возврат автокорреляции тангажа случайные результаты с микрофонным вводом), но я не могу получить какие-либо методы, чтобы дать хороший результат. Может ли кто-нибудь предложить метод отслеживания тангажа в реальном времени или как улучшить метод, который у меня уже есть? Кажется, я не могу найти хороших методов C/С++ для обнаружения тангажа в реальном времени.

Спасибо,

Найл.

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

Изменить: извините, что это очень поздно, но на данный момент im визуализирует автоколеранцию, беря значения из массива результатов и каждого индекса, а также строит индекс по оси X и значение по оси Y (оба делятся на 100000 или что-то в этом роде, а im с помощью OpenGL), подключение данных к VST-хосту и использование VST-плагинов для меня не является вариантом. На данный момент это похоже на некоторые случайные точки. Я делаю это правильно, или вы можете указать мне, что торгует каким-то кодом для этого или помогите мне понять, как визуализировать необработанные аудиоданные и данные автокорреляции.

Ответ 1

Сделаем шаг назад... Чтобы добиться этого, вы ДОЛЖНЫ определить способ создания промежуточных этапов этого процесса. То, что вы пытаетесь сделать, не особенно тяжело, но оно подвержено ошибкам и неуверенности. Обрезание, оконная обработка, плохая проводка, сглаживание, смещения постоянного тока, считывание неправильных каналов, странная ось частоты FFT, несоответствие импеданса, ошибки размера кадра... кто знает. Но если вы можете построить необработанные данные, а затем построить FFT, все станет ясно.

Ответ 2

Я нашел несколько реализаций с открытым исходным кодом отслеживания тангажа в реальном времени

  • dywapitchtrack использует вейвлет-алгоритм

  • Real Time С# Pitch Tracker использует модифицированный подход к автокорреляции

  • aubio (упоминается piem, доступно несколько алгоритмов)

Там также есть некоторые трекеры, которые могут быть не предназначены для реального времени, но могут быть использованы таким образом для всех, что я знаю, а также могут быть полезны в качестве ссылки для сравнения вашего трекера в режиме реального времени с:

  • Praat - это пакет с открытым исходным кодом, иногда используемый для извлечения тона лингвистами, и вы можете найти алгоритм, зарегистрированный в http://www.fon.hum.uva.nl/paul/praat.html

  • Закуска и WaveSurfer также содержат экстрактор высоты тона

Ответ 3

Я знаю, что этот ответ не сделает всех счастливыми, но здесь идет.

Это сложно, очень сложно. Во-первых, прочитайте столько уроков, сколько вы можете найти в FFT, Autocorrelation, Wavelets. Хотя я все еще боюсь с DSP, я понял некоторые из следующих.

https://www.coursera.org/course/audio курс не работает в данный момент, но видео по-прежнему доступны.

http://miracle.otago.ac.nz/tartini/papers/Philip_McLeod_PhD.pdf тезис о разработке алгоритма распознавания высоты тона.

http://dsp.stackexchange.com весь сайт, посвященный цифровой обработке сигналов.

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

Далее следуют тестовые данные и тестирование. Напишите себе библиотеку, которая генерирует тестовые файлы для проверки вашего алгоритма /s.

1) Супер простой чистый синусоидальный генератор. Поэтому скажите, что вы смотрите на запись YAT (еще один тюнер), а затем используете свой синусоидальный генератор для создания серии файлов размером 440 Гц с частотой 420-460 Гц с разным шагом и посмотрите, насколько чувствителен и точен ваш код. Может ли он разрешаться с точностью до 5 Гц, 1 Гц, еще лучше?

2) Затем обновите генератор синусоиды таким образом, чтобы он добавлял к сигналу ряд более слабых гармоник.

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

4) Бросьте некоторые преднамеренные искажения, смещая частоты гармонических колебаний вверх и вниз нерегулярно

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

Существует также ряд "библиотек", содержащих звуковые образцы. https://freesound.org из упомянутой выше серии Coursera. http://theremin.music.uiowa.edu/MIS.html

Далее следует помнить, что ваш микрофон не идеален, и если вы не потратили тысячи долларов на него, он будет иметь диапазон переменной частоты. В частности, если вы работаете с низкими нотами, а затем с более дешевыми микрофонами, читайте встроенные на своем ПК или телефоне, у них есть значительный роллофф, начинающийся со скоростью около 80-100 Гц. Для достаточно хороших внешних вы можете перейти на 30-40 Гц. Найдите данные на микрофоне.

Вы также можете проверить, что происходит, играя тон через динамики, а затем записывая любимый микрофон. Но, конечно, теперь мы говорим о двух наборах кривых частотной характеристики.

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

Прежде всего, не сдавайтесь после первой пары попыток. Удачи.

Ответ 4

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

Удостоверьтесь, что вы удаляете любое смещение перед попыткой БПФ или любым другим способом, который вы используете.

Также возможно, что вы столкнулись с проблемами с запасом или отсечением.

Графы - лучший способ диагностики большинства проблем с аудио.

Ответ 5

Здесь исходный код С++ для необычного двухэтапного алгоритма, который я разработал, который может выполнять обнаружение в реальном времени Pitch в полифонических файлах MP3 во время воспроизведения в Windows. Это бесплатное приложение (PitchScope Player, доступное в Интернете) часто используется для обнаружения заметок гитары или саксофона соло при записи в формате MP3. Алгоритм предназначен для обнаружения наиболее доминирующего тона (музыкальной ноты) в любой момент времени в музыкальном файле MP3. Заметные onsets точно выведены значительным изменением наиболее доминирующего тона (музыкальной ноты) в любой момент во время записи MP3.

Когда одна клавиша нажата на пианино, мы слышим не только одну частоту звуковой вибрации, но и композицию из нескольких звуковых колебаний, происходящих на разных математически связанных частотах. Элементы этого композита колебаний на разных частотах называются гармониками или частичными. Например, если мы нажимаем клавишу среднего С на фортепиано, отдельные частоты составных гармоник будут начинаться с 261,6 Гц, так как основная частота, 523 Гц будет второй гармоникой, 785 Гц будет третьей гармоникой, 1046 Гц - 4-я гармоника и т.д. Более поздние гармоники являются целыми кратными основной частоте, 261,6 Гц (например: 2 х 261,6 = 523, 3 х 261,6 = 785, 4 х 261,6 = 1046). Связанный внизу, представляет собой моментальный снимок фактических гармоник, которые происходят во время полифонической записи MP3 гитарного соло.

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

Теперь, когда я вышел на пенсию, я решил выпустить исходный код для моего механизма обнаружения тангажа в бесплатном демонстрационном приложении под названием PitchScope Player. PitchScope Player доступен в Интернете, и вы можете загрузить исполняемый файл для Windows, чтобы увидеть, как мой алгоритм работает над mp3 файлом по вашему выбору. Ниже приведенная ссылка на GitHub.com приведет вас к моему полному исходному коду, где вы можете посмотреть, как я обнаруживаю гармоники с помощью специального преобразования логарифмического ДПФ, а затем искать частичные (гармоники), частоты которых соответствуют правильному целочисленному соотношению, шаг".

My Pitch Detection Algorithm - фактически двухэтапный процесс: a) сначала обнаружен ScalePitch ( "ScalePitch" имеет 12 возможных значений тангажа: {E, F, F #, G, G #, A, A #, B, C, С#, D, D #}) b) и после определения ScalePitch, то Octave вычисляется путем изучения всех гармоник для 4 возможных заметок Octave-Candidate. Алгоритм предназначен для обнаружения наиболее доминирующего тона (музыкальной ноты) в любой момент времени в полифоническом файле MP3. Это обычно соответствует нотам инструментального соло. Те, кто интересуется исходным кодом С++ для моего двухэтапного алгоритма обнаружения ошибок, могут захотеть начать с функции Estimate_ScalePitch() в файле SPitchCalc.cpp на GitHub.com. https://github.com/CreativeDetectors/PitchScope_Player

Ниже изображен логарифмический DFT (созданный моим программным обеспечением на С++) в течение 3 секунд гитарного соло на полифонической mp3-записи. Он показывает, как гармоники появляются для отдельных заметок на гитаре, одновременно играя соло. Для каждой ноты этого логарифмического ДПФ мы видим, что его многочисленные гармоники распространяются вертикально, потому что каждая гармоника будет иметь одинаковую ширину во времени. После определения Октавы ноты, мы знаем частоту Фундаментальной.

введите описание изображения здесь

Ответ 6

Отъезд aubio и библиотека с открытым исходным кодом, которая включает в себя несколько современных методов отслеживания высоты тона.

Ответ 7

Взгляните на это примерное приложение:

http://www.codeproject.com/KB/audio-video/SoundCatcher.aspx

Я понимаю, что приложение находится на С#, и вам нужен С++, и я понимаю, что это .Net/Windows и вы на Mac... Но я понял, что его реализация FFT может быть исходной точкой отсчета. Попробуйте сравнить свою реализацию FFT с его. (Его итеративная, широкая версия Кули-Туки БПФ). Они похожи?

Кроме того, "случайное" поведение, о котором вы описываете, может быть связано с тем, что вы захватываете данные, возвращаемые вашей звуковой картой, напрямую, не собирая значения из байтового массива должным образом. Вы попросили свою звуковую карту пробовать 16-битные значения, а затем дали ей байтовый массив для хранения значений? Если это так, помните, что два последовательных байта в возвращаемом массиве составляют один 16-битный образец аудио.

Ответ 8

Код Java для реального детектора реального времени доступен по адресу http://code.google.com/p/freqazoid/.

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

Ответ 10

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