web Audio 音频可视化

栏目: Html5 · 发布时间: 5年前

内容简介:简单的录音功能已经实现了,在此基础上,实现下录音音频可视化。开始录音时,需要connect,这样的话,音频源(声音源)输入到analyse节点,我们再根据频率绘制波形图。

简单的录音功能已经实现了,在此基础上,实现下录音音频可视化。

createAnalyser

创建

可视化主要用到的是这个 方法 ,他返回的是一个录音分析节点。在录音时,只需要将节点connect上,我们就能拿到频率数据。

this.analyser = this.context.createAnalyser(); // 录音分析节点
this.analyser.fftSize = 2048; // 表示存储频域的大小

连接音频源

开始录音时,需要connect,

// audioInput 为声音源,连接到处理节点 recorder
this.audioInput.connect(this.analyser);
this.analyser.connect(this.recorder);
// 处理节点 recorder 连接到扬声器
this.recorder.connect(this.context.destination);

这样的话,音频源(声音源)输入到analyse节点,我们再根据频率绘制波形图。

获取频率数据

api提供了 接口 用来获取频率数据,我这使用的是getByteTimeDomainData()方法,他会将波形或时域数据复制并传入到方法的第一个参数中(Uint8Array类型,和方法有关),还有其他方法,也可以使用。

let dataArray = new Uint8Array(this.analyser.frequencyBinCount);
// 将数据拷贝到dataArray中。
this.analyser.getByteTimeDomainData(dataArray);

frequencyBinCount,FFT大小的一半,表示dataArray可使用的数据值的数量。

可视化

requestAnimationFrame

用requestAnimationFrame取代setTimeout或setInterval,稳定60fps的输出。

canvas

此处可视化借助canvas绘图,将波形绘制出来。

ctx.beginPath();

var sliceWidth = canvas.width * 1.0 / bufferLength, // 一个点占多少位置,共有bufferLength个点要绘制
    x = 0; // 绘制点的x轴位置

for (var i = 0; i < bufferLength; i++) {
    var v = dataArray[i] / 128.0;
    var y = v * canvas.height / 2;

    if (i === 0) {
        // 第一个点
        ctx.moveTo(x, y);
    } else {
        // 剩余的点
        ctx.lineTo(x, y);
    }

    // 依次平移,绘制所有点
    x += sliceWidth;
}

ctx.lineTo(canvas.width, canvas.height / 2);
ctx.stroke();

思路就是将canvas的宽度分割成对应数量的,再计算y轴方向的位置,并绘制成线。

详细的代码可以参考: github

欢迎关注微信公众号[ 我不会前端 ]或扫描下方二维码!

web Audio 音频可视化


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

挑战编程

挑战编程

斯基纳 / 刘汝佳 / 2009-7 / 39.00元

《挑战编程:程序设计竞赛训练手册》分为14章,分别介绍在线评测系统的基本使用方法、数据结构、字符串、排序、算术与代数、组合数学、数论、回溯法、图遍历、图算法、动态规划、网格、几何,以及计算几何,并在附录中介绍了一些著名的程序设计竞赛以及相应的备赛建议与比赛技巧。每章的正文用十余页的篇幅覆盖了该领域最核心的概念和算法,然后给出八道可在线提交的完整编程挑战题目供读者练习。 全书内容紧凑、信息量大......一起来看看 《挑战编程》 这本书的介绍吧!

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具