Category tech.

ウェブページ上から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 とかが送られるみたい。

  1. トップ
  2. tech
  3. ウェブページ(JavaScript)からDAWへのノート入力

ZOOM ズーム USBオーディオインターフェース 2イン/2アウト32bitフロート入力対応 2023年発売 UAC-232 - ZOOM(ズーム)

ZOOM(ズーム)

5.0 / 5.0


ZOOM UAC-232 を買って気に入って使っている。ただ、入力が2チャンネルしかない。今のところ必要はないが、もし複数ある場合接続したらどうなるのだろうか、と思った。

取説などには複数台繋いだ場合の挙動についての記載はなかった。結局問合せたところ、同一のPCに複数台接続するのは想定されておらず、Mix Control は複数台の UAC-232 を同時に認識できない仕様とのことだった。

  1. トップ
  2. tech
  3. UAC-232 は1台のPCに複数接続はできない

ZOOM ズーム USBオーディオインターフェース 2イン/2アウト32bitフロート入力対応 2023年発売 UAC-232 - ZOOM(ズーム)

ZOOM(ズーム)

5.0 / 5.0

ミキサーダイアグラム https://zoomcorp.com/manuals/uac-232-ja/image/UAC-232_diagram.svg

入力が Dual ADC でダイナミックレンジが非常に広くとられており、さらに32bit float にAD変換することで入力のクリッピングという概念はほぼなくなる、というもの。最大入力レベルがあるのでクリッピングが完全になくなるわけではないし、SNRを考えればあまり小さな信号も入力できない。しかし、実際のマイクやライン入力に対しては十分なので、録音したものを、あとからなんとかできる範囲はかなり広がる。

こういう変なものにしては意外と値段が安いので買ってしまった。ちょいちょい無駄にオーディオインターフェイス買ってしまう。

いじれるレベルの一覧

INPUT から OUTPUT まででいじれる範囲のメモ。32bit float の場合 USB 入力に関してはどこでいじっても(録音後にいじっても)デジタルなので気にする必要はない。スペック上、入力換算ノイズが-127dBuらしいので、これよりも低ノイズのアナログアンプでなければ前段に繋いでもSNRの向上もない 。とにかく普通のマイクなら直接繋げってこと。

MUSIC モード時 (各入力ソースが個別にUSB入力になり、ダイレクトモニターもチャンネルごとに分離)

1. 入力レベル (デジタル) → Mix Control の左側のやつ。Mix Control の波形から後に影響。USB 入力に関係するのはここだけ。
2. 出力レベル (デジタル) → Mix Control の Level ノブ。ダイレクトモニターの出力に影響する。上げすぎると出力がクリッピングする。
3. 出力レベル (アナログ) → 本体の OUTPUT ノブ。OUPUT 端子の出力電圧を制限する形で働く。フルスケールが 0dBFS 時に +18dBu (=6.153V)

STREAMING モード時 (入力信号がミックスされてUSB入力になる。ダイレクトモニターもミックス結果を聞く)

1. 入力レベル (デジタル) → Mix Control の左側のやつ。Mix Control の波形から後に影響。
2. ミックスレベル (デジタル) → Mix Control の右側のやつ。実質的には入力レベルとやってることは変わらないが、Mic Control で見れる波形に影響しない。USB 入力に関係するのはここまで
3. 出力レベル (アナログ) → 本体の OUTPUT ノブ。OUPUT 端子の出力電圧を制限する形で働く。フルスケールが 0dBFS 時に +18dBu (=6.153V)

出力

追記: ホワイトノイズは接続していない入力側から発生しているようで、Mix Control で接続していないチャンネルのレベルを最小にしてやれば無音ぐらいまでさがることがわかった。

なので以下書いてあることは割とどうでもよく、セオリー通りで以下のようにすればいい

  • Mix Control のレベルはクリップしないぐらいまで安全を見て下げる
  • OUPUT ボリュームは聞きやすいぐらいまで上げる

ダイレクトモニターに関して、ボリュームをどう設定するか問題がある。

本体の OUPUT ノブはまわしきるとホワイトノイズが結構ある。このOUTPUTはDA後、出力直前のアナログボリュームだと思うが出力ゲインが高すぎるのか、DAのノイズ性能なのかよくわからない。 この OUTPUT ボリュームは最大値(+18dBu)からどれぐらい減らすかというものなので、クリッピングという概念はない。

一方、Mix Control で Level を最大にしても、これはデジタル補正なので、ホワイトノイズはほぼ増えない。しかし DA 前のレベルなので、上げすぎて 0dBFS を超えれば、DAでクリップしてしまう。

よって、Mix Control の Level を優先して上げることでSNRを稼ぎ、本体のOUPUTボリュームを適切に設定するということになる。とはいえモニターのホワイトノイズを気にしないなら Mix Control の Level は下げ気味にして、素直にOUTPUTボリュームの調整だけでもいい。

OBS で 32bit float 録音して DaVinci Resolve へ

(Windows 11)

とりえあえず出力フォーマットは 32bit float にする必要がある。

  • 録画フォーマット .mkv
  • 映像エンコーダ NVIDIA NVENC AV1
  • 音声エンコーダ FFmpeg PCM (32-bit float)
  • 音声トラックを必要なだけ選択

としている。これで DaVinci Resolve はマルチトラックを認識してくれるし、32bit float も正しく扱ってくれる。

この状態で「グローバル音声デバイス」で「2-ZOOM UAC-232 Audio」を設定して、録音してみたところクリップしてしまった。OBS 上で表示されるレベルメータも0dBでクリップしている様子が見える。Windows が悪いっぽい?


obs-asio というプラグインを別途入れて、ASIO で入力するように設定すると、クリップせずに正しく扱えるようになった。

  1. トップ
  2. tech
  3. ZOOM UAC-232 買った