p5.js多路音频输入实现:如何接入第二路无线麦克风
实现p5.js多路独立麦克风接入的可行方案
- 前置准备:确保项目引入了
p5.sound库,所有测试在localhost或HTTPS环境下运行,浏览器媒体权限正常开启。 - 第一步:枚举所有音频输入设备,区分不同麦克风
首先需要先请求麦克风权限,再通过WebRTC的设备枚举API筛选出所有音频输入设备,获取每个设备的唯一标识deviceId和设备名称,以此区分Mac自带麦克风和无线麦克风:
let audioDevices = []; // 先请求麦克风权限,否则设备名称会返回空 async function getAudioDevices() { // 先申请一次媒体权限 await navigator.mediaDevices.getUserMedia({ audio: true }); // 枚举所有媒体设备 const devices = await navigator.mediaDevices.enumerateDevices(); // 筛选出音频输入设备 audioDevices = devices.filter(device => device.kind === 'audioinput'); // 打印所有设备信息,可在控制台查看自带麦和无线麦的deviceId、名称 audioDevices.forEach((dev, idx) => { console.log(`设备${idx}: ${dev.label}, ID: ${dev.deviceId}`); }); } function preload() { getAudioDevices(); }
- 第二步:分别初始化两路独立音频输入
拿到对应麦克风的deviceId后,给p5.AudioIn传入配置参数指定设备ID,即可分别实例化两路独立的音频输入:
let builtInMic, wirelessMic; function setup() { createCanvas(400, 400); // 假设audioDevices[0]是Mac自带麦克风,audioDevices[1]是无线麦克风,按实际控制台输出调整索引 builtInMic = new p5.AudioIn({ deviceId: audioDevices[0].deviceId }); wirelessMic = new p5.AudioIn({ deviceId: audioDevices[1].deviceId }); // 分别启动两路音频输入 builtInMic.start(); wirelessMic.start(); } function draw() { background(220); // 测试分别获取两路麦克风的音量 let builtInVol = builtInMic.getLevel(); let wirelessVol = wirelessMic.getLevel(); // 用不同矩形高度展示两路音量,验证输入独立 rect(100, height - builtInVol * 300, 50, builtInVol * 300); rect(250, height - wirelessVol * 300, 50, wirelessVol * 300); }
- 设备识别小技巧:Mac自带麦克风的设备名称一般带有
Built-in Microphone标识,无线麦克风名称一般会包含品牌名、Bluetooth/Wireless等关键词,可直接通过label字段匹配筛选,不用硬编码索引。 - 扩展方案:如果需要用户手动选择麦克风,可以把所有设备的名称渲染成下拉选项,用户选中后再用对应
deviceId初始化音频输入即可。
内容的提问来源于stack exchange,提问作者Anna Lena Bulach
相关产品推荐
相关产品推荐

