如何合并两个音频文件 - JavaScript?
How I can merge two audio files - JavaScript?
我有两个来自 RecordRTC
本地和远程流的音频文件。现在我想把两个文件合并成一个文件,通过AJAX.
上传到服务器
e.g. (audio1.webm) and (audio2.webm).
mediaRecorder.stopRecording(function() {
var blob = mediaRecorder.getBlob();
var fileName = getFileName('webm');
var fileObject = new File([blob], fileName, {
type: 'audio/webm'
});
var formData = new FormData();
formData.append('blob', fileObject);
formData.append('filename', fileObject.name);
$.ajax({
url: '{{ url('/') }}/save-audio',
data: formData,
cache: false,
contentType: false,
processData: false,
type: 'POST',
success: function(response) {
console.log(response);
}
});
});
提前致谢。
更新:
我是这样做的而不是recorder.addStreams
,我仍然可以得到记录。
var remoteVideos = $('#remoteVideos video');
var el = [];
$.each($('#remoteVideos video'), function(index, val) {
el[index] = val.srcObject;
});
el.push(stream);
multiMediaRecorder = new MultiStreamRecorder(el);
您可以使用类似的库:MediaStreamRecorder。然后使用 MultiStreamRecorder 并传递两个流,如下所示,
recorder = new MultiStreamRecorder([localStream, remoteStream]);
您将从 getUserMedia 获取 localStream 并从 onaddstream 事件侦听器获取 remoteStream。
您可能只想传递数组中的音轨。其余的事情就是这样。不需要 FFmpeg 和文件合并。
我现在通过这样做得到它,如下所示;
function onMediaSuccess(localStream) {
var remoteVideos = $('#remoteVideos video')[0];
multiMediaRecorder = new MultiStreamRecorder([localStream, remoteVideos.srcObject]);
multiMediaRecorder.ondataavailable = function (blob) {
// POST/PUT "Blob" using FormData/XHR2
var blobURL = URL.createObjectURL(blob);
console.log(blobURL);
};
multiMediaRecorder.start();
}
但现在还有一个问题,ondataavailable
被调用了两次但是第一个视频可以播放并且工作正常,而第二个视频可以播放但是(不到一秒) 我认为它可能已损坏。
干杯!
我有两个来自 RecordRTC
本地和远程流的音频文件。现在我想把两个文件合并成一个文件,通过AJAX.
e.g. (audio1.webm) and (audio2.webm).
mediaRecorder.stopRecording(function() {
var blob = mediaRecorder.getBlob();
var fileName = getFileName('webm');
var fileObject = new File([blob], fileName, {
type: 'audio/webm'
});
var formData = new FormData();
formData.append('blob', fileObject);
formData.append('filename', fileObject.name);
$.ajax({
url: '{{ url('/') }}/save-audio',
data: formData,
cache: false,
contentType: false,
processData: false,
type: 'POST',
success: function(response) {
console.log(response);
}
});
});
提前致谢。
更新:
我是这样做的而不是recorder.addStreams
,我仍然可以得到记录。
var remoteVideos = $('#remoteVideos video');
var el = [];
$.each($('#remoteVideos video'), function(index, val) {
el[index] = val.srcObject;
});
el.push(stream);
multiMediaRecorder = new MultiStreamRecorder(el);
您可以使用类似的库:MediaStreamRecorder。然后使用 MultiStreamRecorder 并传递两个流,如下所示,
recorder = new MultiStreamRecorder([localStream, remoteStream]);
您将从 getUserMedia 获取 localStream 并从 onaddstream 事件侦听器获取 remoteStream。
您可能只想传递数组中的音轨。其余的事情就是这样。不需要 FFmpeg 和文件合并。
我现在通过这样做得到它,如下所示;
function onMediaSuccess(localStream) {
var remoteVideos = $('#remoteVideos video')[0];
multiMediaRecorder = new MultiStreamRecorder([localStream, remoteVideos.srcObject]);
multiMediaRecorder.ondataavailable = function (blob) {
// POST/PUT "Blob" using FormData/XHR2
var blobURL = URL.createObjectURL(blob);
console.log(blobURL);
};
multiMediaRecorder.start();
}
但现在还有一个问题,ondataavailable
被调用了两次但是第一个视频可以播放并且工作正常,而第二个视频可以播放但是(不到一秒) 我认为它可能已损坏。
干杯!