PCM(Pulse - Code Modulation)数据格式
基本概念
- PCM 是一种对模拟信号进行数字编码的方法。它将模拟信号(如声音)在时间上进行等间隔采样,然后将采样值的幅度量化为有限个离散值,并用二进制码表示。例如,在音频领域,将声波这种连续的模拟信号通过 PCM 编码变成数字信号,以便于存储和传输。
主要特点
- 无损编码 :PCM 编码不会对原始信号进行压缩,只是对模拟信号进行数字化处理。这意味着在解码后可以完全恢复原始的采样数据,从而保证了音频或信号的高保真度。例如,在专业音频录制和后期制作中,为了最大程度保留原始声音信息,通常会使用 PCM 格式。
- 数据量较大 :由于没有进行压缩,它的数据量与采样频率、量化位数和声道数等因素密切相关。公式为:数据量 = 采样频率(Hz)× 量化位数(bit)× 声道数 × 时间(秒)。以常见的 44.1kHz 采样频率、16bit 量化位数的双声道音频为例,每秒的数据量为 44100×16×2 = 1411200bit,约 176.4kByte。这使得 PCM 格式在存储和传输时需要较大的空间和带宽。
- 简单直观 :其编码和解码过程相对简单。编码就是对模拟信号采样、量化和编码,解码则是将数字信号转换回模拟信号。这种简单性使得 PCM 在早期的数字音频系统和一些对信号保真度要求极高的应用场景中被广泛采用。
应用场景
- 在专业音频录制领域,如音乐制作工作室,为了获取高质量的原始音频素材,会使用 PCM 格式。在数字音频工作站(DAW)中,录制的音频轨道通常以 PCM 形式存储,方便后续的编辑、混音等操作。
- 在音频数据传输过程中,当需要保证音质且带宽允许的情况下,也会采用 PCM 格式。比如,在一些高端的音频接口和设备之间的数据传输,通过数字音频接口(如 AES / EBU 接口)以 PCM 格式传输音频信号。
常见 PCM 格式变体
- LINEAR PCM :是 PCM 的一种基本形式,它使用线性量化方式。量化步长在整个信号幅度范围内是均匀的,这种均匀量化方式在处理幅度变化较大的信号时可能会出现一些问题,如在信号幅度较小时可能会有较大的量化误差,但在许多通用的音频应用场景中仍然被广泛使用。
- μ - law PCM 和 A - law PCM :这两种是压缩扩充(Companding)的 PCM 方式。μ - law 主要在北美和日本使用,A - law 主要用于欧洲和中国等地区。它们通过对信号进行非线性量化,在一定程度上解决了 LINEAR PCM 在小信号幅度时量化误差大的问题,能够以较少的比特数来表示信号,从而减少数据量。
Opus 数据格式
基本概念
- Opus 是一种完全开放且免费的音频编码格式,由 Internet Engineering Task Force(IETF)定义。它被设计用于实时通信(如 VoIP)、流媒体传输和音频存储等多种应用场景。Opus 编码器可以将输入的音频信号(通常为 PCM 格式)压缩成 Opus 数据包,解码器再将这些数据包还原为音频信号。
主要特点
- 高效的编码效率 :Opus 在较低的比特率下能够提供高质量的音频。例如,在比特率为 64kbps 时,Opus 的音质就已经可以满足大多数语音通信和低质量音乐传输的要求。对于相同的音质,Opus 所需的比特率比许多传统音频编码格式(如 MP3)要低很多。这是因为 Opus 结合了多种先进的音频编码技术,包括线性预测编码(LPC)和基于变换的编码等,能够有效地去除音频信号中的冗余信息。
- 低延迟 :它具有非常低的编码和解码延迟,这对于实时通信应用至关重要。例如在语音通话中,Opus 的编码延迟可以低至 2.5 - 40ms,远低于一些其他音频编码格式,能够保证语音的实时性和交互性。
- 灵活性和适应性 :Opus 支持不同采样率(从 8kHz 到 48kHz)和比特率(从 6kbps 到 510kbps)的音频编码。可以根据不同的应用场景和网络条件,灵活地选择合适的采样率和比特率。例如,在移动网络信号较差时,可以降低比特率以保证音频的流畅传输;在高质量音乐流媒体场景中,可以采用较高的比特率和采样率来提供更好的音质。
应用场景
- 在实时通信领域,如微信、Zoom 等视频会议软件和语音聊天应用中,Opus 是常用的音频编码格式。它能够确保语音在传输过程中的清晰度和实时性,同时减少数据传输量,节省网络资源。
- 在音频流媒体服务方面,像 Spotify、网易云音乐等平台也会使用 Opus 编码格式。对于移动用户来说,Opus 可以在有限的网络带宽下提供较好的音频体验,减少流量消耗。
与其他音频格式的比较
- 与传统的有损音频编码格式(如 MP3)相比,Opus 在相同音质下具有更高的压缩效率和更低的延迟。与 PCM 格式相比,Opus 通过压缩大大减少了数据量,但会带来一定程度的音质损失,不过在合理的比特率设置下,这种损失在大多数应用场景下是可以接受的。
音频经UDP发送和接收的流程一般为:
麦克风->PCM数据->OPUS压缩数据->AES-CTR加密数据->UDP发送数据
UDP接收数据->AES-CTR解密数据->OPUS加压数据->PCM数据->扬声器