首页 > 其他分享 >web端audiocontext进行音频采集和播放

web端audiocontext进行音频采集和播放

时间:2023-04-14 19:11:21浏览次数:48  
标签:function web 播放 音频 alert window audiocontext mediaStream

1 学习网站

https://developer.mozilla.org/zh-CN/docs/Web/API/Navigator/getUserMedia

https://developer.mozilla.org/zh-CN/docs/Web/API/AudioContext

2准备工作

下载小而美H5编辑器,Hbulider.用于代码编辑和运行测试;

下载瑞昱高清晰音频管理器,用于保证麦克风扬声器可调式可用;

3 代码

 

 

 一下代码是麦克风采集直接回环播放的

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>web音频采集播放audio-context</title>
    </head>
    <body>
        <button onclick="startRecord()">start麦克风采集</button>
        <button onclick="stopRecoed()">stop麦克风采集</button>
        <button onclick="startPlay()">startplayAudioFile</button>
        <button onclick="stopPlay()">stopplayAudio</button>
    </body>
    
    <script>
        function startRecord()
        {
            //窗口约束
            var constrains1 = window.constrains={
                
                /*请求的音频和视频参数,用于说明请求的媒体类型。
                必须至少一个类型或者两个同时可以被指定。
                如果浏览器无法找到指定的媒体类型或者无法满足相对应的参数要求,
                那么返回的 Promise 对象就会处于 rejected[失败]状态,
                NotFoundError作为 rejected[失败]回调的参数*/
                
                audio: {
                    sampleRate: 44100, // 采样率
                    channelCount: 2,   // 声道
                    volume: 2.0        ,// 音量 
                    },
                video:false
            }
            //会提示用户给予使用媒体输入的许可,媒体输入会产生一个MediaStream,里面包含了请求的媒体类型的轨道
            navigator.mediaDevices.getUserMedia(constrains1).
            then(function(mediaStream){
                //1 MediaStream 接口是一个媒体内容的流。一个流包含几个轨道,比如视频和音频轨道。
                Window.mediaStream =mediaStream;
                console.log(mediaStream);
                
                //2 创建音频上下文,AudioContext接口表示由链接在一起的音频模块构建的音频处理图
                var AudioContext = window.AudioContext || window.webkitAudioContext;
                var audioCtx = new AudioContext();
                
                //3 创建音频媒体源节点
                /*createMediaStreamSource() 方法用于创建一个新的 MediaStreamAudioSourceNode 对象,
                需要传入一个媒体流对象 (MediaStream 对象)
                (可以从 navigator.getUserMedia 获得 MediaStream 对象实例),
                 然后来自 MediaStream 的音频就可以被播放和操作*/
                var audioMediaSourceNode =  audioCtx.createMediaStreamSource(mediaStream);
                window.mediaSOurceNode = audioMediaSourceNode;//记录临时变量(Window 对象是全局对象)
                //4 创建滤波器,返回一个滤波器节点
                /*滤波器种类很多,如gainNode,convolver等,详见audiocontext文档*/
                //var FilterOneNode = audioCtx.createBiquadFilter();
                //FilterOneNode.type = "lowshelf";//low shelf滤波器就是高频部分直通,低频部分可调
                //FilterOneNode.frequency.value = 100;
            
                
                //5 节点连接;起点连接到终点,采集的数据会直接播放输出;
                audioMediaSourceNode.connect(audioCtx.destination);
                
                
            }).catch(function(err){
                console.error(err);
                //注意这里,如果你是使用IDE开发的,可能不会弹出是否允许麦克风使用权限的弹框,导致报错;
                //请直接到浏览器测试
                alert("获取输入媒体许可失败",err);
            });
            alert("启动CAP成功");
        }
        
        function stopRecoed()
        {
            window.mediaSOurceNode.disconnect();
            if (window.mediaStream == null || window.mediaStream.getAudioTracks() == null || window.mediaStream.getAudioTracks().length == 0) {
                alert("媒体源或者轨道为空")
                return;}
               
            window.mediaStream.getAudioTracks()[0].stop();
            alert("停止CAP成功")
        }
        function startPlay()
        {
            alert("启动播放成功")
        }
        function stopPlay()
        {
            alert("停止播放成功")
        }
    </script>
