Как подключить Web Midi API к нативному приложению (например, Ableton live)

[Если есть лучшее место, чтобы задать этот вопрос, пожалуйста, дайте мне знать!]

Примечание: я на Mac.

Я успешно подключил MIDI-клавиатуру к своему браузеру (Chrome), используя Web MIDI API.

Мне интересно, могу ли я также подключить приложения (например, Ableton Live), чтобы, когда Ableton выводил MIDI-сообщения, эти сообщения могли быть получены браузером?

Варианты, которые я вижу:

  1. Отправьте Midi из Ableton на мою MIDI-клавиатуру, которая перенаправляет их в Web MIDI API (кто-нибудь может пролить свет на то, как это можно настроить?)
  2. Используйте драйвер IAC (межплатформенный обмен данными) в Mac OS, который "позволяет, так сказать, создавать виртуальные MIDI-кабели между приложениями внутри коробки". Я понятия не имею, как это настроить, потому что "web midi api" не отображается в Midi Studio.

Я бы предпочел вариант 2, чтобы он также работал, когда нет физического MIDI-устройства, но я также был бы рад узнать, может ли вариант 1 работать!

Спасибо за любой вклад по этому вопросу!

1 ответ

Решение

Документация для Web MIDI API показалась мне немного запутанной, поэтому я попытался webmidi вместо этого (он построен поверх Web MIDI API, поэтому все, что он делает, должно быть также реализовано с использованием "сырого" API).

Чтобы получать MIDI-сообщения, это работает для меня:

WebMidi.enable(function(err) {
  if (err) throw err;
  console.log("WebMidi enabled!");
  WebMidi.getInputByName('IAC Driver Bus 1').addListener('noteon', 'all', function(e) {
    console.log('note on', e);
  });
});

В Ableton "Midi To" должен указывать на устройство IAC (если оно не отображается, вам может потребоваться открыть настройки MIDI и включить его в качестве устройства вывода):

MIDI выход

Предостережение: я обнаружил, что это работает только для MIDI-треков, к которым не прикреплены инструменты (см. Эту страницу).

РЕДАКТИРОВАТЬ: я предполагаю, что устройство называется аналогично на вашем Mac, в противном случае вот код, который я использовал для перечисления устройств ввода и вывода:

WebMidi.enable(function(err) {
  if (err) throw err;
  WebMidi.inputs.forEach(input => {
    console.log('- id  :', input.id);
    console.log('- name:', input.name);
    console.log('- manu:', input.manufacturer);
    console.log('- conn:', input.connection);
    console.log('---');
  });
  console.log('outputs:', WebMidi.outputs);
  WebMidi.outputs.forEach(output => {
    console.log('- id  :', output.id);
    console.log('- name:', output.name);
    console.log('- manu:', output.manufacturer);
    console.log('- conn:', output.connection);
    console.log('---');
  });
});

Чтобы отправлять midi-события из Ableton в Web MIDI API на OSX, вам необходимо сделать следующее:

1) Запустите встроенное приложение OSX под названием "Audio MIDI Setup". Выберите "MIDI Studio". Дважды щелкните "Драйвер IAC". Затем установите флажок "Устройство в сети".

2) Перейдите в Ableton -> Настройки -> MIDI. Внизу для "Вход: драйвер IAC (шина 1)" включите "Отслеживание" и "Дистанционное управление". Для "Выход: драйвер IAC (шина 1)" включите "Track".

3) Теперь на миди-треке Ableton, с которого вы хотите отправлять заметки, выберите "Драйвер IAC" в качестве миди-выхода.

4) Теперь "Драйвер IAC (шина 1)" должен отображаться как MIDI-вход через веб-интерфейс MIDI API.

Этот процесс описан здесь: https://www.youtube.com/watch?v=MkWZ4rtRybQ.

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