【发布时间】:2015-08-16 15:47:03
【问题描述】:
我目前正在编辑具有多种效果的 mp3 文件
var mainVerse = document.getElementById('audio1');
var s = source;
source.disconnect(audioCtx.destination);
for (var i in filters1) {
s.connect(filters1[i]);
s = filters1[i];
}
s.connect(audioCtx.destination);
带有过滤器的 mp3 在网络上相应地播放。是否可以使用网络音频 api 或任何写入 mp3 容器 javascript 库的方式创建和下载具有这些新效果的新 mp3 文件?如果不是在网络上解决这个问题的最佳方法是什么?
更新 - 使用 OfflineAudioContext
使用来自https://developer.mozilla.org/en-US/docs/Web/API/OfflineAudioContext/oncomplete的示例代码
我试过这样使用离线节点;
var audioCtx = new AudioContext();
var offlineCtx = new OfflineAudioContext(2,44100*40,44100);
osource = offlineCtx.createBufferSource();
function getData() {
request = new XMLHttpRequest();
request.open('GET', 'Song1.mp3', true);
request.responseType = 'arraybuffer';
request.onload = function() {
var audioData = request.response;
audioCtx.decodeAudioData(audioData, function(buffer) {
myBuffer = buffer;
osource.buffer = myBuffer;
osource.connect(offlineCtx.destination);
osource.start();
//source.loop = true;
offlineCtx.startRendering().then(function(renderedBuffer) {
console.log('Rendering completed successfully');
var audioCtx = new (window.AudioContext || window.webkitAudioContext)();
var song = audioCtx.createBufferSource();
song.buffer = renderedBuffer;
song.connect(audioCtx.destination);
song.start();
rec = new Recorder(song, {
workerPath: 'Recorderjs/recorderWorker.js'
});
rec.exportWAV(function(e){
rec.clear();
Recorder.forceDownload(e, "filename.wav");
});
}).catch(function(err) {
console.log('Rendering failed: ' + err);
// Note: The promise should reject when startRendering is called a second time on an OfflineAudioContext
});
});
}
request.send();
}
// Run getData to start the process off
getData();
仍然让录音机下载一个空文件,我正在使用歌曲源作为录音机的源。歌曲播放和他的代码的一切,但录音机不下载它
【问题讨论】:
-
你在寻找recorder.js github.com/mattdiamond/Recorderjs
-
@RaphaelSerota 你好,我刚刚查看了库,我不知道如何让
forceDownload使用现有的源(而不是使用麦克风录制,即rec.record() , rec.stop()) .我目前正在执行以下rec = new Recorder(s, { workerPath: 'Recorderjs/recorderWorker.js' }); rec.exportWAV(function(e){ Recorder.forceDownload(e, "filename.wav"); });...但是 filename.wav 文件是一个空的 wav 文件...有什么建议吗?
标签: javascript audio web-audio-api