如何在P5.js中使用P5 Amplitude时静音指定音频输入
解决方法
完全可行,你只需要通过设置音频音量为0来让目标轨道静音,同时保持播放状态以获取振幅数据,具体修改如下:
核心修改点
- 在播放kick、hats_1、tb303这三个音频前,调用
setVolume(0)将它们的音量设为0,这样它们不会输出声音,但仍能正常播放并被p5.Amplitude捕获振幅。 - 修正代码里的笔误:原本
hats_1_amp.smooth(smoothing)被错误写成了kick_amp.smooth(smoothing),需要更正。
修改后的完整代码
let kick, kick_amp; let hats_1, hats_1_amp; let tb303, tb303_amp; let full_track, full_track_amp; let smoothing = 0.4; function preload() { kick = loadSound('kick.mp3'); hats_1 = loadSound('Hats 1.mp3'); tb303 = loadSound('303.mp3'); full_track = loadSound('full track clip.mp3'); } function setup() { createCanvas(600, 600) // 设置kick音量为0后播放 kick.setVolume(0); kick.play(); kick_amp = new p5.Amplitude(); kick_amp.setInput(kick); kick_amp.smooth(smoothing); // 设置hats_1音量为0后播放,修正smooth方法调用对象 hats_1.setVolume(0); hats_1.play(); hats_1_amp = new p5.Amplitude(); hats_1_amp.setInput(hats_1); hats_1_amp.smooth(smoothing); // 设置tb303音量为0后播放 tb303.setVolume(0); tb303.play(); tb303_amp = new p5.Amplitude(); tb303_amp.setInput(tb303); tb303_amp.smooth(smoothing); full_track.play(); full_track_amp = new p5.Amplitude(); full_track_amp.setInput(full_track); full_track_amp.smooth(smoothing); } function draw() { background(0); let kick_vol = kick_amp.getLevel(); ellipse( width*0.25,height/2, kick_vol*100, kick_vol*100); let hats_1_vol = hats_1_amp.getLevel(); ellipse(width*0.75, height/2, hats_1_vol*100, hats_1_vol*100); let tb303_vol = tb303_amp.getLevel(); ellipse(width*0.5, height*0.25, tb303_vol*100, tb303_vol*100); } // Click on the web page to start audio function touchStarted() { getAudioContext().resume(); }
补充说明
setVolume(0)仅会关闭音频的输出音量,不会影响播放进度或振幅数据的采集。- 建议确保所有音频文件同步播放,否则可视化效果会和完整轨道不同步,可通过
play()方法的时间参数来对齐播放时机。
内容的提问来源于stack exchange,提问作者Joe_w
相关产品推荐
相关产品推荐

