zoukankan      html  css  js  c++  java
  • 音频录制和播放

    <!--这是一位大佬的代码,我只是转发-->

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8" />
    <title></title>
    </head>
    <body>
    <audio controls id="audioPlay"></audio>
    <button id="btnRecord">开始录制</button>
    <button disabled id="btnPlay">开始播放</button>
    <button disabled id="btnDownload">开始下载</button>
    <script>
    var audioPlay = document.querySelector('audio#audioPlay');
    var btnRecord = document.querySelector('button#btnRecord');
    var btnPlay = document.querySelector('button#btnPlay');
    var btnDownload = document.querySelector('button#btnDownload');

    navigator.mediaDevices.getUserMedia({audio:true})
    .then(gotMediaStream);
    function gotMediaStream(stream){
    window.stream = stream;
    }
    btnRecord.onclick = () => {
    if(btnRecord.textContent === '开始录制'){
    startRecord();
    btnRecord.textContent = '停止录制';
    btnPlay.disabled = true;
    btnDownload.disabled = true;
    }else{
    stopRecord();
    btnRecord.textContent = '开始录制';
    btnPlay.disabled = false;
    btnDownload.disabled = false;
    }
    }
    function startRecord(){
    buffer = [];
    mediaRecorder = new MediaRecorder(window.stream,{audio:true});
    mediaRecorder.ondataavailable = handleDataAvailable;
    mediaRecorder.start(10) //每隔10毫秒存储一块数据
    }
    var buffer;
    function handleDataAvailable(e) {
    buffer.push(e.data);
    }
    function stopRecord() {
    mediaRecorder.stop();
    }

    btnPlay.onclick = () => {
    //使用Blob对象
    var blob = new Blob(buffer, { type: 'audio/ogg' });
    //获取资源
    audioPlay.src = window.URL.createObjectURL(blob);
    //控制标签
    audioPlay.controls = true;
    //开始播放
    audioPlay.play();
    }
    btnDownload.onclick = () => {
    var blob = new Blob(buffer, { type: 'audio/ogg' });
    url = window.URL.createObjectURL(blob);
    var a = document.createElement('a');
    a.href = url;
    a.download = 'juejin.ogg';
    a.click();
    }
    </script>
    </body>
    </html>

  • 相关阅读:
    [大话数据结构]线性表之单链表结构和顺序存储结构
    [大话数据结构]算法
    [C#编程参考]把图像转换为数组的两种实现
    [C#绘图]在半透明矩形上绘制字符串
    [C#绘图]Matrix类
    在C#调用C++的DLL方法(二)生成托管的DLL
    在C#调用C++的DLL方法(一)生成非托管dll
    彻底解决 LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
    修复./mysql/proc
    linux 网络连接数查看方法
  • 原文地址:https://www.cnblogs.com/chenligeng/p/11187457.html
Copyright © 2011-2022 走看看