HTML5 多媒体应用现在还没被大部分挖掘出来,像普通的页游只能简简单单的做一些 2D 渲染,主要差距还是在性能上。H5 天生是动态语言,需要经过解析、编译。而且 JS 还是一个弱类型语言,虽然有 JIT 的帮助,但是解析引擎本身就有一个天花板,你无法、或者直接点,不能让 JS 达到原生的效率。但随着技术的发展,浏览器倾向于给 Web 开发者直接提供更底层的 API 使用,而最新推出的 WASM 的技术则更是直接解决了如何让 Web 在拥有原生性能的前提下,不用大量造高性能计算的轮子。

在这样的一个发展前提下,HTML5 的性能会逐渐的被释放,这也会加快 HTML5 多媒体时代的到来,比如,高性能页游引擎、Web 音视频播放器、图形计算、分布式计算引擎等等。

虽然,看起来前景很广,不过,该交的学费,该走的弯路你还是要走的。本篇不打算往大而全走,这里想应题,介绍一下 HTML5 中音频处理的板块。

在 Web 中,你能够直接操作底层的音频 API 是,AudioContext。如果你还考虑兼容性的话,可以加上 webkitAudioContext

let AudioContext = window.AudioContext || window.webkitAudioContext;
复制代码

它实际上和 MediaSource Extension 一样,是将输入数据直接和播放设备连接在一起。audioContext 连接的是 AudioBuffer 和音频播放器。中间可以和一些 Node 连接,这些 Node 是用来对流进行处理的。

常用的 Node 有:

  • GainNode: 淡入淡出音量处理
  • BiquadFilterNode: 滤波节点
  • DelayNode: 创建回声
  • PannerNode: 空间环绕音效
  • analyserNode: 频谱分析
  • offlineContext : 快速音视频处理

下面是直接解码一个 Buffer 为音频处理格式流:

context.decodeAudioData(buffer,audioBuffer=>{// audioBuffer 对象
});
复制代码

这意味着,我们可以直接拿到音频流里面的具体数据,而剩下的就是我们的想象空间了。这里为了方便大家理解,顺带介绍一点关于声音的基本理论。

声学基础

一般人可以感觉到20 Hz~20kHz,强度为 -5dB~130dB 的声音信号。成年人为 30~16000Hz 之间,老年人为 50~10000Hz 之间。人是通过耳朵进行感受音波的,那为什么会称为波呢?最直观的可以看我们耳朵是怎么反应声音的。当声音经过外耳传入中耳时,镫骨的运动引起耳蜗内流体压强的变化,从而引起行波沿基底膜的传播。

耳蜗就像一个频谱分析仪,将复杂的信号分解成为各种频率分量。频谱分析会比较专业一点,简单说就是 声波 通过 快速 FFT 变化,由空域变为频率,这样让音频分析多了一个维度分析。

其中,在音频中有一个非常通用并且流行的单位,分贝。分贝最初使用是在电信行业,是为了量化长导线传输电报和电话信号时的功率损失而开发出来的。这个单位实际上并不是实际带物理单位的量,它原始含义其实就是 两个数值的对数比率,这两个数值分别是测量值和参考值(也称为基准值)。如公式:

而我们经常会看到某些描述单位,比如,>120dB 属于不舒服声域范围。或者形如下图:

声压是描述声波最基本的物理量,是媒质中的压力与静压的差值。单位为 Pa。(你可以理解为大气压的波动值)。前面说了分贝是参考值,那他参考的是啥呢?

其实是20μPa,这个值表示人耳在1000Hz处的平均可听阈值,或者是人耳在1000Hz处可被感知的平均最小声压波动值。

最后再给大家普及一个,我大学以来贼 TM 想不通的东西,经常会在很多滤波器里面看到 -3dB。那时候一直想不明白是为什么这个这么重要,后来偶然间看到

-3dB对应的幅值比为0.707,即为:。如果是按功率比来计算,则功率比为1/2,也就是原来功率的一半,因此,-3dB称为“半功率点”。 在 高通、低通、带通和带阻滤波器的截止频率是-3dB点。这表示的也是功率衰减一般时,对应的滤波截止频率。

(奶奶个腿。。。)

关于声学这块,还有很多很多内容,比如粉红噪声,高斯噪声等等。几百页的教材都写不完,我这里就不在这赘述了。

这里我们回到 HTML5 的工程技术中来,简单介绍一下,音频 H5 能有哪些具体的工程例子。

HTML5 音频应用

首先第一个想到的是 keyboard Piano,通过键盘控制,来手动播放 piano 对应的声音,比如 C1,C2,C3 等。

更专业一点的用来进行音频分析,测试你的音色好听与否。通常来说,你在唱歌的时候,泛音越多,越集中,代表你的歌声越浑厚好听。