</html>

 

标签:function,web,播放,音频,alert,window,audiocontext,mediaStream
From: https://www.cnblogs.com/8335IT/p/17319284.html

相关文章

  • javaweb实验二
    实验项目名称:实验二  服务器端简单程序设计 一、实验目的通过一个小型网站的开发,加深对session,request,response,cookie等对象的理解,掌握其使用方法,进一步深入掌握HTML、CSS和JavaScript等知识。二、实验内容和基本要求1)编写index.jsp文件,展示某一类物品或知识的介绍,可以......
  • Web前端资源
    招聘要求前端工程师:1.熟练掌握HTML5、CSS3、JavaScript,Ajax,跨域等基础知识;2.熟练掌握VUE开发框架,熟悉ElementUI、Vant等UI框架的使用;3.掌握项目版本控制工具Git的使用;4.有APICloud开发经验更佳;Web前端画图招聘要求:1.熟练掌握ECharts画图功能,包括曲线图、热力图以......
  • WebAssembly初尝试
    前言之前老是听别人提到WebAssembly这个词,一直对其比较模糊,不能理解是个啥东西,后来自己实践了一下,发现其实就是一种提高代码性能的手段。简介WebAssembly是一种运行在现代网络浏览器中的新型代码,并且提供新的性能特性和效果。它设计的目的不是为了手写代码而是为诸如C、C+......
  • 自主阅读笔记03《基于web 服务器的网站性能优化研究》
    文章来源信息记录材料by戴胜,朱琳、广东科技学院计算机系一、客户端优化实际指的是浏览器,在浏览器完成访问网站的时间中,有80%的时间用于加载图像、样式表、脚本等静态资源。浏览器的主要作用就是显示数据和发送http请求。1.减少HTTP请求一个页面中包含多个种类和多个数量的组件......
  • springboot-web-mybatis
    Restful开发规范Restful是网络应用接口程序的接口设计风格,基于HTTP协议GET:查询POST:新增PUT:修改DELETE:删除Restful是一种风格,可以不遵守如何为请求参数设置默认值可以在Service层判断是否为null,如果为true则给它赋值默认值可以在Controller层参数列表添加@RequstPa......
  • 在 Java 中重采样音频
    在我的一个项目中,我需要将PCM音频数据重新采样为不同的采样率。我正在使用javax.sound.sampled.AudioSystem来完成这项任务。重新采样似乎会在帧的开头和结尾添加额外的样本。下面是一个最小的工作示例......
  • WebRTC学习记录以及以Janus-gateway流程增进理解
    这篇文章是我按照我的学习习惯记录的文章,借鉴了许多大佬的学习框架,以及独自去验证正确性的一个过程Web实时通信(Real-TimeCommunication)概述https://webrtcforthecurious.com/zh/docs/01-what-why-and-how/看完只有一个感受:为什么音视频要扯上web,其中的协议大部分都来自web的......
  • Go For Web:一篇文章带你用 Go 搭建一个最简单的 Web 服务、了解 Golang 运行 web 的原
    前言:本文作为解决如何通过Golang来编写Web应用这个问题的前瞻,对Golang中的Web基础部分进行一个简单的介绍。目前Go拥有成熟的Http处理包,所以我们去编写一个做任何事情的动态Web程序应该是很轻松的,接下来我们就去学习了解一些关于Web的相关基础,了解一些概念,以及......
  • FreeMarker_web.xml
    freemarker的解析,实际上就是一个专用的servlet,你需要在web.xml中配置<?xmlversion="1.0"encoding="UTF-8"?><web-appversion="2.4"xmlns="http://java.sun.com/xml/ns/j2ee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-in......
  • WebSocket 一些简单地记录
    WebSocket是HTML5开始提供的一种在单个TCP连接上进行全双工通讯的协议。全双工(FullDuplex)是通讯传输的一个术语。通信允许数据在两个方向上同时传输,它在能力上相当于两个单工通信方式的结合。单工就是在只允许甲方向乙方传送信息,而乙方不能向甲方传送半双工(H......