- pygame.midi
-
Модуль pygame для взаимодействия с MIDI-входом и выходом.
Новый в pygame 1.9.0.
Модуль midi может отправлять выходные данные на MIDI-устройства и получать входные данные с MIDI-устройств. Он также может перечислять MIDI-устройства в системе.
Модуль midi поддерживает реальные и виртуальные MIDI-устройства.
Он использует библиотеку portmidi. Портируется на любые платформы, поддерживаемые portmidi (в настоящее время Windows, Mac OS X и Linux).
В настоящее время используется pyportmidi, но в будущем может использовать собственные связи. Связи pyportmidi включены в pygame.
Новый в pygame 2.0.0.
Это события pygame (
pygame.event), предназначенные для использования с MIDI. СобытиеMIDIINиспользуетсяpygame.midi.midis2events()при преобразовании MIDI-событий в события pygame.MIDIIN MIDIOUT
- pygame.midi.init()
-
инициализирует модуль midiinit() -> None
Инициализирует модуль
pygame.midi. Должен быть вызван перед использованием модуляpygame.midi.Безопасно вызывать это несколько раз.
- pygame.midi.quit()
-
деиннициализирует модуль midiquit() -> None
Деиннициализирует модуль
pygame.midi. Еслиpygame.midi.init()был вызван для инициализации модуляpygame.midi, то эта функция будет вызвана автоматически при завершении программы.Безопасно вызывать эту функцию несколько раз.
- pygame.midi.get_init()
-
возвращает True, если модуль midi в настоящее время инициализированget_init() -> bool
Получает состояние инициализации модуля
pygame.midi.- Возвращает
-
Trueесли модульpygame.midiв настоящее время инициализирован. - Тип возвращаемого значения
-
bool
Новый в pygame 1.9.5.
- pygame.midi.Input
-
Input используется для получения MIDI-входа с MIDI-устройств.Input(device_id) -> NoneInput(device_id, buffer_size) -> None
- Параметры
-
device_id (int) -- идентификатор MIDI-устройства
buffer_size (int) -- (необязательно) количество буферизуемых событий ввода
- close()
-
закрывает MIDI-поток, очищая все ожидающие буферы.close() -> None
PortMidi пытается закрыть открытые потоки при выходе приложения.
Примечание
Это особенно сложно в Windows.
- poll()
-
возвращает True, если есть данные, или False, если нет.poll() -> bool
Используется для указания наличия данных.
- Возвращает
-
Trueесли есть данные,Falseв противном случае - Тип возвращаемого значения
-
bool
- Возможные исключения
-
MidiException -- при ошибке
- read()
-
считывает num_events MIDI-событий из буфера.read(num_events) -> midi_event_list
Считывает данные из буфера ввода и возвращает MIDI-события.
- Параметры
-
num_events (int) -- количество считываемых событий ввода
- Возвращает
-
формат midi_event_list
[[[status, data1, data2, data3], timestamp], ...] - Тип возвращаемого значения
-
list
- pygame.midi.Output
-
Output используется для отправки midi на устройство выводаOutput(device_id) -> NoneOutput(device_id, latency=0) -> NoneOutput(device_id, buffer_size=256) -> NoneOutput(device_id, latency, buffer_size) -> None
buffer_sizeопределяет количество событий вывода, которые будут буферизованы, ожидая вывода. В некоторых случаях (см. ниже) PortMidi вообще не буферизует вывод и просто передает данные в API более низкого уровня, в этом случае buffersize игнорируется.latency— задержка в миллисекундах, применяемая к отметкам времени, чтобы определить, когда фактически должен произойти вывод. Еслиlatencyменьше 0, предполагается 0.Если
latencyравно нулю, отметки времени игнорируются, и весь вывод передается немедленно. Еслиlatencyбольше нуля, вывод откладывается до момента времени сообщения плюсlatency. В некоторых случаях PortMidi может обеспечить более точное время, чем ваше приложение, передавая отметки времени драйверу устройства или оборудованию. Задержка также может помочь вам синхронизировать midi-данные с аудиоданными, согласовав задержку midi с задержкой буфера аудио.Примечание
Время измеряется относительно источника времени, указанного в time_proc. Отметки времени являются абсолютными, а не относительными задержками или смещениями.
- abort()
-
немедленно прерывает исходящие сообщенияabort() -> None
Вызывающий должен немедленно закрыть порт вывода; этот вызов может привести к передаче частичного midi-сообщения. Для Midi ввода нет команды прерывания, так как пользователь может просто игнорировать сообщения в буфере и закрыть устройство ввода в любое время.
- close()
-
закрывает midi-поток, очищая все ожидающие буферы.close() -> None
PortMidi пытается закрыть открытые потоки при выходе приложения.
Примечание
Это особенно сложно в Windows.
- note_off()
-
выключает midi-ноту (нота должна быть включена)note_off(note, velocity=None, channel=0) -> None
Отключает ноту в потоке вывода. Нота должна быть включена, чтобы это работало правильно.
- note_on()
-
включает midi-ноту (нота должна быть выключена)note_on(note, velocity=None, channel=0) -> None
Включает ноту в потоке вывода. Нота должна быть выключена, чтобы это работало правильно.
- set_instrument()
-
выбирает инструмент со значением от 0 до 127set_instrument(instrument_id, channel=0) -> None
Выбирает инструмент.
- pitch_bend()
-
изменяет высоту канала.set_instrument(value=0, channel=0) -> None
Настройка высоты канала. Значение — целое число со знаком от -8192 до +8191. Например, 0 означает «без изменений», +4096 — обычно на полутон выше, а -8192 — на целую октаву ниже (хотя музыкальный диапазон, соответствующий диапазону изменения высоты тона, также может быть изменён в некоторых синтезаторах).
Если значение не указано, изменение высоты тона возвращается к «без изменений».
Добавлен в pygame 1.9.4.
- write()
-
записывает список midi-данных в Outputwrite(data) -> None
Запись серии MIDI-информации в виде списка.
- Параметры
-
data (список) — данные для записи, ожидаемый формат
[[[status, data1=0, data2=0, ...], timestamp], ...], где поляdata#являются необязательными - Исключения
-
IndexError — если в списке данных более 1024 элементов
Пример:
# Program change at time 20000 and 500ms later send note 65 with # velocity 100. write([[[0xc0, 0, 0], 20000], [[0x90, 60, 100], 20500]])
Примечание
Отметки времени будут проигнорированы, если latency = 0
Чтобы нота игралась немедленно, отправляйте MIDI-информацию с отметкой времени, взятой из функции Time
Необязательные поля данных:
write([[[0xc0, 0, 0], 20000]])эквивалентноwrite([[[0xc0], 20000]])
- write_short()
-
записывает до 3 байт midi-данных в Outputwrite_short(status) -> Nonewrite_short(status, data1=0, data2=0) -> None
Вывод MIDI-информации объёмом 3 байта или меньше. Поля
dataнеобязательны и считаются равными 0, если опущены.Примеры значений байта состояния:
0xc0 # program change 0x90 # note on # etc.
Пример:
# note 65 on with velocity 100 write_short(0x90, 65, 100)
- write_sys_ex()
-
записывает системное исключительное midi-сообщение с отметкой времени.write_sys_ex(when, msg) -> None
Записывает системное исключительное midi-сообщение с отметкой времени.
- Параметры
-
msg (список[int] или str) — midi-сообщение
when — отметка времени в миллисекундах
Пример:
midi_output.write_sys_ex(0, '\xF0\x7D\x10\x11\x12\x13\xF7') # is equivalent to midi_output.write_sys_ex(pygame.midi.time(), [0xF0, 0x7D, 0x10, 0x11, 0x12, 0x13, 0xF7])
- pygame.midi.get_count()
-
возвращает количество устройств.get_count() -> num_devices
Идентификаторы устройств изменяются от 0 до
get_count() - 1
- pygame.midi.get_default_input_id()
-
возвращает номер устройства стандартного вводаget_default_input_id() -> default_id
Ниже описаны подробности использования этой функции и функции
get_default_output_id().Возвращает идентификатор стандартного устройства или
-1, если устройств нет. Результат можно передать в классInput/Output.В ОС пользователь может указать стандартное устройство, установив переменную среды. Например, для использования устройства №1:
set PM_RECOMMENDED_INPUT_DEVICE=1 or set PM_RECOMMENDED_OUTPUT_DEVICE=1
Сначала пользователь должен определить доступные идентификаторы устройств, используя приложение «testin» или «testout».
В целом, реестр — более подходящее место для такой информации. В случае USB-устройств, которые могут появляться и исчезать, использование целых чисел не очень надёжно для идентификации устройств. В Windows, если
PM_RECOMMENDED_INPUT_DEVICE(илиPM_RECOMMENDED_OUTPUT_DEVICE) не найдено в среде, то стандартное устройство определяется по строке в реестре по адресу:HKEY_LOCAL_MACHINE/SOFTWARE/PortMidi/Recommended_Input_Device or HKEY_LOCAL_MACHINE/SOFTWARE/PortMidi/Recommended_Output_Device
Возвращается номер первого устройства, содержащего строку, точно соответствующую заданной строке. Например, если строка в реестре — «USB», и устройство 1 называется «Вх USB MidiSport 1x1», то это будет стандартный ввод, потому что содержит строку «USB».
Помимо имени,
get_device_info()возвращает «interf», что является именем интерфейса. «Интерфейс» — это базовая программная система или API, используемая PortMidi для доступа к устройствам. Поддерживаемые интерфейсы:MMSystem # the only Win32 interface currently supported ALSA # the only Linux interface currently supported CoreMIDI # the only Mac OS X interface currently supported # DirectX - not implemented # OSS - not implemented
Чтобы указать и интерфейс, и имя устройства в реестре, разделите их запятой и пробелом. Строка перед запятой должна быть подстрокой строки «interf», а строка после пробела — подстрокой имени «name» для сопоставления устройства. Например:
MMSystem, In USB MidiSport 1x1
Примечание
В текущей версии стандартным устройством является просто первое устройство (устройство ввода или вывода с наименьшим PmDeviceID).
- pygame.midi.get_default_output_id()
-
возвращает номер устройства стандартного выводаget_default_output_id() -> default_id
См.
get_default_input_id()для подробностей использования.
- pygame.midi.get_device_info()
-
возвращает информацию об устройстве MIDIget_device_info(an_id) -> (interf, name, input, output, opened)get_device_info(an_id) -> None
Получает информацию об устройстве с заданным идентификатором.
- Параметры
-
an_id (int) -- id MIDI-устройства, которое запрашивается
- Возвращаемое значение
-
если идентификатор вне допустимого диапазона, возвращается
None, в противном случае возвращается кортеж (interf, name, input, output, opened).interf: строка, описывающая интерфейс устройства (например, 'ALSA')
name: строка, имя устройства (например, 'Midi Through Port-0')
input: 1, если устройство является устройством ввода, иначе 0
output: 1, если устройство является устройством вывода, иначе 0
opened: 1, если устройство открыто, иначе 0
- Тип возвращаемого значения
-
кортеж или None
- pygame.midi.midis2events()
-
преобразует события MIDI в события pygamemidis2events(midi_events, device_id) -> [Event, ...]
Принимает последовательность событий MIDI и возвращает список событий pygame.
Ожидается, что данные
midi_eventsбудут последовательностью((status, data1, data2, data3), timestamp)событий MIDI (все необходимые значения).- Возвращаемое значение
-
список событий pygame типа
MIDIIN - Тип возвращаемого значения
-
список
- pygame.midi.time()
-
возвращает текущее время в мс таймера PortMiditime() -> time
Время сбрасывается до 0 при инициализации модуля
pygame.midi.
- pygame.midi.frequency_to_midi()
-
Преобразует частоту в MIDI-ноту. Округляет до ближайшей MIDI-ноты.frequency_to_midi(midi_note) -> midi_note
пример:
frequency_to_midi(27.5) == 21
Новое в pygame 1.9.5.
- pygame.midi.midi_to_frequency()
-
Преобразует MIDI-ноту в частоту.midi_to_frequency(midi_note) -> frequency
пример:
midi_to_frequency(21) == 27.5
Новое в pygame 1.9.5.
- pygame.midi.midi_to_ansi_note()
-
Возвращает имя Ansi Note для MIDI-номера.midi_to_ansi_note(midi_note) -> ansi_note
пример:
midi_to_ansi_note(21) == 'A0'
Новое в pygame 1.9.5.
- exception pygame.midi.MidiException
-
исключение, которое могут генерировать функции и классы pygame.midiMidiException(errno) -> None
Изменить на GitHub
© Pygame Developers.
Licensed under the GNU LGPL License version 2.1.
https://www.pygame.org/docs/ref/midi.html