Простая, кроссплатформенная MIDI-библиотека для Python

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

Мое время разделено примерно на 50/50 между Windows и Ubuntu, поэтому что-то, что "просто работает" на обеих платформах, было бы действительно полезным.

Какие-либо предложения?

7 ответов

Решение

Библиотека MIDIUtil (размещенная здесь в Google Code) делает то, что вы хотите: записывать файлы MIDI из чистой библиотеки Python. Одна хорошая вещь об этом (и полное раскрытие: я автор) заключается в том, что вам не нужно отслеживать MID-события более низкого уровня, такие как note-on и note-off: он обрабатывает их для вас.

В качестве примера для написания заметки вы должны сделать что-то вроде:

MyMIDI = MIDIFile(1)
track = 0
channel = 0
pitch = 60
time = 0
duration = 1
volume = 100
MyMIDI.addNote(track,channel,pitch,time,duration,volume)

Надеюсь это поможет

Я искал чисто Python-библиотеку для генерации MIDI-файла, именно mxm Python MIDI-библиотека - именно это.

Из этого фрагмента dzone есть версия вышеупомянутой библиотеки для одного файла, smidi.py ( gist'd здесь для потомков)

Использование довольно просто:

>>> import smidi
>>> m = smidi.MidiOutFile('out.mid')
>>> m.header()
>>> m.start_of_track()
>>> m.update_time(0)
>>> m.note_on(note=0x40)  # single note
>>> m.update_time(192)
>>> m.note_off(note=0x40) # stop it after 192
>>> m.update_time(0)
>>> m.end_of_track()
>>> m.eof()

Предположительно работает на Windows (как оригинальный пример использует C:\out.mid в качестве выходного имени файла), и я проверил его на OS X

pyPortMidi - это оболочка Python от PortMidi, которая описывается как "кроссплатформенная библиотека C для управления MIDI в реальном времени". Я сам этим не пользовался, но выглядит очень многообещающе. Явное упоминание о возможности отправки данных MIDI в режиме реального времени.

Если вам нужно только сгенерировать Midi или обработать MIDI-файлы, попробуйте mingus, это отличный пакет, который также позволяет использовать более высокие абстракции, такие как аккорды, последовательности аккордов, гаммы и так далее.

Я попробовал восемь пакетов, перечисленных в вики http://wiki.python.org/moin/PythonInMusic. Я обнаружил, что music21 ( http://web.mit.edu/music21/) был

  • самый полный
  • лучший учебник
  • проще всего установить на windows

но что касается вашего запроса о простоте, я думаю, что это не самый простой. Но я не мог заставить другие программы читать миди-файлы надежным способом (у меня есть множество странных и замечательных форматов миди-файлов)

Поддержка midi (внутри и снаружи) была добавлена ​​в pyGame 1.9, хотя в основном она находится на стадии разработки и еще не очень хорошо документирована, но работает.

Поддержка Midi также развивается в преемнике pyGame, pgreloaded (или pygame2).

Также обратите внимание, что, хотя в названии pyGame присутствует слово "game", его использование выходит далеко за рамки просто игрового дизайна.

Посмотрите на cSounds.

Другие вопросы по тегам