AurioTouch & FFT для инструментального тюнера - PullRequest
3 голосов
/ 19 сентября 2009

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

Меня беспокоит то, что aurioTouch, похоже, на самом деле не очень хорошо работает при просмотре графика частотной области. Я играю одну ноту на инструменте и не вижу хорошо упорядоченного, небольшого набора частот с одним струнным пиком на соответствующей частоте ноты.

Кто-нибудь использовал aurioTouch достаточно для того, чтобы узнать, работает ли базовый код или это просто пример?

Другие возможные варианты: FFTW или KISS FFT. У кого-нибудь есть опыт работы с ними?

Спасибо.

Ответы [ 4 ]

9 голосов
/ 15 июля 2010

Вы ожидаете не то, что нужно !!

Не вина библиотеки

Независимо от того, производит ли библиотека это должным образом или нет, вы ищете образец, который редко существует в реальных звуках. Только совершенная синусоидальная волна, генерируемая электронным способом, вызовет даже частичное дискретное появление «всплеска» частоты. граф. Если вы не верите этому, попробуйте запустить визуализацию «анализатора спектра» в Winamp или медиаплеере. Это не столько вина ПК.

Настоящие звуковые волны - сложные животные

Представьте себе пилообразную или квадратную волну в своем воображении. эти резкие повороты - углы или точки на волне похожи на тонны высших гармоник для БПФ или даже настоящего фурье. И если вы когда-либо видели настоящую «квадратную волну / пилообразную волну» на прицеле или даже «синусоидальную волну», создаваемую инструментом, который должен производить синусоидальную волну, взгляните на все острые укромные уголки и щели всего лишь ОДНА заметка (если у вас нет прицела, просто увеличьте масштаб волны наглости - чем больше вы увеличиваете, тем выше ноты, на которые вы смотрите). Да, все эти отклонения считаются частотами.

Трудно определить разницу между одной нотой и целым оркестром, иногда в спектральном анализе.

Но я слышу отдельные заметки!

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

Вы не можете сделать это в полной мере, но вы можете приблизить это с помощью «обучения».

Приближение: здание некоторые смарт

ИГРАТЬ ноту на инструменте и «сохранить» график частоты. Сделайте это для заметок в нескольких частотных диапазонах или, что еще лучше, для всех заметок.

Затем интерполируйте ноты, чтобы заполнить пробелы (с шагом 1/2 или 1/4), умножив сохраненные графики для этого инструмента на 2 ^ (1/12) (или 1/24 для шагов 1/4 и т. Д. ).

Выясните, как хранить их в быстро доступной структуре данных, такой как BST или Trie. Только это должно было бы вернуть оценку «насколько близко это». Он также должен был бы идентифицировать совпадение по пропорциям частот, в случае если бы он имел разные объемы.

Использование смартов

В следующий раз, когда вы ищете ноту от этого инструмента, просто возьмите «услышанный» график частот и найдите его в этой структуре данных. Вы можете записать несколько инструментов, которые создают различные формы волны, и искать их тоже. Если есть фоновые звуки или несколько нот, возьмите ближайшее совпадение. Затем, если вы хотите определить другие ноты, «вычтите» найденную частотную комбинацию из выборочной и промойте, затем повторите.

Твой голос не сработает ...

Если вы когда-нибудь пытались настроить себя, поя в гитарный тюнер, вы будете знать, что тюнеры не такие умные. Конечно, некоторые инструменты (voice esp) действительно плавают вокруг поля и генерируют постоянно развивающуюся форму волны (даже без пения).

Чего вы пытаетесь достичь?

Вам не нужно было бы полностью получать эту фантазию для «простого» приложения тюнера, но если вы не делаете их просто для другого приложения тюнера, я предполагаю, что вы действительно хотите идентифицировать ноты (например, возможно, вы хотите автоматически сгенерировать) миди файлы из песен на радио; -)

Удачи. Я надеюсь, что вы найдете библиотеку, которая делает весь этот мусор вместо того, чтобы кататься самостоятельно.

Редактировать 2017

Обратите внимание на эту веб-страницу: http://www.feilding.net/sfuad/musi3012-01/html/lectures/015_instruments_II.htm Хорошо вниз по странице, есть спектральный анализ различных труб органа. Есть много, много обертонов. Их можно обнаружить - при достаточном количестве работы - если вы сначала «обучаете» свое приложение с ними (точно так же, как рассказываете ребенку: «Вот как звучит кларнет» ...)

4 голосов
/ 05 декабря 2009

aurioTouch выглядит странно, потому что ось частоты находится в линейном масштабе. Очень сложно интерпретировать вывод БПФ, когда ось X представляет собой что-то отличное от логарифмической шкалы (традиционно log2).

Если вы не можете использовать целочисленное БПФ для aurioTouch, посмотрите мою библиотеку: http://github.com/alexbw/iPhoneFFT

Он использует двойную точность, поддерживает несколько типов окон и реализует метод Уэлча (который должен давать более стабильные спектры при просмотре во времени).

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

2 голосов
/ 20 сентября 2009

БПФ используют частотные бины, а ширина бина основана на параметрах БПФ. Чтобы найти частоту, вам нужно будет записать ее с частотой, по крайней мере, вдвое превышающей самую высокую частоту, присутствующую в выборке. Затем найдите время между циклами. Если это не чистая частота, это, конечно, будет сложнее.

0 голосов
/ 17 марта 2010

Я использую БПФ Ooura для вычисления БПФ данных акселерометра. Я не всегда получаю правильный спектр. Почему-то Ooura FFT дает совершенно неправильные результаты со спектральными величинами порядка 10 ^ 200 на всех частотах.

...