2024年 03月 02日

ステレオ・バランスド経路 (4ch) 切り替えスイッチ



ステレオ・バランスド経路を排他的に2分岐するスイッチが欲しかったが見つからず、仕方ないので作った。

GND もスイッチしたかったが6回路の物理スイッチというのはかなり入手しにくいので諦めてHOT/COLDだけスイッチとした。それでも4回路2接点スイッチが必要なため面倒くさい。今回は4回路3接点のロータリースイッチ を2接点に制限して使っている。

電源が必要でいいならリレーでいいが、電源の用意がめんどくさい。やるとしたらラッチングリレー(切り替え時だけ通電させるリレー)を使いたいが高価……

やりたかったこと

スピーカーがオンのままヘッドフォンをつけてしまい、スピーカーが鳴っていることに気付かないことが時々ある。これが嫌なので物理的になんとかする。

こんなことしなくても出力するインターフェイスを分けてPCから切り替えれば普通はいいはずだけど、アナログミキサーへ出力していて、そのモニター出力からスピーカーとヘッドフォンを出しているので、そうできなかった。

2024年 02月 25日

Studio One の MIDI で相対値を扱う

Studio One の MIDI デバイス設定は相対メッセージ (1 と -1 =127 だけ扱う) が、なぜか GUI からは設定できない。しかし対応はしている。

.surface.xml を編集するとできるらしい

ヘルプから 「設定フォルダーを開く」すると C:\Users\[User]\AppData\Roaming\PreSonus\Studio One 6 が開く。User Devices 以下にファイルができる。ただ Studio One は終了時に設定ファイルを書きこむようなので、一度設定したら終了しないとファイルが見つからない。

type="knob"type="relative" にする。方向が逆という場合、子要素になっている MidiMessageoptionsreversed を指定する。

GUI上もそれっぽいノブが表示されるようになる。

ref. https://forums.presonus.com/viewtopic.php?p=218622#p218622

2024年 02月 18日

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

2024年 02月 15日

UAC-232 は1台のPCに複数接続はできない

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

ZOOM(ズーム)

5.0 / 5.0


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

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

2024年 01月 25日

ZOOM UAC-232 買った

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 で入力するように設定すると、クリップせずに正しく扱えるようになった。

2023年 12月 04日

M1 MacBook Air を買った

Windows ラップトップをしばらく探していたがThinkpadが不良だった件が尾をひき、選択肢としては DELL XPS ぐらいしかないがこれもまともなスペックだとかなり高価で購入に踏みきれずにいた。

手元にある MacBook はすべて修理不可レベルに古い機種となっており、しかも一番直近で買った (MacBook Pro Retina Late 2013 なのでいうて10年前の) ものはバッテリーが膨張してキーボードが打ちにくいレベルであった。

ということでとりあえずラップトップが1台もないのは困るので、現行 MacBook の最安である M1 MacBook Air にしてみた。M3 まで出てるのにいまさらという気もするが、それほど必要性が高いわけでもないし一旦これでいいのではないかという気持ち。

スペックはメモリを16GBにしたがSSDは256GB。512GB は欲しかったがなんとかなるだろう……

普通にオンラインの Apple Store で買ったが、ものすごく細かいところが作りこまれてて関心した。

  • 配送: 届きそうな当日になると SMS でメッセージがくる (配送はヤマト運輸だけど、ステータスを Apple 側でトラッキングする実装があるのだろう……)
  • 梱包: 開け口の封がカッターなどがいらないようになっていた
  • 内部ラップ: 本体が入っている白い箱はフィルムで覆われているが、これも開けやすいようになっていた (前から?)


届いでちょっとあせったのは MagSafe がなくて Type-C ポート2つのみというところで、そんなの事前にわかっていただろと言われそうだが、なぜか MagSafe はあると思いこんでいた。

2023年 10月 27日

PowerShell での Junction の作りかた

PowerShell では mklink がない。cmd を経由してもいいが以下でできる。特に管理者権限はいらない。

New-Item -Path D:\Junction -ItemType Junction -Value C:\Path\To\Target

