Я экспериментировал несколько недель, чтобы найти способ сопоставить / найти похожие песни в библиотеке, содержащей разные жанры музыки.
Моей первой попыткой было определить такие особенности, как темп или количество басов в песнях, чтобы сформировать группы, но я не продвинулся далеко с этим подходом (определение ритма на основе изменения громкости), поскольку примерно на 20% песен не нужно считать ритм всегда, иногда 1/2 или 1/3 из них, и я не мог реализовать это.
После нескольких недель неудачных попыток у меня появилась новая идея, которая описана далее в этом посте. Проще говоря, он работает, беря образцы файлов Spectrum, создавая что-то вроде «среднего спектра» файлов для их сравнения. Идея заключалась в том, что, например, в Hardstyle намного больше басов, чем в обычной рок-музыке, я также проверил это, посмотрев некоторые спектрумы в Audacity.
- Файл 1: взять полный файл FFT Spectrums (размер образца 2048 атм, логарифмическая шкала амплитуд)
- Суммируйте все массивы спектра, возьмите средние значения каждой корзины
- Сделайте то же самое с другими файлами, сохраните все результаты
- Составьте список различий значений FFT между файлом 1 и другими файлами
- Среднее значение различий между файлом 1 и файлом X
- Сортировка по возрастанию по этим средним
- Песни с самым низким значением разности считаются похожими.
Могут ли некоторые из вас, у кого есть хорошие знания, сказать мне, будет ли это правильный / хороший способ реализовать мою идею?