【问题标题】:Recording html5 audio录制html5音频
【发布时间】:2012-05-29 21:32:21
【问题描述】:

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

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

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

【问题讨论】:

标签: javascript html5-audio


【解决方案1】:

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

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

【讨论】:

    【解决方案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/

    【讨论】:

    【解决方案3】:

    现在可以使用音频上下文 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/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-01
      • 2013-08-23
      • 2014-11-02
      • 1970-01-01
      • 1970-01-01
      • 2014-04-01
      • 1970-01-01
      相关资源
      最近更新 更多