当然,HTML5 在 WASM 的加持下,还可以做更多更有趣的事情。

让你听见的 HTML5相关推荐

  1. 释放 HTML5 audio 的力量

    作者:Giorgio Sardo | 高级技术推广师 – HTML5 和 Internet Explorer 各种声音构成了我们的生活背景.现在,HTML5 <audio> 元素使 Web ...

  2. html反编译pug,学html5不得不说的html5shiv.js和pug

    一.html5shiv.js 首先来说一下关于html5语义化的问题,语义化虽然很好,可是却存在很多兼容问题,经常听见有人抱怨这该死的IE6,7,8,这个时候就要html5shiv.js出马了,这也是 ...

  3. html5+CSS+JavaScript学习笔记(小甲鱼)

    第一个程序 <!DOCTYPE html> <html><head><title>第一个程序</title></head> &l ...

  4. html5代码转换为视频,HTML5中的视频代码详解

    摘要 腾兴网为您分享:HTML5中的视频代码详解,智学网,云闪付,易推广,小红书等软件知识,以及360win10,流量魔盒,fitbit,上港商城,安卓2.3.7,全民惠,五年级下册英语单词表图片,t ...

  5. HTML5与CSS3权威指南之CSS3学习记录

    title: HTML5与CSS3权威指南之CSS3学习记录 toc: true date: 2018-10-14 00:06:09 学习资料--<HTML5与CSS3权威指南>(第3版) ...

  6. HTML5调用手机的Datepicker(日期选择器)

    HTML5 拥有多个新的表单输入类型.这些新特性提供了更好的输入控制和验证,包含了如下新的输入类型: email url number range Date pickers (date, month, ...

  7. android h5弹窗,Android嵌套html5页面中alert 弹出框问题

    最近项目中遇到一个头疼的问题,那就是在安卓里嵌套html5的时候发现alert弹出框出现了问题 那就是弹出的时候会出现串 来自http://xxxxx 网页的提示 然后下面出来具体的弹出信息,还有更奇 ...

  8. HTML5 本地文件操作之FileSystemAPI整理(二)

    一.文件目录操作 1.DirectoryEntry对象 属性: 1.isFile: 操作对象的是否为文件,DirectoryEntry对象固定其值为false 2.isDirectory: 操作对象是 ...

  9. Notepad++支持jQuery、html5、css3

    Notepad++里的代码提示文件是以XML文件存放于目录 ....\Notepad++\plugins\APIs\下的. 将这三个文件:html.xml, css.xml, javascript.x ...

最新文章

  1. mysql 删除 修改密码_Mysql数据库root密码忘记了,如何在不删除Mysql的情况下修改密码...
  2. 人工智能--野人过河
  3. 模糊测试工具Simple Fuzzer
  4. 禁止 pdf 下载、打印的方法
  5. Iframe难点备忘
  6. 反射获取成员变量并改值
  7. python 整数最大_Python程序使用floor()方法查找最大整数
  8. Brief C Programs of the Bombs
  9. Patsy库查看使用公式语法建模后的输入特征X 与 预测Y
  10. SpringBoot : BeanFactory和FactoryBean的区别
  11. ROS入门-5.认识ROS及ROS的基本概念
  12. 百度BML 图像分类-多标签在线API调试结果记录
  13. Windows 8 Directx 开发学习笔记(十四)使用几何着色器实现三角形细分
  14. 2.NET Core设定数据库种子
  15. 翻译:神经网络 为什么要通过减去数据集的图像均值来标准化图像,而不是深度学习中的当前图像均值?
  16. Matlab实现常见的插值算法
  17. 海马苹果助手ipad版_苹果IPA文件签名,软件掉签问题,自己也能轻松解决
  18. 君莫笑系列视频学习(2)
  19. 汇编实验——乐曲程序(两只老虎)
  20. 极客日报:iPhone13系列9月15日正式推出;微信视频号支持发布1小时视频;Firefox 92正式发布

热门文章

  1. 使用NTP服务同步时间
  2. COPY failed: file not found in build context or excluded by .dockerignore
  3. 401 错误原因和解决方案
  4. selenium 您的连接不是私密连接 解决办法
  5. 云隙服务器怎么设置,云隙-CloudGap
  6. [MFC]: 找不到标识符“xxxx“,或者vs报错“错误 LNK2019 无法解析的外部符号”
  7. uni-app与Html 标签的区别
  8. vue实现icon图标切换,点击按钮后改变当前按钮样式
  9. 一文带你了解程序员进入各种外包公司是如何工作的
  10. 湖南邮储银行计算机类的是不是不要看金融知识,邮储银行湖南省分行开展普及金融知识万里行活动...