9

是否可以用 html5 录制声音?我已经下载了最新的金丝雀版本的 chrome 并使用以下代码:

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

然后,这会提示用户允许录音,如果您说“是”,则会出现一条消息,说明 chrome 正在录音。但是,是否可以使用其中的原始数据访问音频缓冲区?我似乎无法找出方法。有一些尚未实施的建议规范有没有人知道它现在是否可以在任何浏览器上完成,并提供说明?

4

3 回答 3

3

Webkit 和 Chrome 音频 API 支持录音,但是随着 API 的发展,维护使用它们的代码将变得很困难。

一个名为 Sink.js 的活跃开源项目允许录制并允许您推送原始样本:https ://github.com/jussi-kalliokoski/sink.js/ 。由于该项目非常活跃,因此他们能够随时掌握 Webkit 和 Chrome 的变化。

于 2012-08-15T18:34:25.270 回答
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>

注意:Firefox 的一些信息和操作方法:https ://hacks.mozilla.org/2012/07/getusermedia-is-ready-to-roll/

于 2012-09-27T09:30:16.537 回答
0

现在可以使用音频上下文 API 和 getChannelData() 访问音频缓冲区。

这是 gitHub 上的一个项目,它直接以 MP3 格式录制音频并将其保存在网络服务器上: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/

于 2014-03-27T09:35:19.723 回答