javascript - Göra AudioBufferSourceNode till ljudkällan för en <audio>-tagg?
En riktning av denna utväxling är möjlig - jag vet att du kan använda källan till ett <audio>-element som ett sätt att få ljud för användning med Web Audio API via createElementSourceNode(). Är det möjligt att göra det motsatta, där en AudioBufferSourceNode används som källan för ett <audio>-element?
Jag är ganska säker på att detta är omöjligt, men jag har letat igenom npm efter standardutseende, enkla återgivningar av webbläsarens standardkontroller för ljuduppspelning avsedda att användas med AudioBuffers och jag hittar ingenting.
Svar #1
Du kan koppla din AudioBufferSourceNode till en MediaStreamDestination-nod och sedan mata in ett HTMLAudioElement srcObject med .stream-egenskapen hos denna nod:
start.onclick = e => {
const audioCtx = new AudioContext();
fetch("https://dl.dropboxusercontent.com/s/1cdwpm3gca9mlo0/kick.mp3")
.then(resp => resp.arrayBuffer())
.then(buf => audioCtx.decodeAudioData(buf))
.then(audioBuffer => {
const source = audioCtx.createBufferSource();
source.buffer = audioBuffer;
source.playbackRate.value = 0.1;
source.loop = true;
source.start(0);
const streamNode = audioCtx.createMediaStreamDestination();
source.connect(streamNode);
const audioElem = new Audio();
audioElem.controls = true;
document.body.appendChild(audioElem);
audioElem.srcObject = streamNode.stream;
})
.catch(console.error);
}<button id="start">start</button>