html - 每次播放时处理重复声音的 Html5 音频
问题描述
我正在播放一个 html5 音频文件,该文件具有确定音量的处理算法。第一次玩感觉还不错。第二次播放时,它听起来像是添加了一个同时播放的重复声音。什么被复制?
<audio id="audio1" controls preload="auto" src="test.mp3"></audio>
var context1 = new AudioContext();
audio1.addEventListener('playing',function() {
var source = context1.createMediaElementSource(audio1);
var processor = context1.createScriptProcessor(2048,1,1);
processor.onaudioprocess = process;
source.connect(processor);
processor.connect(context1.destination);
});
function process(e) {
var buffer = e.inputBuffer.getChannelData(0);
var out = e.outputBuffer.getChannelData(0);
var amp = 0;
// Iterate through buffer to get max amplitude
for (var i = 0; i < buffer.length; i++) {
var loud = Math.abs(buffer[i]);
if(loud > amp) {
amp = loud;
}
// write input samples to output unchanged
out[i] = buffer[i];
}
解决方案
原来我需要断开这个过程。该过程仍在第二次运行。
<audio id="audio1" controls preload="auto" src="test.mp3"></audio>
var context1 = new AudioContext();
source1 = context1.createMediaElementSource(audio1);
processor1 = context1.createScriptProcessor(2048,1,1);
audio1.addEventListener('playing',function() {
processor1.onaudioprocess = processAudio1;
source1.connect(processor1);
processor1.connect(context1.destination);
});
audio1.addEventListener('ended', (event) => {
source1.disconnect(processor1);
processor1.disconnect(context1.destination);
});
推荐阅读
- html - 通过下载在移动设备上查看 PDF
- flutter - 更改 Flutter 的 FlatButton onPressed 的颜色
- android - BottomAppBar 4 图标未正确对齐
- python - 无法在 tkinter 中显示图像
- python - 终止条件为 `left < right` 时的二分查找,步更新为 `left = mid +1, right = mid`
- java - 如何将随机生成的测试数据从一个测试步骤传递到另一个测试步骤
- linux - Centos apache 网络服务器抛出 403 错误
- scala - Scala - 函数映射是模式匹配或交互
- macos - 启用运行时强化后未加载库
- python - pandas lambda 函数返回 df 和 series,为什么?