网页音频接口的基本概念 您所在的位置:网站首页 音频输出接口的标志 网页音频接口的基本概念

网页音频接口的基本概念

2024-07-15 11:16| 来源: 网络整理| 查看: 265

一个音频片段(AudioBuffer)会包含几个组成参数:一个或几个声道(1 代表单声道,2 代表立体声等等),一个长度(代表片段中采样帧的数目)和一个采样率(是每秒钟采样帧的个数)。

每个样本点都是一个 代表着该音频流在特定时间特定声道上的数值的 单精度浮点数。一个帧,或者一个采样帧是由一组在特定时间上的所有声道的样本点组成的——即所有声道在同一时间的样本点(立体声有 2 个,5.1有 6 个,等等,每个帧包含的样本点个数和声道数相同)。

采样率就是一秒钟内获取帧的个数,单位是赫兹(Hz)。采样率越高,音频效果越好。

现在让我们来看一下通道,一个单声道和一个立体声的音频片段,每个都是 1 秒钟,播放频率(采样率)为 44100 赫兹:

单声道片段会有 44100 个样本点和 44100 个帧。长度属性为 44100。 立体声片段会有 88200 个样本点和 44100 个帧。长度属性依旧为 44100,因为长度总和帧的个数相同。

当一个音频片段开始播放时,你将会听到最左侧的样本帧,之后是他右侧相邻的一帧,以此类推。在立体声中,你将会同时听到两个声道。样本帧的概念在此时非常有用,因为每个样本帧代表特定的播放时间,而和声道个数无关,这种方式很有利于精确的多声道同步处理。

备注: 只需用帧的数目除以采样率即可得到播放时间(单位为秒)。用样本点数目除以声道个数即可得到帧的数目。

下面我们将展示几个浅显易懂的示例:

jsvar context = new AudioContext(); var buffer = context.createBuffer(2, 22050, 44100);

如果你使用上面的方法调用,你将会得到一个立体声(两个声道)的音频片段 (Buffer),当它在一个频率为 44100 赫兹(这是目前大部分声卡处理声音的频率)的音频环境中播放的时候,会持续 0.5 秒:22050 帧 / 44100 赫兹 = 0.5 秒。

备注: 在数字音频中,44,100 赫兹(有时也写作 44.1 kHz)是一个常见的采样频率。为什么选取 44.1kHz 呢?首先,因为人耳的接收频率大约在 20 Hz 到 20,000 Hz 之间,根据采样定理,采样频率一定要大于最终生成数据最大频率的二倍,因此就一定要大于 40,000 Hz(即 40kHz)。不仅如此,在采样之前信号还必须通过低通滤波器,否则 会发生混叠现象,一个理想低通滤波器会完全留下低于 20kHz 的信号(且没有使它衰减)并完美阻拦一切高于 20kHz 的信号,而事实上过度频带总是存在,在这个区域内信号会被部分衰减。这个频带越宽,建立一个抗混叠滤波器才越容易。因此我们选取 44.1kHz 允许我们有 2.05kHz 的空间预留给过度频带。

jsvar context = new AudioContext(); var buffer = context.createBuffer(1, 22050, 22050);

如果你这样调用,你将会得到一个单声道的音频片段 (Buffer),当它在一个频率为 44100 赫兹的音频环境中播放的时候,将会被自动按照 44100 赫兹重采样(因此也会转化为 44100 赫兹的片段),并持续 1 秒:44100 帧 / 44100 赫兹 = 1 秒。

备注: 音频重采样与图片的缩放非常类似:比如你有一个 16 x 16 的图像,但是你想把它填充到一个 32 x 32 大小的区域,你就要对它进行缩放(重采样)。得到的结果会是一个较低品质的(图像会模糊或者有锯齿形的边缘,这取决于缩放采用的算法),但它却是能将原图形缩放,并且缩放后的图像占用空间比相同大小的普通图像要小。重新采样的音频道理相同——你会节约一些空间,但事实上你无法产出高频率的声音(高音区)。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有