2014-04-15 16 views
3

我的JavaScript的Web應用程序首先讀取一個短mp3文件,並在發現沉默隙(用於導航目的),那麼它起着相同的MP3文件,提示它來啓動,其中一個沉默或其他飾面。這與通常的webAudio場景不同,該場景旨在授予對流中正在播放的音頻數據的訪問權限(而不是整個音軌)。<audio> tag to audioBuffer - 有可能嗎?

爲了讓我的web應用程序的工作我要讀/兩次訪問mp3文件:通過XMLHttpRequest

  1. 閱讀整個MP3文件,並把它放在一個audioBuffer,我可以隨後進行解碼使用audioContext.decodeAudioData() - 正如這裏所解釋的:Extracting audio data every t seconds
  2. 通過指定<audio>標記來允許我播放按需指定的文件,以毫秒爲單位指定提示/起始點。 Playing audio with Javascript?

問:是否有任何當前這樣我可能會首先聲明<audio>標籤然後以某種方式直接從它派生的audioBuffer,而不訴諸XMLHttpRequest

readcreateMediaElementSource但我看不到如何通過使用它得到audioBuffer

回答

3

如果做你的第一個XHR,索要BLOB:

xhr.responseType = 'blob' 

然後得到一個ArrayBuffer出來的:

var arrayBuffer; 
var fileReader = new FileReader(); 
fileReader.onload = function() { 
    arrayBuffer = this.result; 
}; 
fileReader.readAsArrayBuffer(blob); 

,並把那個給decodeAudioData得到AudioBuffer如常。你現在可以做你的處理。

然後,當你處理完成,給BLOB的標籤,作爲源,當你想打它,它就會像往常一樣工作:

audio.src = window.URL.createObjectURL(blob); 

您可能需要前綴網址webkit供應商的前綴,我不記得他們是否實現了前綴版本。無論如何,斑點是要走的路!

+0

謝謝,但我想你錯過了我的問題中的短語,說「不訴諸XMLHttpRequest」 – GavinBrelstaff

+0

這是不可能的,那麼