備考: Explorer 上ではショートカットみたいなアイコンがついて区別される。Junction はディレクトリ単位でしかできない。

2023年 07月 29日

新しい BITS ジョブを作成できませんでした (MozillaUpdate による)

BITS ジョブ

現在のジョブ一覧。だいたいこれで悪さしているのはわかる

bitsadmin /list /verbose

ジョブクリア

bitsadmin /reset

BITS って何?

Windows Background Intelligent Service の略。ざっくりいうと Windows がなんかいい感じにダウンロードとかをやってくれるサービス。

イベントビューワでのエラー

イベントビューワで頻繁に以下のようなエラーが出て気になっていた。

新しい BITS ジョブを作成できませんでした。ユーザー Anna\cho45 (60) の現在のジョブ数は、グループ ポリシーを介して指定されたジョブ数の制限 (60) 以上です。この問題を解決するには、エラーを調べて処理が進んでいない BITS ジョブを完了するか取り消し、BITS サービスを再度開始してください。このエラーが再び発生する場合は、システム管理者に連絡して、グループ ポリシーにおける、ユーザー 1 人あたりおよびコンピューター 1 台あたりのジョブ数の上限を増やしてください。

Mozilla

うちの環境だと MozillaUpdate が無限に溜って BITS ジョブを浪費していた。なんでかわからん。Firefox では BITS を使ってアップデートファイルを受信するようになっている

'MozillaUpdate 308046B0AF4A39CB' TRANSFERRED 1 / 1 7348739 / 7348739

https://bugzilla.mozilla.org/show_bug.cgi?id=1856462 "MozillaUpdate causing Windows BITS service overflow (too many BITS operations queued)"

bugzilla にチケットが立っていた。2024-06-03時点で未解決

2023年 07月 21日

メトロノーム

いまいち検索しても気にいったソフトウェアメトロノームがなく (クソほど広告がついているとか、音色が気に入らないとか、無意味なログインを求めるとか)、一方でハードウェアのデジタルメトロノームもいくつか買ってみたがLINE OUTの品質が悪かったりしてヘッドフォンで聞くと不満があったりした。

自分で作るには音色が面倒だなあ、と思っていたが、「SoundFont WebAudio」で検索したところWebAudioFont というのがあり、まさに用途的にちょうど良さそうなのでこれを使ってベーシックなものを作った。

最初の発声タイミング

実装してみると悩むポイントが最初の発声タイミングで、何を重視するかで2つのタイミングがある

  • クリック間の時間を重視するなら、スタートを押した次のタイミングから発声
    • 拍の開始が1クリックずれる
  • スタートを押したタイミングを重視、スタートを押して即時に発声
    • 「即時」が実装上即時ではなく、原理的に最大20ms程度遅れるので、初回~2回目のクリックが不正確になる

今回は後者のスタートを押したタイミングを重視して最初の1クリックの不正確さは許容するという方針にしてある。何らかの音源を鳴らしながら TAP TEMPO で BPM をひろい、音源にあわせてクリックを鳴らしてみるみたいなとき、最初のクリックがずれると難しい。

もっとやるなら音源ごとのアタックのディレイを補正すべきだけどやっていない

2023年 06月 30日

ThinkPad スリープ不具合が修理不可とされ全額返金に……

1月にThinkPad X13 Gen 3 AMD の購入とスリープ後不正終了する問題というのを書いたが、このときはシステムボード交換されて返ってきた。しかしその後、別のスリープ障害が発生して長期に修理することになった。

結論からいうと原因不明・修理不可とされ全額返金対応となった。

症状:スリープから復帰しない

「スリープから復帰しない」にもいろんなパターンがあるが、本件では電源LEDがスリープを示す点滅の状態から、ハードリセット(電源ボタン長押し)以外の方法で復帰も終了もできないというパターン。

複数の条件があるようで、自分が確認した限りだと

  • モダンスリープ中である
    • 休止状態では発生しない
  • Wi-Fi 接続状態である
  • Windows Update のなんらかの処理が発生する(?)
  • 長くスリープする(?)

