Closed6
m1 mac で audio loopback して、macで再生中の音をブラウザで使用する

m1 mac で再生されている音をステレオミキサーのようにしてブラウザに読み込ませたい。
モチベとしては、p5jsで使えるようにしてサウンドビジュアライザーを作りたい。

BlackHole: Virtual Audio Driver を使う

設定手順(記憶で書き起こし)
install
brew install blackhole-2ch
設定
https://github.com/ExistentialAudio/BlackHole#record-system-audio の手順通り
完了状態
補足
- LGULTRAGEAR: 普通に音を聞くためのデバイス
(事情がありモニターのサウンドポートを使っている) - BlackHole: 今回追加する仮想デバイス
手順
- Use Spotlight
command+space
and typeAudio Midi Setup
- 左下の
+
を押して複数出力装置を作成
- 音を聞きたいデバイスとblackholeの「使用」のチェックボックスにチェックを入れる
- チェックを付け外しすると順番が変わるので、音を聞きたい方を上、blackholeを下にする
- blackholeは音ずれ補正のチェックも入れる
- マスター装置を音を聞きたいデバイスにする
- 「複数出力装置」を右クリックして
このサウンド出力装置を使用

動作確認
サウンドの出力デバイスに「複数出力装置」を指定
ブラウザでデバイスを取得してみる
navigator.mediaDevices.enumerateDevices().then(devices => console.log(devices))
結果
先にマイクの使用許可を取らないと実際のデバイスが取得できない
先に使用許可を取る
navigator.mediaDevices.getUserMedia({ audio: true })
BlackHoleのデバイスが取得できている!

p5jsでblackholeを使う
let audioIn;
function setup() {
let cnv = createCanvas(200, 200);
cnv.mousePressed(initAudioIn);
}
function draw() {
background(200);
if (!!audioIn && !!audioIn.currentSource) {
text(audioIn.getLevel(), width / 2, height / 2);
}
}
function initAudioIn() {
audioIn = new p5.AudioIn();
audioIn.getSources((devices) => {
const blackhole = devices.findIndex((d) => {
return d["label"] == "BlackHole 2ch (Virtual)";
});
audioIn.setSource(blackhole);
audioIn.start();
});
}
動くサンプル
メモ
-
setup()
でinitAudioIn()
を呼ぶとうまく取得できなかった。 -
mousePressed()
をトリガーにすることで動作するようになった。 - Sourceを明示的に指定しないとmacbookのマイクが優先されてしまったりした。

追記: p5.sound で使う音声デバイスを選択できるようにするボタンを作成するための、ちょっとしたライブラリを自作しました
↓ Example
このスクラップは2021/09/12にクローズされました