ウェブページ(JavaScript)からDAWへのノート入力
ウェブページ上からDAWへ簡単にノート入力できないかというのを考えた。結局 Web MIDI API でできた。わかってから検索すると同様のことをしている人も見つかる。
クリップボードは使えるか
MIDI をコピペする仕様ってあるのだろうか? ウェブ上からコピーできたら便利ではないか → 以下の理由で無理
- コピペする仕様はなさそう
- MIDI ファイルとしてコピーしてもトラックにペーストする形で使い勝手がよくない
- そもそも Web Clipboard API は任意のデータ型は扱えない
MIDI デバイス
Web MIDI API があるので、JavaScript が仮想的にMIDIキーボードとして振舞えば入力できそう。ソフトウェア間のMIDIメッセージのやりとりなので、中継する仮想MIDIデバイスが必要になる。
Mac の場合は仮想 MIDI デバイスが OS 組込みでできるのに対し、Windows にそういった機能はない。
Ableton がいいドキュメントを出している。ここで紹介されている loopMIDI を使うと Windows でも仮想MIDIデバイスをつくれる。
Web MIDI API を使いブラウザから DAW へ入力を行う
Web MIDI API 自体はかなり使うのが簡単で不安になる。適当に出力可能なMIDIポートすべてにメッセージを投げつけるなら以下のようにしてできる。
async function midiDeviceSend(notes) {
function noteOn(note, velocity) {
return [0x90, note, velocity];
}
function noteOff(note) {
return [0x80, note, 0];
}
const midi = await navigator.requestMIDIAccess();
const outputs = midi.outputs;
if (outputs.size === 0) {
console.log('no output devices are found');
return;
}
for (let output of outputs.values()) {
console.log(output);
for (let note of notes) {
output.send(noteOn(note, 100));
output.send(noteOff(note), window.performance.now() + 500);
}
}
} なおページをリロードしたりする際に接続されている全MIDIチャンネルに all note off とかが送られるみたい。
関連エントリー
- LAN 内の mDNS に応答するホストを列挙したい PTR _services._dns-sd._udp.local. A/AAAA [ソースアドレス].in-addr.arpa. をやりたい...
- VALETON GP-5 + 自作MIDIデバイスたち VALETON GP-5 というマルチエフェクタを買ってみた。小さいながら凝っていて、アンプシミュレータも内蔵しているのでヘッドフォン直結や...
- Mac でウェブカメラの定期撮影を Swift で書く macOS 用にウェブカメラからjpgを取得するコマンドラインツールにimagesnapというのがある。単発で使うには問題ないんだけど、イン...
- はてブ用ブックマークレット 現在の非表示ユーザの総数: javascript:(async()=>{alert((await(await fetch("http://b...
- mbed USBSerial を WebUSB から扱うには mbed USBDevice ライブラリの中に USB CDC で動く USBSerial クラスが実装されている。これを Web USB ...