Spec-Zone.ru › Web APIs

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

Событие, передаваемое в MIDIInput midimessage событие.

MIDIConnectionEvent

Событие, передаваемое в MIDIAccess statechange и MIDIPort statechange события, когда порт становится доступным или недоступным.

Требования к безопасности

Доступ к 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 загружаются только в браузере

См. также

  • Введение в Web MIDI
  • Создание музыки в браузере

© 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API