Простая, кроссплатформенная 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", его использование выходит далеко за рамки просто игрового дизайна.