音频编码简介

音频编码是指存储和传输音频数据的方式。以下文档介绍了此类编码的原理。如需了解为您的应用选择最佳编码的准则,请参阅最佳做法

数字音频编码十分复杂,您通常无需了解 Speech API 中处理音频的详细信息。本文仅提供相关概念的综述。其中某些背景信息可能有助于了解该 API 的原理,以及在您的应用中应该如何编制和处理音频。

音频格式与编码

请注意,音频格式并不等于音频编码。例如,像 .WAV 这种常用文件格式定义了音频文件头的格式,但其本身并不是音频编码。.WAV 音频文件通常(但不总是)使用线性 PCM 编码;不过,您只有在检查 .WAV 文件头之后才能确定该文件的特定编码。

然而,FLAC 既是一种文件格式,也是一种编码,这有时会引起混淆。在 Speech-to-Text API 中,只有 FLAC 编码要求音频数据包含标头;所有其他音频编码均指定无标头音频数据。如果提到 Speech-to-Text API 中的 FLAC 时,则始终指编解码器。如果要表示 FLAC 文件格式,则会使用“.FLAC 文件”格式。

WAV 或 FLAC 文件不要求指定编码和采样率。如果省略,Speech-to-Text 会根据文件头自动确定 WAV 或 FLAC 文件的编码和采样率。如果您指定的编码或采样率值与文件头中的值不匹配,Speech-to-Text 将返回错误。

支持的音频编码

Speech-to-Text API 支持多种不同编码。下表列出了支持的音频编解码器:

编解码器 名称 无损 使用说明
MP3 MPEG 第三层音频 MP3 编码是一项 Beta 版功能,仅在 v1p1beta1 中提供。如需了解详情,请参阅 RecognitionConfig 参考文档。
FLAC 免费无损音频编解码器 信息流要求使用 16 位或 24 位的位深
LINEAR16 线性 PCM 16 位线性脉冲编码调制 (PCM) 编码
MULAW μ 律 8 位 PCM 编码
AMR 自适应多速率窄带 采样率必须为 8000 Hz
AMR_WB 自适应多速率宽带 采样率必须为 16000 Hz
OGG_OPUS Ogg 容器中的 Opus 编码音频帧 采样率必须为 8000 Hz、12000 Hz、16000 Hz、24000 Hz 或 48000 Hz 之一
SPEEX_WITH_HEADER_BYTE Speex 宽带 采样率必须为 16000 Hz

如需详细了解 Speech-to-Text 音频编解码器,请参阅 AudioEncoding 参考文档。

如果您在对源素材进行编码时可以选择,请使用 FLACLINEAR16 等无损编码,以获得更好的语音识别效果。如需了解为您的任务选择适当编解码器的准则,请参阅最佳做法

为什么编码?

音频由波形组成,包括不同频率和振幅的波的叠加。为了在数字媒体内表示这些波形,需要对波形进行采样,其采样率需要(至少)可以表示您要复制的最高频率的声音;同时还需要存储足够的位深,以表示声音样本中波形的适当振幅(响度和柔度)。

声音处理设备重建频率的能力称为其频率响应,创造适当响度和柔度的能力称为其动态范围。这些术语通常统称为声音设备的保真度。最简单形式的编码就可以利用这两个基本原理重建声音,同时还能够高效地存储和传输数据。

采样率

声音以模拟波形的形式存在。数字音频片段以足够快的速率对模拟波的振幅进行采样,模仿波的固有频率,达到高度接近这种模拟波的效果。数字音频片段的采样率指定了(每秒)从音频的源素材中采集的样本数;采样率越高,数字音频如实表示高频的能力就越强。

根据 Nyquist-Shannon 定理,对于您要以数字形式采集的任何声波,您的采样率通常需要高于其最高频率的两倍。例如,要表示人类听觉范围 (20-20000 Hz) 内的音频,数字音频格式必须至少每秒采样 40000 次(CD 音频使用 44100 Hz 的采样率,部分原因也在于此)。

位深

位深影响给定音频样本的动态范围。位深越高,表示的振幅越精确。如果在同一音频样本内有很多响亮和柔和的声音,则需要更大的位深才能正确表示这些声音。

增高位深还会降低音频样本内的信噪比。CD 音乐音频使用 16 位的位深。DVD 音频使用 24 位的位深,而大多数电话设备使用 8 位的位深。(某些压缩技术可以补偿较小位深的不足,但往往会有损耗。)

