2012-05-23 250 views
9

是否可以使用html5錄製聲音?我已下載了最新的金絲雀版本的Chrome,並使用以下代碼:錄製html5音頻

navigator.getUserMedia = navigator.webkitGetUserMedia || navigator.getUserMedia; navigator.getUserMedia({audio:true},gotAudio,noStream);

然後,這會提示用戶允許錄音,如果您說「是」,則會顯示一條消息,提示該Chrome正在錄音。但是,是否可以使用其中的原始數據訪問音頻緩衝區?我似乎無法找出如何。有人建議的規範尚未實現,但有誰知道它現在是否可以在任何瀏覽器上完成,並提供說明?

+0

這在先前的問題進行了討論。 http://stackoverflow.com/questions/4227313/audio-capturing-with-html5 – AurA

+0

是的,但自從上一個問題已經過時以來,新的信息已經可用。 –

回答

2

在這裏你可以找到我的例子,但它不工作(部分)。由於AUDIO錄製尚未實現到Chrome。這就是爲什麼你會得到一個404錯誤,這是說找不到BLOB。

此外還有一個表格是因爲我的目標是發送BLOB到一個PHP文件,但由於不工作,我不能嘗試。保存它,你可以稍後使用。

<audio></audio> 
<input onclick="startRecording()" type="button" value="start recording" /> 
<input onclick="stopRecording()" type="button" value="stop recording and play" /> 
<div></div> 
<!-- 
<form enctype="multipart/form-data"> 
<input name="file" type="file" /> 
<input type="button" value="Upload" /> 
</form> 
--> 

<script> 
    var onFailed = function(e) { 
    console.log('sorry :(', e); 
    }; 

window.URL = window.URL || window.webkitURL; 
navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || 
          navigator.mozGetUserMedia || navigator.msGetUserMedia || 
var localStream 

var audio = document.querySelector('audio'); 
var stop = document.getElementById('stop'); 


    function startRecording(){ 
     if (navigator.getUserMedia) { 
      navigator.getUserMedia({audio: true, video: false, toString : function() {return "video,audio";}}, function(stream) { 
      audio.src = window.URL.createObjectURL(stream); 
     document.getElementsByTagName('div')[0].innerHTML = audio.src; 
      localStream = stream; 
      }, onFailed); 
     } else { 
      alert('Unsupported'); 
      //audio.src = 'someaudio.ogg'; // fallback. 
     } 
    } 



    function stopRecording(){ 
     localStream.stop(); 
     audio.play(); 
    } 


    function sendAudio(){ 

    } 
</script> 

注:一些信息和HOWTO針對Firefox:https://hacks.mozilla.org/2012/07/getusermedia-is-ready-to-roll/

+0

仍然不可能? – Thomas

+0

根據問題列表:http://code.google.com/p/chromium/issues/detail?id=113676它不是 但您可能想要檢查此:https://github.com/thomasboyt/web -audio-recording-demo 我剛纔看到,沒有試過。 – siniradam

3

Webkit和Chrome音頻API的支持記錄,但是隨着API的發展,維護使用它們的代碼將會很困難。

一個名爲Sink.js的活動開源項目允許錄製並且還允許您推送原始示例:https://github.com/jussi-kalliokoski/sink.js/。由於該項目非常活躍,因此它們能夠在Webkit和Chrome出現時保持最新的變化。

0

現在可以使用音頻上下文API和getChannelData()來訪問音頻緩衝。

這裏是在GitHub上的一個項目,直接記錄音頻MP3格式並保存在Web服務器上:https://github.com/nusofthq/Recordmp3js

在recorder.js您將看到如何音頻緩衝是由渠道單獨訪問,像這樣:

this.node.onaudioprocess = function(e){ 
     if (!recording) return; 
     worker.postMessage({ 
     command: 'record', 
     buffer: [ 
      e.inputBuffer.getChannelData(0), 
      //e.inputBuffer.getChannelData(1) 
     ] 
     }); 
    } 

因爲你可以閱讀下面的博文的執行情況進行更詳細的解釋: http://nusofthq.com/blog/recording-mp3-using-only-html5-and-javascript-recordmp3-js/