Android-процесс для гитарного тюнера

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

Я видел пример Android для записи звуков из API Google, но мне было интересно, куда идти оттуда?

Я понимаю, что мне нужно сделать преобразование Фурье или что-то еще, чтобы получить частоту, просто интересно, есть ли у кого-нибудь советы о том, как это сделать?

Как только мы получим правильную частоту, отображаемую на экране, у нас будет большая часть нашего проекта.

Спасибо за любую помощь.

Ответ 1

Если вы никогда не делаете разработку Android и мало или вообще не имеете опыта обработки цифрового сигнала и преобразования Фурье, вы решаете сложную задачу.

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

Однако, если ваш профессор не позволит вам использовать существующую библиотеку, вам нужно решить следующие сложные проблемы:

Как ваша программа автоматически находит основную частоту воспроизводимой ноты? Взгляните на этот график frequency/frequency_decibelMagnitude реальной классической акустической гитары, играющей ноту E2. Заметим, что основная частота (82,4 Гц) ослаблена примерно на 17 децибелов (17 дБ) ниже первой гармоники (первая гармоника равна 164,8 Гц).

GuitarE2frequency_decibelMagnitude

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

GuitarE2frequency_decibelMagnitudeCloseup

Основная частота, ослабленная на 17 дБ ниже первой гармоники, представляет собой большое затухание. Ниже представлен один и тот же спектр нот E2, но теперь он нанесен на линейную ось с частотной величиной (теперь вертикальная ось представляет собой линейную частотную величину вместо величины децибельной частоты). Теперь вы можете более четко видеть, насколько значительно ниже первой гармоники основной пик частоты действительно.

GuitarE2frequency_linearMagnitudeCloseup

Ваша программа должна автоматически обнаруживать 17 дБ, ослабленный фундаментальный, на частоте 82,4 Гц, но как вы это делаете в общем случае, когда ваша программа не будет знать заранее, что заметит, что пользователь играет на гитаре?

Вышеупомянутый частотный спектр для E2 на классической акустической гитаре. Как спектр отличается для E2 на гитаре из стальной струны? Как насчет E2 на усиленной электрогитаре? Как ваша программа справится с различиями между этими разными спектрами?

Проблема не тривиальна. Вопрос в том, сколько времени у вас есть для этого задания, и что ваш профессор считает завершенным заданием.

Эта ссылка дает более глубокое понимание: Спектры музыкальных инструментов до 102,4 кГц

Вы можете отображать частотные спектры и слышать гитарные ноты E2-Bb5, здесь: Спектр музыкальных инструментов

Ответ 2

Не используйте чистую оценку FFT или другую оценку частоты. Они дадут вам очень плохие/неправильные результаты для нижних нотных строк большинства гитар. Музыкальная подача - это феномен психоакустического восприятия человека, очень часто не такой, как частота FFT (за исключением чистых синусоидальных тонов, в отличие от реальных струнных инструментов).

Google "определение высоты тона" и "оценка высоты тона". Некоторые возможности включают взвешенные автокорреляции, AMDF, ASDF, кепструм/кепстральный анализ, анализ спектра гармонических продуктов и составные алгоритмы, такие как RAAPT и YAPT. Ссылки на несколько научных статей по некоторым из этих алгоритмов оценки могут быть на моей веб-странице: http://www.nicholson.com/rhn/dsp.html#1

Ответ 3

Если ваш преподаватель в порядке с помощью библиотеки для обработки звука, вот источник полного андроидного гитарного тюнера, использующего libpd:

https://github.com/nettoyeurny/Making-Musical-Apps/tree/master/android/GuitarTuner

Чтобы использовать его, вам также нужно будет изучить основы языка программирования синтеза звука Pure Data. Инструменты, необходимые для тюнера, не слишком обширны и выложены в приведенном выше приложении. Очевидно, вам нужно будет сделать какую-то работу, чтобы сделать эту работу.

Вот очень хорошее введение в использование Pure Data:

http://en.flossmanuals.net/pure-data/

Ответ 5

Этот paper обеспечивает всестороннюю оценку алгоритмов определения высоты тона, которые вы могли бы использовать.

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

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