Знайдіть подібну музику за допомогою FFT Spectrums


16

Я експериментував кілька тижнів, щоб знайти спосіб знайти / знайти подібні пісні в бібліотеці, що містять різні жанри музики.

Першою моєю спробою було виявити такі функції, як Tempo, або скільки басів є у Піснях, щоб сформувати групи, але я не вдався далеко до цього підходу (Об'єм гучності, заснованого на виявленні ударів), оскільки приблизно 20% Songs Beat не повинні рахуватися. завжди, іноді 1/2 або 1/3 з них, і я не міг цього здійснити.

Після декількох тижнів невдалої спроби я отримав нову ідею, описану пізніше у цій публікації. Простіше кажучи, це працює, беручи зразки файлів спектра, роблячи щось на зразок "середнього спектру" файлів для їх порівняння. Ідея полягала в тому, що, наприклад, у Hardstyle є набагато більше басів, ніж середня рок-музика, я також перевірив це, переглянувши деякі Спектри в Audacity.

  • Файл 1: Візьміть повний спектр файлів FFT (розмір вибірки атм. 2048, масштаб журналу амплітуд)
  • Підсумовуйте всі масиви спектра, приймайте середні значення кожного контейнера
  • Зробіть те саме, що і інші файли, збережіть усі результати
  • Складіть перелік значень FFT між файлами 1 та іншими файлами
  • Зробіть середнє значення різниці між файлом 1 та файлом X
  • Сортувати за зростанням за цими середніми
  • Пісні з найменшим значенням "різниця" вважаються подібними.

Чи можете хтось із вас, хто має добрі знання, сказати мені, чи це був би правильний / хороший спосіб втілити мою ідею?


1
Якщо ви намагаєтесь виявити темп, ви можете спробувати відкоригувати сигнал, а потім здійснити перетворення Фур'є. Частоти в порядку 1 Гц не будуть присутні у звичайному (неквадратичному) спектрі FFT, оскільки вони відфільтровані. Пов'язана ідея, що використовується для виявлення висоти, називається "cepstrum;" ви можете дізнатися про це за допомогою googling. Щоб відрізнити поп та джаз від класичного, ви можете спробувати виявити звуки барабанного набору, які не вимикаються. Вібрато має бути машинно виявленим. Існують заходи дисонансу, які можна обчислити машиною.

1
Можливо, вам слід попросити модераторів перенести це на dsp.SE
Діліп Сарват

Я позначив своє запитання із проханням перенести його до DSP SE. Ви маєте на увазі, що я міг би виявити, чи є присутність Drumkit чи ні для класифікації введення? Чи можете ви пояснити, як сигнал у квадраті веде до темпу?

3
Музику записують та опановують таким чином, щоб досягти максимального спектрального розповсюдження, особливо в наші дні. Я не думаю, що спектри повної довжини дадуть вам хороший критерій класифікації музики.
Фонон

2
Замість спектрів слід дивитися на спектрограми. Спектри показують одразу лише вміст частоти всієї пісні. Спектрограми показують, як зміст частоти змінюється з часом.
ендоліт

Відповіді:


17

Те, що ви намагаєтеся зробити, намагалися знову і знову сотні дослідників, і над цим досить велика робота. Перевірте матеріали конференції ISMIR. Навіть якщо це не актуально, прочитайте дисертацію Еліаса Пампалка: http://www.ofai.at/~elias.pampalk/publications/pampalk06thesis.pdf

Щоб швидко зорієнтуватися на правильному шляху:

Музика може бути подібною за багатьма вимірами: а) тембр / текстура / жанр; б) ритмічний малюнок; в) прогрес мелодії / акорду ... і багато іншого! З вашого повідомлення не зрозуміло, що ви хочете виміряти!

  • Якщо вас цікавить: а) функції, на які ви можете поглянути, - це MFCC (Mel Frequency Cepstrum Coefficients), оскільки вони якимось чином відображають спосіб роботи слуху людини (частотне викривлення, масштаб журналу), оскільки вони декоррельовані (спрощення моделювання) , а оскільки вони мають меншу розмірність (13 коефіцієнтів проти 2048 року).
  • Якщо вас цікавить b), подивіться на функцію під назвою "Шаблони коливань" (Pampalk, коротко кажучи, автокореляція сигналу в діапазоні 0,1 .. 10 Гц в декількох діапазонах); або функції "Пенні" Вітмена (FFT MFCC вздовж осі часу).
  • Якщо вас цікавить c), подивіться на хромаграми. Почніть з коду хромаграми Елліса (http://labrosa.ee.columbia.edu/matlab/chroma-ansyn/), а потім перейдіть до реалізації Мауха, якщо вам потрібно щось більш надійне (http://isophonics.net/nnls-chroma ).

Це для особливостей. Тепер вам доведеться придумати кращий спосіб порівняти свої пісні, як тільки вони будуть представлені як послідовність цих функцій. Обчислювати парні відмінності між послідовностями не дуже розумно - наприклад: порівняння пісні та тієї ж пісні, яка компенсується деякою тишею, призведе до різниці, хоча вона точно така ж! Ви краще порівняйте розподіл цих функцій; наприклад, обчисліть середнє / стандартне відхилення ознак над піснею A і середнє / стандартне відхилення ознак над піснею B, а потім пройдіть ймовірнісну відстань (KL, Bhattacharyya над ними).

Останній пункт, але який буде мати значення пізніше: обчислення відстані між піснею та рештою корпусу для пошуку найближчих відповідностей є досить неефективним. При роботі з великими колекціями такі методи, як LSH або Ball Ball, дозволяють виконувати такі найближчі сусідські запити без явного порівняння з усім корпусом.

В бік відстеження темпу - це зовсім інша справа. Якщо ви хочете вивчити це, найкраща робота про продуктивність / доступність в цій темі - це відстеження ударів Ellis за допомогою динамічного програмування. http://www.ee.columbia.edu/~dpwe/pubs/Ellis07-beattrack.pdf . Це неймовірно просто, але близько до сучасних алгоритмів.


Дякую за ваш детальний відповідь, я вже чув про MFCC кілька разів у цьому контексті, і здається розумним не використовувати голі результати FFT. Здається, досить складно реалізувати моє поточне "стан знань" та середовище розробки (C #, результати FFT Бібліотеки), але я спробую.
gfg
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.