Javascript: Как определить музыкальный ключ mp3 файлов
Я много занимался поиском в Google, но не смог найти пример того, как определить музыкальную ноту mp3-файлов.
До сих пор я читал кое-что о БПФ (быстрое преобразование Фурье), из которого можно рассчитать высоту звука в аудиофайле и на основе нотации высоты звука можно получить музыкальную ноту.
Но потом я прочитал, что формат файла mp3 находится во временной области, которая из-за сжатого формата с потерями не содержит значений выборок, необходимых для частотного анализа... это означает, что вы должны конвертировать mp3 в формат wav? файл для расчета ключа?
Я нашел пару примеров обнаружения основного тона в реальном времени для визуальных целей, но не для анализа всего mp3-файла и вывода музыкального ключа.
Я надеюсь, что кто-то может указать мне правильное направление.
Благодарю.
1 ответ
Я создал приложение PitchScope Player, которое может обнаруживать высоту звука в файлах MP3 в режиме реального времени, а его полный исходный код размещен на GitHub, однако написан на C++. Обнаружение высоты тона и музыкальных клавиш, особенно в реальном времени, чрезвычайно требовательно и, вероятно, требует выполнения скорости C++ в данный момент времени. Вы только начали изучать очень сложную задачу звуковой инженерии, и вам действительно нужно сначала получить некоторое представление о физике того, как мы воспринимаем "высоту тона", что такое "гармоника", и изучить выбор того, как сделать частоту -домен преобразования из необработанного сигнала (см. ссылку на Википедию ниже).
Когда на пианино нажимается одна клавиша, мы слышим не одну частоту звуковых колебаний, а совокупность множества звуковых колебаний, возникающих на разных математически связанных частотах. Элементы этой совокупности колебаний на разных частотах называются гармониками или частями. Например, если мы нажмем среднюю клавишу C на фортепиано, отдельные частоты гармоник композита начнутся с 261,6 Гц в качестве основной частоты, 523 Гц будет 2-й гармоникой, 785 Гц будет 3-й гармоникой, 1046 Гц будет 4-я гармоника и т. д. Более поздние гармоники представляют собой целые кратные основной частоты, 261,6 Гц (например: 2 x 261,6 = 523, 3 x 261,6 = 785, 4 x 261,6 = 1046). Мы обнаруживаем высоту тона, находя группы гармоник, которые имеют это математическое соотношение между частотами.
Вместо того, чтобы использовать БПФ, я использую модифицированное логарифмическое преобразование ДПФ, чтобы его частотные каналы могли быть выровнены по месту расположения гармоник в музыкальном сигнале. Логарифмическое DFT-преобразование также дает явное преимущество в скорости выполнения.
После того, как вы обнаружили множество тонов в музыкальном сигнале, вы можете обнаружить музыкальный ключ, оценив 12 различных кандидатов в ключевые группы по совокупности нот участника в этом музыкальном сигнале. Другое мое приложение, PitchScope Navigator, также может обнаруживать музыкальный ключ в режиме реального времени.
Возможно, вы захотите приобрести компилятор C++ и перекомпилировать мой исходный код, чтобы вы могли просмотреть его выполнение и посмотреть, как работают мои алгоритмы. Он также будет декодировать файл MP3. Вы также можете загрузить исполняемый файл этого приложения, PitchScope Player, из множества мест в Интернете, чтобы увидеть, как он работает на компьютере под управлением Windows с файлом MP3 по вашему выбору.
https://github.com/CreativeDetectors/PitchScope_Player
https://en.wikipedia.org/wiki/Transcription_(music)
Ниже приведено изображение логарифмического ДПФ (созданного моим программным обеспечением C++) для 3-х секунд гитарного соло на полифонической записи в формате mp3. Он показывает, как появляются гармоники для отдельных нот на гитаре во время исполнения соло. Для каждой ноты в этом логарифмическом ДПФ мы можем видеть его множественные гармоники, проходящие вертикально, потому что каждая гармоника будет иметь одинаковую временную ширину.