Web MIDI API
Безопасный контекст: Эта функция доступна только в безопасных контекстах (HTTPS), в некоторых или во всех поддерживающих браузерах.
Web MIDI API подключается к устройствам Musical Instrument Digital Interface (MIDI) и взаимодействует с ними.
Интерфейсы обрабатывают практические аспекты отправки и получения сообщений MIDI. Поэтому API можно использовать для музыкальных и не музыкальных целей, с любым устройством MIDI, подключённым к вашему компьютеру.
Интерфейсы
MIDIInputMap-
Представляет все доступные порты ввода MIDI.
MIDIOutputMap-
Представляет все доступные порты вывода MIDI.
MIDIAccess-
Предоставляет методы для перечисления устройств ввода и вывода, а также для доступа к отдельному устройству.
MIDIPort-
Представляет отдельный порт MIDI.
MIDIInput-
Предоставляет метод для работы с сообщениями MIDI из порта ввода.
MIDIOutput-
Очередь сообщений для связанного порта MIDI. Сообщения могут быть отправлены немедленно или после заданной задержки.
MIDIMessageEvent-
Событие, передаваемое в
MIDIInputmidimessageсобытие. MIDIConnectionEvent-
Событие, передаваемое в
MIDIAccessstatechangeиMIDIPortstatechangeсобытия, когда порт становится доступным или недоступным.
Требования к безопасности
Доступ к API запрашивается с помощью метода navigator.requestMIDIAccess().
- Метод должен вызываться в безопасном контексте.
- Доступ может быть ограничен политикой HTTP
midiполитики разрешений. - Пользователь должен явно предоставить разрешение на использование API через механизм, специфичный для пользователя агента, или ранее предоставить разрешение. Обратите внимание, что если доступ запрещён политикой разрешений, то он не может быть предоставлен пользователем.
Статус разрешения можно запросить, используя метод API разрешений navigator.permissions.query(), передав описатель разрешения с разрешением midi и (необязательным) свойством sysex:
navigator.permissions.query({ name: "midi", sysex: true }).then((result) => {
if (result.state === "granted") {
// Access granted.
} else if (result.state === "prompt") {
// Using API will prompt for permission
}
// Permission was denied by user prompt or permission policy
});
Примеры
Получение доступа к порту MIDI
Метод navigator.requestMIDIAccess() возвращает промис, который разрешается в объект MIDIAccess, который затем можно использовать для доступа к устройству MIDI. Метод должен вызываться в безопасном контексте.
let midi = null; // global MIDIAccess object
function onMIDISuccess(midiAccess) {
console.log("MIDI ready!");
midi = midiAccess; // store in the global (in real usage, would probably keep in an object instance)
}
function onMIDIFailure(msg) {
console.error(`Failed to get MIDI access - ${msg}`);
}
navigator.requestMIDIAccess().then(onMIDISuccess, onMIDIFailure);
Перечисление входов и выходов
В этом примере список портов ввода и вывода извлекается и выводится в консоль.
function listInputsAndOutputs(midiAccess) {
for (const entry of midiAccess.inputs) {
const input = entry[1];
console.log(
`Input port [type:'${input.type}']` +
` id:'${input.id}'` +
` manufacturer:'${input.manufacturer}'` +
` name:'${input.name}'` +
` version:'${input.version}'`,
);
}
for (const entry of midiAccess.outputs) {
const output = entry[1];
console.log(
`Output port [type:'${output.type}'] id:'${output.id}' manufacturer:'${output.manufacturer}' name:'${output.name}' version:'${output.version}'`,
);
}
}
Обработка ввода MIDI
В этом примере все сообщения MIDI ввода выводятся в консоль.
function onMIDIMessage(event) {
let str = `MIDI message received at timestamp ${event.timeStamp}[${event.data.length} bytes]: `;
for (const character of event.data) {
str += `0x${character.toString(16)} `;
}
console.log(str);
}
function startLoggingMIDIInput(midiAccess) {
midiAccess.inputs.forEach((entry) => {
entry.onmidimessage = onMIDIMessage;
});
}
Спецификации
| Спецификация |
|---|
| Web MIDI API |
Совместимость с браузерами
| Рабочий стол | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
Web_MIDI_API |
43 | 79 | 110 | 30 | Нет | 43 | 110 | 30 | Нет | 4.0 | Нет |
| Рабочий стол | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
Web_MIDI_API |
64 | 79 | Нет | 51 | Нет | 64 | Нет | 47 | Нет | 9.0 | 64 |
| Рабочий стол | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
Web_MIDI_API |
43 | 79 | 108Доступ к API ограничен установкой дополнения для разрешений сайта дополнения для разрешений сайта (запрос у пользователя), безопасным контекстом иPermission Policy: midi. |
30 | Нет | 43 | Нет | 30 | Нет | 4.0 | 43 |
secure_context_required |
43 | 79 | 108 | 30 | Нет | 43 | Нет | 30 | Нет | 4.0 | 43 |
api.Navigator.requestMIDIAccess
Таблицы BCD загружаются только в браузере
http.headers.Permissions-Policy.midi
Таблицы BCD загружаются только в браузере
api.Permissions.permission_midi
Таблицы BCD загружаются только в браузере
См. также
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/Web_MIDI_API