2015-08-16 102 views
0

我目前正在編輯具多重功效我的MP3文件,像這樣網絡音頻API - 下載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播放相應的與它的過濾器在網絡上。是否有可能使用這些新的效果創建和下載一個新的MP3文件,使用網絡音頻API或任何寫入MP3容器JavaScript庫?如果不是最好在網上解決這個問題?

更新 - 使用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(); 

仍然讓錄音機下載一個空文件,我使用歌曲源作爲錄音機的來源。歌曲播放和所有與他的代碼,但錄音機不下載它

+0

您正在尋找recorder.js https://github.com/mattdiamond/Recorderjs –

+0

@RaphaelSerota您好,我只是檢查圖書館,我不知道如何讓'forceDownload'工作一個已經存在的信號源(而不是用麥克風記錄,即'rec.record(),rec.stop()')。我目前正在執行以下操作:rec = new Recorder(s,{{{}}};}};}}; rec.exportWAV(函數(e)中{ \t Recorder.forceDownload(例如, 「FILENAME.WAV」); });'...但FILENAME.WAV文件是一個空的wav文件...任何建議? – Thatdude1

回答

1

使用https://github.com/mattdiamond/Recorderjs錄製.wav文件。然後使用https://github.com/akrennmair/libmp3lame-js將其編碼爲.mp3。

有一個漂亮的蒞臨指導,如果你需要一隻手:http://audior.ec/blog/recording-mp3-using-only-html5-and-javascript-recordmp3-js/

UPDATE

嘗試移動

rec = new Recorder(song, { 
    workerPath: 'Recorderjs/recorderWorker.js' 
}); 

,使其位於呼叫開始渲染以上,並將其連接到osource,如下所示:

rec = new Recorder(osource, { 
     workerPath: 'Recorderjs/recorderWorker.js' 
}); 
osource.connect(offlineCtx.destination); 
osource.start(); 
offlineCtx.startRendering().then(function(renderedBuffer) { 
    ..... 
+0

你好,我剛剛檢查出recorderJS庫,我不知道如何讓'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文件...有什麼建議嗎? – Thatdude1

+0

這是因爲(如果以上是你所做的),Web Audio中的standrad上下文會實時呈現,所以如果你沒有先播放音頻就這樣做,你什麼也沒有。您必須在錄音機上調用.record(),然後播放處理後的音頻以記錄任何內容,然後停止並執行強制下載。或者,看看不能實時呈現的離線上下文(可能是你想要的)https://developer.mozilla.org/zh-CN/docs/Web/API/OfflineAudioContext @ Thatdude1 –

+0

嘿,我已經更新了我嘗試使用脫機環境的問題,但它仍然沒有下載文件..任何建議?謝謝 – Thatdude1