未压缩音频

数字音频处理大多使用采样率和位深这两种技术直接存储音频数据。脉冲编码调制(即 PCM)是最流行的数字音频技术(在使用光盘时较为普及)之一。音频按设定的时间间隔进行采样,采样波在采样点的振幅使用样本的位深存储为数字值。

线性 PCM(表明振幅响应在采样中线性一致)是 CD 内以及 Speech-to-Text API 的 LINEAR16 编码内使用的标准。两种编码均会生成一个与音频数据直接对应的未压缩字节流,两个标准均包含 16 位的位深。线性 PCM 在 CD 中使用 44100 Hz 的采样率,适合改编音乐;然而 16000 Hz 的采样率更适合改编语音。

线性 PCM (LINEAR16) 就是一个未压缩的音频例子,因为数字数据完全按照上述标准的规定进行存储。读取使用线性 PCM 编码的单通道字节流时,您可以每隔 16 位(2 字节)计数一次以实现某种目的,例如获得波形的另一个振幅值。几乎所有设备都可以在本地处理此类数字数据,您甚至可以使用文本编辑器裁切线性 PCM 音频文件,但(显然)未压缩音频并不是传输或存储数字音频的最高效方式。因此,大多数音频采用了数字压缩技术。

压缩音频

与所有数据一样,音频数据通常会进行压缩,以便更易于存储和传输。音频编码中的压缩可能为无损或有损。无损压缩经过解包后可以将数字数据恢复为原始形式。有损压缩在压缩和解压缩过程中必然会移除某些信息,并且进行参数化,以便表明在多大容限范围内允许压缩技术移除数据。

无损压缩

无损压缩对存储的数据进行复杂的重排,从而压缩数字音频数据,但不会导致原始数字样本的质量下降。如果采用无损压缩,在将数据解包为原始数字形式时,不会丢失任何信息。

那么,无损压缩技术为什么有时会具有优化参数?这些参数通常用来控制文件大小和解压缩时间。例如,FLAC 使用 0(最快)到 8(文件大小最小)的压缩级别参数。与较低级别的压缩相比,较高级别的 FLAC 压缩不会丢失任何信息。压缩算法只是需要在构建或解构原始数字音频时消耗更多的计算能量。

Speech-to-Text API 支持两种无损编码:FLACLINEAR16。从技术上讲,LINEAR16 不是“无损压缩”,因为首先它并未涉及压缩。如果文件大小或数据传输对您很重要,请选择 FLAC 作为音频编码选项。

有损压缩

有损压缩则会在构建压缩数据期间清除或减少某些类型的信息,从而压缩音频数据。Speech-to-Text API 支持多种有损格式,但是,如果您可以控制音频,则应避免使用这些格式,因为数据丢失可能会影响识别准确度。

流行的 MP3 编解码器就是一种有损编码技术。所有 MP3 压缩技术都会移除超出正常人类音频范围的音频,并调整 MP3 编解码器的有效比特率(即每秒比特数)以存储音频数据,从而调整压缩量。

例如,使用 16 位线性 PCM 的立体声 CD 的有效比特率为:

44100 * 2 channels * 16 bits = 1411200 bits per second (bps) = 1411 kbps

MP3 压缩会移除比特率为 320 kbps、128 kbps 或 96 kbps 的数字数据,从而导致音频质量下降。MP3 还支持可变比特率,从而进一步压缩音频。两种技术都会丢失信息且影响音频质量。例如,大多数人都可以分辨 96 kbps 与 128 kbps 编码 MP3 音乐之间的差异。

其他压缩形式会对某些其他约束条件进行参数化。

MULAW 是 8 位 PCM 编码,其中样本的振幅进行对数调制而非线性调制。因此,μ 律减小了压缩音频的有效动态范围。虽然 μ 律最初是专门为优化语音编码而引入的,与其他类型的音频形成对照,但是 16 位LINEAR16(未压缩 PCM)仍远远优于 8 位 μ 律压缩音频。

AMRAMR_WB 在源音频样本上引入可变比特率,以此调制编码音频样本。

Speech-to-Text API 支持多种有损格式,但是,如果您可以控制源音频,则应避免使用这些格式。虽然通过有损压缩移除此类数据可能不会明显影响人耳听到的音频,但对于语音识别引擎而言,缺少这些数据可能会明显降低准确度。