2012-05-23 55 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/