You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 20:45:01