• ·编程说·
  • ·文字·
  • ·技术·
  • About Me
Coding & Living & Enjoying
生活总是这样,现在措手不及的正是当初游刃有余的你
  1. Home
  2. 技术
  3. This article

Web Audio API 的介绍与应用

2020年08月12日 4Browse 0Like 0Comments
Table of Content

什么是 Web Audio API

作为一个大龄程序员来说,对于网页的认知大部分是停留在HTML/CSS/Javascript中,我们会很自豪的认为网页就是用来显示内容和调用服务器API的一个UI组件。

但是历史总是在不停的教育我们,不学习就会倒退,倒退就会不知者无畏。Web Audio API 就足够对我们进行打脸。

在这之前,网页可以对音频进行处理的方式还仅仅是标签,但是其能力十分的有限,对于更高级的音频操作完全的无能为力。为了增强浏览器的音频处理能力,W3C 着手开始了Web Audio API Specification 的工作。

在Web Auido API的设计目标中是结合游戏音频处理系统以及桌面音频应用程序的需求进行设计与开发。也就是说,使用Web Audio API我们几乎可以完成一个专业的音频处理软件(比如Cubase / Logic )的构建,而这一切都是构建在浏览器技术之上。

从API的设计上,可以做到:

  • 实现高精度的音频计算。主要应用于DAW(音序器),软件乐器等场景。
  • 音频混响器。音乐混缩的必要能力。
  • 3D音频。在游戏和音乐制作中都需要。
  • 与 / WebRTC的集成。

Web Audio API 的设计哲学

简单来说,所谓的音频处理其实就是标准的IO函数。从某个地方获取一个音频流(Input),经过实时计算处理后发送去某个地方(Destination),而这个处理也就是Effect(从习惯上来讲,我更愿意称其为Filter函数)。

经过了复杂的Input / Destination 编排之后,就可以得到一个路由表(Routing Graph)。这个路由表定义了音频如何在不同的Filter函数中进行穿梭。这整个过程的定义也就是Audio Context。

AudioContext 类承载了音频流的流转方式。

一个最简单的Audio Context例子可以是:

  1. 定义音频流来源于一个audio标签。
  2. 将音频流链接到一个音量放大器。
  3. 将音量放大器链接到标准音频输出接口(电脑音箱)。

这样我们就得到了一个实时音量增益的音频处理流。这这个基础之上,我们还可以在#2之后,再接入一个混响效果器,加入一点点回声效果,让声音稍微的圆润一些。其链接拓扑结构就成为了:

标签 ---> 音量增益器 ----> 混响器 ----> 电脑音箱。

上面的介绍目的是为了表达我们要用这个可插拔的Filter函数的思路来理解整个Web Audio API的设计将会变得非常的轻松。

在Web Audio API中,一个个不同的Filter函数设计为一个个不同的AudioNode类,所有的AuidoNode 子类都继承自AudioNode类。 而AudioNode有两个核心函数 \connect()和\disconnect()\`。

也就是这两个函数将不同的AudioNode子类进行流程编排而得到了一个处理图(Processing Graph)。

![](https://pic4.zhimg.com/80/v2-1eb0d3b119898d8f37fb03d1eb4f122b_1440w.jpg)

**我们在试图理解整个Web Audio API的设计理念中最重要的就是理解一个音频处理系统本质就是一个编排出来的有向图过程以及音频处理就是从输入转为输出的过程这两点。**

**Web Audio API 思维导图**

笔者对常用的Web Audio API 进行了归类,方便初学Web Audio API的同学进行整理。

![](https://pic2.zhimg.com/80/v2-5042f4c1296e7e2681b8ed45722de819_1440w.jpg)

**Web Audio API 的应用**
---------------------

[查乐谱 - 学琴新姿势](https://link.zhihu.com/?target=https%3A//www.chayuepu.com)是一个新兴的电子乐谱平台,同时也在尝试使用Web Audio API 进行MIR领域的产品开发。

1. **节拍器应用**

[查乐谱 - 小声节拍器​www.chayuepu.com](https://link.zhihu.com/?target=https%3A//www.chayuepu.com/app/beat)

这个应用利用了Web Audio API 实时的创建音频,同时也利用了Analyzer节点进行频谱计算。

使用了Web Audio API的优点:

在传统的网页开发中,对于类似于节拍器这种应用的开发通常会依赖与标签通过变成的方式进行播放与暂停工作。但是这种控制在延时上表现会很糟糕,无法应用在节拍器这种专业领域上。

**2\. 调音器应用**

[查乐谱 - 小声调音器​www.chayuepu.com](https://link.zhihu.com/?target=https%3A//www.chayuepu.com/app/tuner)

这款调音器这是一个更为经典的音频处理场景。

1. 从麦克风获取实时音频流。
2. 对音频流进行实时音高识别(Pitch Detection),在处理过程中直接获取到了音频流的FFT频域信息,利用简单的计算规则计算得出。
3. 对实时音频进行频谱绘制(利用Analyzer接口)。

This work is licensed under a Creative Commons Attribution 4.0 International License
Tags: html5 web audio
Last updated:2020年08月12日

Misko lee

男人,就要像贝多芬一样,扼住命运的喉咙 :)

Like
< Previous
Next >

Comments

Cancel reply

Misko lee

男人,就要像贝多芬一样,扼住命运的喉咙 :)

编程说

·编程说·

每周日晚11点更新,节假日不打烊

Archives
  • March 2021
  • August 2020
Newest Hotspots Random
Newest Hotspots Random
DSP 扫盲帖 此去经年 - 永兴未来城[2033年] 编程说【第二期】 - 聊聊系统集成与中间件开发 请别拿一两个胸部和游戏来说事!爷,不堕落! 也谈移动客户端的市场与发展趋势 Java编程中影响性能的一些特点
编程说 - 如何设计日志格式也谈移动客户端的市场与发展趋势一种通用递归深度检测技术 - 基于栈帧内容的检测 - Golang语言描述Kubernetes 简介TiDB Markdown Plugin - 将数据库运行在你的文章里从一个实际案例来讨论我们应该如何做性能优化
编程说 - 如何设计日志格式 也谈移动客户端的市场与发展趋势 编程说【第二期】 - 聊聊系统集成与中间件开发 Android - 重写BaseAdapter实现自定义ListView C++的苦口良药 此去经年 - 永兴未来城[2033年]
Tag aggregation
dsp android 编程说 html5 web audio parser markdown tidb wasm docker k8s kubernetes go
友链
  • Yian
  • 云风
  • 周梦康
  • 橡皮檫檫
  • 风雪之隅

COPYRIGHT © 2020 Misko Lee's Blog. ALL RIGHTS RESERVED.

THEME KRATOS MADE BY VTROIS