Я багато років досліджував розпізнавання кроку на поліфонічній музиці - як виявлення нот гітарного соло в межах запису mp3. Я також написав розділ у Вікіпедії, в якому дається короткий опис процесу (дивіться підрозділ "Визначення нахилу" за посиланням нижче).
Коли на піаніно натискається одна клавіша, ми чуємо не просто одну частоту звукової вібрації, а композит з декількох звукових коливань, що виникають на різних математично пов'язаних частотах. Елементи цього композиту вібрацій з різною частотою називаються гармоніками або частками. Наприклад, якщо натиснути клавішу Середнього С на піаніно, окремі частоти гармонік композиту починатимуться від 261,6 Гц як основної частоти, 523 Гц - 2-ї гармонічної, 785 Гц - 3-ї гармонійної, 1046 Гц - бути четвертою гармонією тощо. Пізніші гармоніки - це цілі кратні основні частоти, 261,6 Гц (напр .: 2 x 261,6 = 523, 3 x 261,6 = 785, 4 x 261,6 = 1046).
Я використовую модифіковану логарифмічну трансформацію DFT, щоб спочатку виявити можливі гармоніки, шукаючи частоти з піковими рівнями (див. Схему нижче). Через те, що я збираю дані для свого зміненого журналу DFT, я НЕ повинен застосовувати функцію вікна до сигналу, а також не додавати та перекриватись . І я створив DFT, щоб його частотні канали були логарифмічно розташовані для того, щоб безпосередньо вирівняти частоти, де гармоніки створюються нотами на гітарі, саксофоні тощо.
Тепер, виходячи на пенсію, я вирішив випустити вихідний код для моєї системи виявлення кроків у безкоштовній демонстраційній програмі під назвою PitchScope Player . Програвач PitchScope доступний в Інтернеті, і ви можете завантажити виконувану програму для Windows, щоб побачити мій алгоритм на роботі на mp3-файл, який ви обрали. Нижченаведене посилання на GitHub.com приведе вас до мого повного вихідного коду, де ви можете переглянути, як я виявляю гармоніки за допомогою спеціального логарифмічного перетворення DFT, а потім шукати частки (гармоніки), частоти яких задовольняють правильному цілочисленному співвідношенню, яке визначає ' крок '.
Мого алгоритму виявлення шахів - це насправді двоступеневий процес: a) Спочатку виявляється масштаб ScalePitch ('ScalePitch' має 12 можливих значень тону: {E, F, F #, G, G #, A, A #, B, C, C #, D , D #}) b) і після визначення масштабу ScalePitch обчислюється Октава , вивчаючи всі гармоніки для 4 можливих нот Октави-Кандидата. Алгоритм призначений для виявлення найбільш домінуючого кроку (музичної ноти) в будь-який момент часу в поліфонічному MP3-файлі. Зазвичай це відповідає нотам інструментального соло. Тим, хто цікавиться вихідним кодом C ++ для мого алгоритму виявлення 2-ступінчатого шагу, можливо, потрібно запустити функцію Estimate_ScalePitch () у файлі SPitchCalc.cpp на GitHub.com.
https://github.com/CreativeDetectors/PitchScope_Player
https://en.wikipedia.org/wiki/Transcription_(music)#Pitch_detection
Нижче зображено логарифмічний DFT (створений моїм програмним забезпеченням C ++) протягом 3 секунд гітарного соло на поліфонічному записі mp3. Він показує, як гармоніки з’являються для окремих нот на гітарі під час гри в соло. Для кожної ноти цього логарифмічного DFT ми бачимо, що його множинні гармоніки проходять вертикально, оскільки кожна гармоніка матиме однакову ширину часу. Після того, як буде визначена Октава ноти, тоді ми знаємо частоту Основи.
На наведеній нижче схемі показаний алгоритм виявлення Octave, який я розробив, щоб вибрати правильну примітку Octave-Candidate (тобто правильну основу), як тільки ScalePitch для цієї ноти буде визначений. Бажаючі побачити цей метод у C ++, повинні перейти до функції Calc_Best_Octave_Candidate () всередині файлу під назвою FundCandidCalcer.cpp, який міститься у моєму вихідному коді на GitHub.