2013-10-09 435 views
0

我希望能夠將音頻輸入錄製到緩衝區中,並使用標準的<audio>標籤等控件進行播放。是否可以控制播放(暫停,播放,跳過,擦洗等)?控制播放Web Audio API緩衝區

例如,在Chris Wilson的項目中:http://webaudiodemos.appspot.com/AudioRecorder/index.html,他記錄麥克風輸入,並允許它作爲WAV下載。在錄製之後,我不想下載,而是希望能夠使用標準音頻控制來播放它。我不確定緩衝區是否意味着以這種方式使用。

如果這是不可能的,我需要首先將該緩衝區轉換爲音頻文件(ogg/mp3/wav)嗎?爲了提供更多的上下文,想象創建的應用程序就像帶有音頻輸入的GarageBand類型程序,可以在錄製它之後播放和編輯。

我的問題好像只是我不發送任何數據到服務器,它關係到this one,和我正在通過audioRecorder.getBuffers()我的音頻輸入這是在RecorderJS Project.

回答

1

如此定義,你有兩個選擇 - 1)你可以把你可以從RecordJS獲得的(合併!)AudioBuffer直接播放回去。這是最高效的;你不會將它編碼爲WAV,然後再次解碼。缺點是直接播放音頻緩衝區意味着你必須自己實現播放器控制 - 很容易實現暫停,播放,跳過,擦洗等,但你必須這樣做。 (「擦洗」是相當困難的,但其餘的都很簡單,請注意,您在AudioBufferSourceNode中並沒有真正的「暫停」 - 您需要停止()BufferSource節點,記住您的位置,然後創建一個新的BufferSource節點和開始()當運輸不停頓。)嗯,這聽起來像一個很好的副項目作爲一個例子 - 不幸的是,我的堆是目前相當高。

2)您可以代替「下載」,只需將blob URL作爲元素的SRC使用,即可爲您播放。這樣會容易得多,但是你沒有精細的控制 - 而且你至少有一次在這裏複製緩衝區。

對於像GarageBand這樣的類似DAW的項目,我會強烈推薦#1,因爲無論如何您都會想要自定義傳輸控件(因爲您想要播放多個音軌同步等)。花點時間實施,但效率更高,更接近你想要做的事情。

+0

謝謝cwilso!一直在看很多你的東西,這是非常有益的。我已經實現了#2,它似乎是最簡單的方法來做到這一點,但一個#1的庫可能是最有意義的。我正在查看mozilla(developer.mozilla.org/en-US/docs/Web/API/AudioBufferSourceNode)作爲文檔 - 我將如何跟蹤回放的位置(實現暫停然後播放)。另外,我計劃提供更長的內容(比如最多10分鐘) - 這是否會改變任何內容? – eipark

+0

我掀起了這個小圖書館:https://github.com/eipark/buffaudio。我對網絡音頻規範和JavaScript非常陌生,所以如果您有機會,我很樂意爲您分解它! – eipark

+0

更長的表單內容可能是一個問題; 10分鐘就像一個200MB的audiobuffer。你的圖書館看起來相當穩固我可能會建議讓它連接的節點可配置(而不是總是連接到目的地) - 然後你可以讓人們實現他們自己的setVolume,例如 – cwilso

相關問題