という感じ。電源を接続している間は休止に入らない、つまりモダンスリープになるため、電源接続状態で1~2日程度放置すると再現する。

修理 2度目 (未修理返却)

1度システムボード交換で修理しているので、そこに続く形で修理依頼をした。2月上旬に修理センター預りとなった。

しかし「修理センターで不具合が再現しない」と言われ「検証状態」が2ヶ月弱続き、3月下旬に未修理で返却される。

しかし返却翌日にこちらで再現。動画で録画。即日、再度修理依頼をした。修理の手配中 (数日間) にまた再現したためこちらも録画。

修理PCのデスクトップに再現した動画をまとめて置いてくれと言われたので、かなり詳細なメモをともに置いて送った。

修理 3度目 (未修理返却)

3月下旬そのまま3度目の修理に送る。

4月下旬になって進捗を訊くと「症状発生を1度確認」といわれる。検証用ストレージに換装して検証といわれる。Lenovo の修理は修理対応画面にコメントを書ける機能がある、ここから進捗を訊いている。

5月中旬になり進捗を訊くと「症状の発生を2回確認」といわれる。メールで若干詳細な報告がくる。「技術部門も含めて確認する」というコメントがくる。

5月下旬になり進捗を訊くと特にないと言われる。もう半年ぐらい預かりだがなんとかならないのか?という旨もつっつく。

突然「初期化して各種アップデートを行って修理完了として出荷する」と言われる。こんなに再現しないとずっと預ってるくせに??とかなり不信感がでたため「確実な再現方法がわかったのか。わかったからアップデートして再現しないことを確認できるようになったのか? 技術部門に確認と言っていたが行ったのか?」という旨を訊いた。これらの対する回答はなし。

これまでは一貫して修理フォームのコメントかメールだったが修理センターから急に電話。要約すると「修理の目処がたっていない。修理センターではなく、レノボ本社での対応となる。了承頂けるのであれば、お客様資産であるPCは一旦返却し、担当者から連絡させる。どういった対応になるかは修理センターではわからない。」 修理センターではこの時点で、修理不能ということしかわからないらしい。選択肢的に修理できる気がしないし保証期間は過ぎていくしで了承するしかない。

「メールじゃだめなんですか?」と訊いたら「こういった要件は電話ですることになっている。別途メールを送ることもできない」という答え。一通り要件が終わったあと、「この内容をメールして欲しい」といったが「できかねます」という回答。不信

返金

修理センターからの電話の翌日、レノボ担当者から電話。保証規定に基いて対応するといちいち言われる。購入してすぐに修理に出しているため初期不良で償却日数(減額)はないと言われる。当たり前。全く使えてないのに減額されたらひどい話。

修理センターから直接レノボ引き取りはできないらしく、一旦返却される。

返金用の申請書が送れれてきたので返送。返送してから3週間で入金された。

感想

結果的に、金出してPC買って、修理の名目で検証用PCとして取り上げられ、当初の金だけが返ってきたという感じ。こっちが検証に使った労力、機会損失とかは返ってこない。

修理対応が特別悪かったとは思わない。ウェブチャットなりなんなりで問合せるとしっかり修理に誘導されるし、ある程度状況はシェアされている。定型の修理なら早い (初回のシステムボード交換は早かった)。一方で技術部門と修理部門は繋っていないようなので、未知の不具合は対応する能力がないし、後半不審な行動があった。

注文から何度か出荷延期し2ヶ月して届いてそこから6ヶ月まったく使えず返金になったのは率直に気分が悪い。まず不具合を認めさせること自体にかなり労力かけてるし、勘弁してほしい。

スリープ復帰しないのは割とよく聞く不具合なので、最初のうちに「同様の件は報告されてないのか」としつこく訊いたが「ない」らしい。

ノートPCのメーカーはそもそも選択肢が少ないのに、残念ながらまたひとつ選択肢が減った。なお NEC も Fujitsu もノートPC部門は Lenovo 傘下である。