2017-01-15 23 views
1

Я пытаюсь разработать гитарную игру на платформе Android.Определение высоты гитары в android

И мне нужно сделать детекцию основного тона в реальном времени, чтобы получить частоту гитарного аккорда/струны.

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

Я нахожу два вида метода, который я могу использовать, один инь, другой один - БПФ.

Какой метод может получить лучшую производительность и точный результат?

+3

Ваш вопрос здесь не принадлежит. Может быть, спросите его здесь: http://sound.stackexchange.com/ –

+1

Нет четкого определения ответа на шаг вперед, и вам нужно много и много методов, которые люди объединяют, чтобы прибить это. Причина в том, что то, что мы называем шагом, например, A4, имеет основную частоту в 440 Гц, но гармоники на частотах 880 (и 220!) И более. Пример с реальными данными: http://stackoverflow.com/questions/39230595/how-to-get-the-fundamental-frequency-using-harmonic-product-spectrum В идеале вы можете найти библиотеку Android/SDK для этого вы. –

+0

Я получу входной сигнал от микрофона, а затем проанализирую вход (входной сигнал, какой тип гитарной струны/аккорда), Как я могу это сделать? @Ahmed Fasih – paul9508

ответ

1

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

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

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

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

https://github.com/CreativeDetectors/PitchScope_Player

https://en.wikipedia.org/wiki/Transcription_(music)#Pitch_detection

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

enter image description here

Диаграмма ниже демонстрирует алгоритм обнаружения октава, который я разработал, чтобы выбрать правильную ноту октавного-кандидата (то есть, правильные Фундаментальный), после того, как ScalePitch для этой записки был определен. Те, кто хочет увидеть этот метод в C++, должны перейти к функции Calc_Best_Octave_Candidate() внутри файла FundCandidCalcer.cpp, который содержится в моем исходном коде в GitHub.

enter image description here