Html 从<;音频>;标签?

Html 从<;音频>;标签?,html,audio,web-audio-api,audiocontext,Html,Audio,Web Audio Api,Audiocontext,在我的示例中,我有一个用户上传到网页的mp3。我在页面上创建了一个可视波形,并对所有默认控件进行了编码和工作(播放、暂停、停止、擦洗等) 我试图实现的是在后效或动画中听到的擦洗效果。当我擦洗音频时,我想在擦洗器所在的确切位置听到音频的音调 我甚至不知道从哪里开始?我查看了AudioContext,我想我的答案就在那里,但我不确定。我曾考虑过使用一个“影子音频标签”,我将同一个src设置为,然后调用play(),并很快暂停,但这看起来像是一团糟;特别是用一个有攻击性的洗涤器。任何方向都将不胜感激

在我的示例中,我有一个用户上传到网页的mp3。我在页面上创建了一个可视波形,并对所有默认控件进行了编码和工作(播放、暂停、停止、擦洗等)

我试图实现的是在后效或动画中听到的擦洗效果。当我擦洗音频时,我想在擦洗器所在的确切位置听到音频的音调


我甚至不知道从哪里开始?我查看了
AudioContext
,我想我的答案就在那里,但我不确定。我曾考虑过使用一个“影子音频标签”,我将同一个src设置为,然后调用
play()
,并很快暂停,但这看起来像是一团糟;特别是用一个有攻击性的洗涤器。任何方向都将不胜感激

我认为你的思路是对的。您的洗涤器UI可以与未连接到DOM/页面的
音频
元素交互,该元素可以直接设置、播放几毫秒,然后停止。您可以利用取消
setTimeout()
队列来创建简短的清理回放,然后在清理停止时继续播放。我假设这一切都取决于下载的完整文件,以避免清理过程中的网络延迟。

是的,您的答案在AudioContext API中(并非所有异步和慢速媒体元素都适用于此)。具体来说,您需要的是界面,它能够立即播放音频

您需要做的就是以ArrayBuffer的形式获取音频文件,请求AudioContext从该缓冲区创建一个AudioBuffer

这是一个沉重的部分,但它只做了一次

然后,您只需要为每个“擦洗”事件创建一个非常轻的AudioBufferSourceNode。
为此,可以使用其方法的三参数版本

const slider=document.getElementById('slider');
const ctx=新的AudioContext();
取回(“https://upload.wikimedia.org/wikipedia/en/d/dc/Strawberry_Fields_Forever_(披头士乐队歌曲样本)
.then(resp=>resp.arrayBuffer())
.然后(buf=>ctx.decodeAudioData(buf))
.然后(准备)
.catch(console.error);
功能准备(audioBuf){
让源;
slider.oninput=e=>{
if(source){source.stop(0);}
source=ctx.createBufferSource();
source.buffer=audioBuf;
source.connect(ctx.destination);
常量偏移=slider.value*audioBuf.duration;
常数持续时间=0.1;
source.start(0,偏移量,持续时间);
};
slider.disabled=false;
}
input{width:350px}

哇……我永远也想不到这一点。非常感谢!我不得不为我的场景稍微调整一下,但它完全起作用,完成了我所需要的。✋