【发布时间】:2020-02-11 20:56:37
【问题描述】:
我正在尝试记录来自 Howler 的组合 Web-Audio-API 输出(以编程方式组合的一堆声音和音频精灵)。
到目前为止,我已尝试将 Howler.masterGain 上下文连接到 createMediaStreamDestination 节点,但 MediaRecorder.ondataavailable 事件仅触发一次且没有数据。
这里有一个连接版本的示例:https://jsfiddle.net/chadananda/kvzrsx5t/86/
const audioURL = 'https://cdn.glitch.com/02dcea11-9bd2-4462-ac38-eeb6a5ad9530%2F331_full_beautiful-minds_0171_preview.mp3?1522829295082'
// connect MediaStreamDestination to Howler.masterGain
Howler.mute(false) // to initialize Howler internals
let mediaDest = Howler.ctx.createMediaStreamDestination()
// first disconnect
Howler.masterGain.disconnect()
// then reconnect to our new destination?
Howler.masterGain.connect(mediaDest)
// set up media recorder to record output
let audioChunks = []
let mediaRecorder = new MediaRecorder(mediaDest.stream, {mimeType: 'audio/webm'})
mediaRecorder.onstart = (event) => { console.log('Started recording Howl output...') }
mediaRecorder.ondataavailable = (e) => { if (e.data.size) audioChunks.push(e.data) }
mediaRecorder.onstop = (event) => {
console.log('Completed Recording', audioChunks) // why is this returning empty?
// let buffer = new Blob(chunks)
// let audioPlayer = document.createElement("AUDIO")
// audioPlayer.src = window.URL.createObjectURL(buffer)
// audioPlayer.play()
}
// example of recording one sound looping for 3 seconds
let sound = new Howl({ html5: false, src: audioURL })
// start sound and recording
sound.play(); mediaRecorder.start()
// stop in a few seconds
setTimeout( ()=>{ mediaRecorder.stop(); sound.stop() }, 5000)
【问题讨论】:
标签: web-audio-api howler.js web-mediarecorder