代码之家  ›  专栏  ›  技术社区  ›  MysteryPancake

Javascript:麦克风音频下载链接?

  •  1
  • MysteryPancake  · 技术社区  · 6 年前

    我正在尝试从麦克风录制音频,然后为其添加下载链接。

    这是我当前的代码:

    <!DOCTYPE html>
    <html>
        <head>
            <title>Weird Problem</title>
            <script>
            function microphone() {
                if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {
                    navigator.mediaDevices.getUserMedia({ audio: true, video: false }).then(function(stream) {
                        var recorder = new MediaRecorder(stream);
                        var chunks = [];
                        recorder.ondataavailable = function(e) {
                            chunks.push(e.data);
                        }
                        recorder.onstop = function() {
                            stream.getTracks()[0].stop();
                            var blob = new Blob(chunks, { type: "audio/ogg; codecs=opus" });
                            var url = window.URL.createObjectURL(blob);
                            document.getElementById("player").src = url;
                            document.getElementById("upload").href = url;
                            document.getElementById("upload").download = "test.ogg";
                        }
                        recorder.start();
                        setTimeout(function() {
                            recorder.stop();
                        }, 5000);
                    }).catch(function(error) {
                        console.log(error);
                    });
                }
            }
            </script>
        </head>
        <body>
            <input type="button" value="Record Microphone" onclick="microphone();">
            <br>
            <audio controls id="player"></audio>
            <br>
            <a id="upload">Download Microphone Recording</a>
        </body>
    </html>
    

    我使用的是Chrome,对我来说,它可以正确播放麦克风音频,但当我尝试下载它时,文件无法播放,甚至无法打开。

    我得到了各种错误,文件包含未知格式的数据,因此我认为这与音频标题有关。

    任何帮助都将不胜感激!

    1 回复  |  直到 6 年前
        1
  •  0
  •   MysteryPancake    6 年前

    事实证明,这个问题比我想象的要复杂一些。

    我现在正在改编 Recorder.js

    The online demo does exactly what I need