我使用Web Audio API录制音频源节点流。我的代码如下所示:
var context,
bufferLoader,
destination,
mediaRecorder,
source,
bufferList,
chunks = [],
sound_paths = [],
audioRecordings = [];
//fill in sound paths
sound_paths = ['sound.mp3', 'sound2.mp3'];
bufferLoader = new BufferLoader(
context,
sound_paths,
callback
);
//fill bufferList with bufferdata
bufferLoader.load();
destination = context.CreateMediaStreamDestination();
mediaRecorder = new MediaRecorder(destination);
mediaRecorder.ondataavailable = function(e){
chunks.push(e.data);
}
mediaRecorder.onstop = function (e) {
var blob = new Blob(chunks, {'type': 'audio/ogg; codecs=opus'});
var audio = document.createElement('audio');
audio.src = URL.createObjectURL(blob);
audioRecordings.push(audio);
chunks = [];
};
function startRecording(){
mediaRecorder.start();
source = Recorder.context.createBufferSource();
source.buffer = bufferList[0];
source.connect(Recorder.destination);
}
function stopRecording(){
mediaRecorder.stop();
}
//call startRecording(), then source.start(0) on user input
//call stopRecording(), then source.stop(0) on user input
我使用的是此处定义的BufferLoader:http://middleearmedia.com/web-audio-api-bufferloader/
这在很大程度上起作用,但有时我在创建Blob并从中创建URL时会得到416(请求的范围不满足)。当网页开始滞后时,这似乎更常发生。我猜这是因为创建URL时Blob是未定义的,或类似的东西。是否有更安全的方式来处理媒体记录器的onstop事件?也许最好使用srcObjet和MediaStream而不是Blob?
答案 0 :(得分:0)
对于我的网站http://gtube.de(只是一个没有广告的例子)我使用的是recorder.js => https://github.com/mattdiamond/Recorderjs。它非常好用。也许你应该尝试记录上下文。
如果你在带有网络音频api的缓冲区中加载mp3.s并且同时播放它们将会非常有效。 => https://www.html5rocks.com/en/tutorials/webaudio/intro/ 但那已经是你做的方式=>上面的示例中缺少代码,因此我必须阅读文章=>也许下次你试着做一个简短的例子。
抱歉,我对mediaStream API =>的了解不够。我想它已经坏了;-) 如果网络音频中的某些内容无法正常工作,请尝试其他方式。它仍然不是很稳定=>特别是Mozilla人非常支持它。