WedX - журнал о программировании и компьютерных науках

Получить данные ноты из файла MIDI

Есть ли способ получить данные ноты из файла MIDI? То есть я хочу разбить MIDI-файл на составные части, чтобы они были в виде уникального слова (или любого другого типа данных). Что я хочу сделать в конце, так это взять MIDI-файл и найти паттерны в нотах. Получите каждую ноту, найдите ее частоту (воспроизведения) и отметьте, насколько вероятно, что другие ноты будут воспроизведены после нее.

Было бы неплохо сделать это на C/C++, но подойдет любой язык.


Ответы:


1

Nik Reisman - извините, но я с вами не согласен... разбор midi на C#, C++ - это что-то около 400 строк кода... Ничего сложного и ничего сложного.

Я советую вам начать с этой ссылки: https://web.archive.org/web/20141227205754/https://www.sonicspot.com:80/guide/midifiles.html
Здесь есть все, что вам нужно знать о миди а как читать..

В кратком описании как будет работать парсер:
1)Открыть миди в байтовом режиме
2)Читать шапку шапки, где есть информация о размере, количестве треков и ВАЖНО формате файла!!
- Там есть 3 типа форматов: 0,1,2 (тип 2 действительно "ценный", миди-файлов с таким типом мало, поэтому читать миди не нужно, если есть тип 2)
- если там не написано: "MThd" (0x4D546864), закончить с ошибкой (плохой миди-файл)
3)Читать фрагмент трека
- если там не написано: "MTrk" (0x4D54726B) закончить с ошибкой (это плохой миди-файл)
4)Прочитать midi-события.. - Событий очень много, вы можете прочитать их все с помощью команд if-else, либо вы можете прочитать только те события, которые хотите знать, например NOTE ON, NOTE OFF - Иногда в некоторых MIDI-файлы не отключены.

На сайтах все очень хорошо описано. Если вы откроете миди файл в байтовом режиме у вас будет всего несколько методов и все тогда только про команды if-else и там вы поймаете что хранится прямо сейчас. веб-сайты это также объясняется. Это не сложно. Вы можете поискать в Google много сайтов, где также объясняется VARIABLE LENGTH с некоторыми изображениями и примерами. Поэтому я не думаю, что это сложно объяснить здесь.

Если вы хотите еще немного совета, напишите мне, я попробую. Но разобрать миди не так сложно, как кажется. Если у вас есть какие-то проблемы, напишите мне..

12.09.2012
  • Может синдром НИЗ? Я имею в виду, что класс std::vector не сложно написать на поверхности, это просто массив переменной длины... std::log2() тоже не сложно написать... и так далее. Почему бы не написать все самому? Такие вещи, как синтаксический анализ файлов вручную, — самая неприятная вещь из всех, особенно при работе со стандартными форматами, которые определенно должны иметь где-то работающую надежную реализацию. 30.04.2014
  • Извините, я мог отправить ему 2198312093 фреймворков и сторонних решений, и у него могли возникнуть проблемы посерьезнее, чем если бы он написал их самостоятельно. По крайней мере, если я использую сторонние библиотеки, у меня возникают большие проблемы, чем если бы я написал их сам. И в любом случае КТО-ТО должен написать код. Если я тот или какой-нибудь Джозеф Новак из Тайваня напишу, это не важно. Все время можно получить какие-то ошибки. И если вы действительно хотите ПОНЯТЬ, что делает какая-то библиотека, вам в любом случае нужно посмотреть код, лежащий в ее основе. Поэтому во многих случаях проще написать его самостоятельно. 30.04.2014

  • 2

    Разбор MIDI-файлов вручную не доставляет удовольствия, поверьте мне на слово. ;) Формат, хотя и хорошо задокументирован, с ним трудно иметь дело, поскольку вы всегда находитесь на уровне необработанных байтов. Поскольку вы заинтересованы в извлечении некоторой значимой информации из самих MIDI-файлов, я бы рекомендовал использовать такой фреймворк, как Juce., написанный на C++ и поддерживающий чтение MIDI-файлов.

    Juce довольно большой, но API хороший и хорошо документированный. Например, класс для разбора MIDI-файлов довольно прост и удобен в использовании. использовать.

    07.09.2010

    3

    Существует ряд готовых решений, берущих входные данные из MIDI-файла, генерирующих музыкальную визуализацию, поэтому в теории и на практике парсер MIDI работает нормально.

    Я работаю над таким музыкальным визуализатором в HTML5, генерируя вертикальную временную шкалу нот сверху › вниз в прямом эфире для поддержки пианистов с ограниченными возможностями.

    DLP-проектор отличный, но, похоже, мне нужно установить большой ЖК-экран прямо над клавиатурой пианино, чтобы визуализация соответствовала играемым нотам.

    @Brendan Kavanagh — лидер, другого ключевого разработчика зовут Стивен Малиновски.

    просто следуйте моему вопросу, чтобы получить правильные веб-ссылки

    Как создать визуализатор MIDI-файлов, чтобы получать входные данные из MIDI-файла и отображать временную шкалу MIDI на клавиатуре, чтобы соответствовать нотам, сыгранным реальным игроком

    02.07.2020
    Новые материалы

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..


    Для любых предложений по сайту: [email protected]