webrtc音频处理(webrtc audio_processing)

本文主要介绍webrtc音频处理(webrtc audio_processing),下面一起看看webrtc音频处理(webrtc audio_processing)相关资讯。
webrtc打开麦克风,获取音频,并在网页上显示音量。
播放样本音频#从播放音频开始。准备一个现成的音频文件。
在界面上放一个音频元素,事先准备一个音频文件,将路径填入src。
音频id = 样本-音频和视频src = 天知道控制自动播放/音频音频音频有默认风格。打开网页,您可以使用它来播放样本音频。
webrtc打开麦克风#准备#音频、仪表、按钮等。在#html页面上。
音频id = 播放-音频和视频控制自动播放/audiovid = 米 div id = 即时 div class = 标签 :/.分区米高= 0.25 max = 1 价值= 0 /meter div class = 价值与价值/div/div div id = 慢 div class = 标签 第二:/.分区米高= 0.25 max = 1 价值= 0 /meter div class = 价值与价值/div/div div id = 剪辑 class=;label;clip:/分部米马克斯= 1 价值= 0 /meter div class = 价值与价值/div/div div button id = startbtn 开始/按钮buttonbuttonid = stopbtn 禁用停止/按钮/div div id = 味精 /div来介绍js脚本。
!-使用本地适配器-脚本src = ../js/适配器-latest . js 异步/脚本脚本js/soundmeter . js /script脚本src = js/main.js/script使用本地适配器main.js、主控逻辑soundmeter.js来计算音量。在brtc之前,让 让我们看看与音频相关的方法和类。
要使用web的音频api,需要使用audiocontext。
尝试{ window。音频上下文=窗口。audio context | | window . webkitaudiocontext;window . audio context = new audio context;} catch(e){ alert( ;不支持网络音频api );}音频上下文。createscriptproc: 256、512、1024、2048、4096、8192、16384。如果没有通过,或者参数为0,则采用当前环境中最合适的缓冲区大小,该值是2的幂的常数。它在节点的整个生命周期中保持不变。该值控制分派audioproc: webkit(版本31)要求在调用此方法时,一个有效的buffersize。numberofinputchannels值必须是一个整数,用于指定输入到节点的通道数。默认值为2。最大值32.numberofoutputchannels是一个整数,用来指定节点输出的通道数。默认值为2,最大值为32。参考: developer . mozilla . org/zh-cn/docs/web/api/base audio text/createscriptwriter。
音频上下文。onaudiopress #音频数据。
基本用法
var audio ctx = new audio context;var script node = audioctx . createscriptprocessor(4096,1,1);scriptnode.onastudio process =函数(事件){/*...*/}此示例使用此监视器。但目前已被弃用。
参考: developer . mozilla . org/en-us/docs/web/api/scriptprocessornode/onaudioprocess # browser _ compatibility。
完整的soundmeter.js代码如下
使用严格的 ;//这个类生成与音频音量相关的数值函数soundmeter(context){ this。上下文=语境;this.instant = 0.0//实时this.slow = 0.0//第二级this.clip = 0.0this . script = context . createscriptprocessor(2048,1,1);const that = thisthis . script . onaudioprocess = function(event){ const input = event . input buffer . getchanneldata(0);//获取一个长度为2048的数组let i;设sum = 0.0设clip count = 0;for(i = 0;i输入.长度;i){ sum = input[i]* input[i];if(math . abs(input[i])0.99){ clip count = 1;} } console . log( ;剪辑计数和。;,clip count);that . instant = math . sqrt(sum/input . length);that . slow = 0.95 * that . slow 0.05 * that . instant;that . clip = clip count/input . length;};} soundmeter . prototype . connectto source = function(stream,callback){ console . log( ;测音仪连接和。;);try { this . mic = this . context . createmediastreamsource(stream);this . mic . connect(this . script);this . script . connect(this . context . destination);if(回调类型!= = 未定义 ){ callback(null);} } catch(e){ console . error(e);if(回调类型!= = 未定义 ){回调(e);} }};soundmeter . prototype . stop = function{ console . log( ;测音器停止 );this . mic . disconnect;this . script . disconnect;};js#获取页面元素
使用严格的 ;const instant meter = document . query selector( ;#速度计 );const slow meter = document . query selector( ;#慢节拍 );const clip meter = document . query selector( ;#剪辑米 );const instant value display = document . query selector( ;#即时。价值与价值。;);const slow value display = document . query selector( ;#慢。价值与价值。;);const clip value display = document . query selector( ;#剪辑。价值与价值。;);const play audio = document . query selector( ;#播放-音频 );const ms gele 2 = document . query selector( # msg );const startbtn = document . getelementbyid( startbtn );const stop btn = document . getelementbyid( stopbtn );设meterrefresh = nullconst constraints = window . constraints = { audio:为真,vid:为假};打开麦克风#打开麦克风,类似于之前打开摄像头,使用getusermedia方法。
start btn . onclick = function(e){ start btn . disabled = true;stopbtn.disabled = false尝试{ window。音频上下文=窗口。audio context | | window . webkitaudiocontext;window . audio context = new audio context;} catch(e){ alert( ;webaudio api不支持。 );} navigator . media devices . get user media(约束条件)。然后(gotaudiostream)。catch(onerr);};处理音频#成功打开麦克风后,将处理音频流。
函数获得了音频流(stream) {stream。inactive = function{ console . log( ;音频停止 );};window.stream = streamplay audio . src object = stream;console . log( ;对接麦克风和音频;;);const soundmeter = window . soundmeter = new soundmeter(window . audio context);soundmeter . connectto source(stream,function(e){ if(e){ alert(e);返回;} meter refresh = setinterval(= { instant meter . value = instant value display . innertext = soundmeter . instant . to fixed(2);slowmeter.value = slowvaluedisplay . innertext = soundmeter . slow . to fixed(2);clip meter . value = clip value display . innertext = soundmeter . clip;}, 100);});} function onerr(error){ const error message = ;错误导航器。media devices . getuser media : ;错误消息 error.namems gele 2 . innertext = error message;console . error(error message);}创建一个soundmeter,连接到音频流soundmeter . connectto source(stream,function(e){ });
设置定时器setinterval,定期刷新卷数据。
停止#停止音频流。
阻止btn。onclick = function(e){ console . log( ;停止 );startbtn.disabled = falsestopbtn.disabled = truewindow.stream.gettracks。foreach(track = track . stop);window . soundmeter . stop;clearinterval(meter refresh);instant meter . value = instant value display . innertext = ; ;slow meter . value = slow value display . innertext = ; ;clip meter . value = clip value display . innertext = ; ;}运行效果#运行效果链接
总结#用getusermedia打开麦克风,获取音频流。使用audiocontext函数获取音量值。
本文链接:webrtc音频音量
标签:
音频麦克风
了解更多webrtc音频处理(webrtc audio_processing)相关内容请关注本站点。