2013-06-21 120 views
5

我的工作是解密(使用openpgp.js)和解碼使用網絡音頻API服務器端的音頻文件,一個小項目的播放 使用原始音頻

我有因爲它被接收到的原始音頻我不能簡單的用類似audio.src = ...與音頻元素解碼真實與createBufferSource

function playSound(decodedAudio) { 
    var source = context.createBufferSource(); 
    source.buffer = decodedAudio; 
    source.connect(context.destination); 
    source.start(0); 
} 

緩衝一個AudioContext對象。或者,也許我忽略了明顯的東西?
有沒有一種方法能有這個解碼的網絡音頻API內的音頻與目標<audio>元素很好地發揮?

理想的流動會看起來像...
1)用戶點擊以接合音頻剪輯
2)所述的音頻被解密服務器側和發送到客戶機中作爲原始音頻
的重放3)音頻解碼和播放,可搜尋...等。由於音頻文件可以從1分鐘到60分鐘不等的任何地方使用文件系統API編寫的音頻文件,然後使用<audio>元素的實際 -

,我很樂意思考
可能的解決方案播放
- 編寫我自己的控制系統,用於在Web Audio API上暫停,清理和播放音量。

回答

2

不錯的問題!最簡單的解決方案是將解碼的內容存儲在Blob中。

這將允許您設置src屬性。

var blob = new Blob(decodedData, {type: "correct-mimetype/here"}); 
var url = URL.createObjectURL(blob); 
audio.src = url; 
+0

爲每個數據包或整個剪輯創建一個blob會更高效嗎? – bobbybee

+0

這取決於目標,或如何將數據從客戶端發送(什麼協議?HTTP?WS?的WebRTC?這取決於什麼OP真正想要的變化,如果部分數據有所幫助。 –

+1

也許WebSockets的(這是所有理論,我只是想這樣做在VoIP打字的事情,但我有一種感覺,斑點具有較大的開銷......) – bobbybee