音视频开发—音频相关概念:数模转换、PCM数据与WAV文件详解

文章目录

    • 前言
    • 1.模拟数字转换(ADC)
      • 1.1ADC的关键步骤:
    • 2.数字模拟转换(DAC)
      • 2.1DAC 的基本流程包括:
    • 3.PCM数据
      • 3.1PCM 数据的关键要素包括:
    • 4.WAV文件
      • 4.1 WAV的构成
      • 4.2WAV文件的标准块结构
      • 4.3WAV的使用场景
    • 5.PCM与WAV的关系

前言

数字模拟转换(DAC)和模拟数字转换(ADC)是音频技术中非常重要的两个概念,它们在数字音频设备和系统中发挥着核心作用。这两种转换技术确保了模拟信号和数字信号之间的互转,使得音频信号可以在不同的媒体和设备间有效传输和处理。

1.模拟数字转换(ADC)

模拟数字转换是将模拟信号(连续信号)转换成数字信号(离散信号)的过程。在音频应用中,这意味着将捕捉到的声音(例如通过麦克风)转换成数字格式,以便于存储、编辑或处理。

一段原始的声音波形例子如下:
在这里插入图片描述

1.1ADC的关键步骤:

采样:测量模拟信号的振幅值,在特定的时间间隔内进行。这个时间间隔称为采样间隔,其倒数为采样率。例如,CD音质的标准采样率为44.1 kHz,即每秒采样44100次。

量化:将每次采样得到的模拟值转换为最接近的数字值。这个过程涉及到将连续的振幅值映射到有限的数字级别上。量化的精度通常由位深度(比特率)决定,例如16位、24位等。位深度指的是用于记录声音采样值的比特数。位深度越高,可以表示的声音振幅级别就越多,从而可以更精确地复制录音的动态范围和细节。以下是一些常见的位深度示例及其含义:

  • 16位:这是CD音质的标准位深度,它可以提供约96 dB的动态范围。16位系统可以表示 216=65536216=65536 不同的振幅级别。
  • 24位:这是专业音频工作的常用位深度,可以提供约144 dB的动态范围,使其能够记录更细微的音量变化。24位系统可以表示 224=16777216224=16777216 不同的振幅级别。
    在这里插入图片描述

量化后的数字信息如下:

在这里插入图片描述

编码:将量化后的值转换为二进制数码,形成数字信号。

在这里插入图片描述

ADC 的输出是数字信号,这意味着原始的连续模拟信号被转换为一系列离散的数字值。这些数字值可以用于数字处理、存储或其他数字应用。

2.数字模拟转换(DAC)

数字模拟转换是将数字信号转换回模拟信号的过程。这一步骤在播放数字音频文件时尤为关键,如在数字音乐播放器、计算机或智能手机中。

2.1DAC 的基本流程包括:

  1. 解码:将存储的数字数据(通常为二进制形式)解码成数字量化值。
  2. 重构:通过插值算法处理这些量化值,重构出原始的模拟波形。在这一过程中,可能会使用各种滤波技术来平滑输出信号,减少所谓的“阶梯效应”(由量化步骤产生的不连续变化)。
  3. 放大:将重构后的模拟信号放大,以适合后续的播放硬件(如扬声器或耳机)。

如将上图的数字信号转换为模拟信号,

在这里插入图片描述

3.PCM数据

PCM(Pulse Code Modulation,脉冲编码调制)是一种用于数字化模拟信号的技术,例如声音。在音频技术中,PCM是将声音等模拟信号转换为数字信号的标准格式。这种格式通过对模拟信号进行采样、量化和编码来生成数字音频数据。PCM 数据提供了一种非常纯净和精确的方式来存储声音,但由于其数据量大,通常需要更多的存储空间和带宽。

3.1PCM 数据的关键要素包括:

  1. 采样率(Sampling Rate)
    • 这是每秒钟采集模拟信号样本的次数,表示为赫兹(Hz)。常见的采样率有 44100 Hz(CD质量)、48000 Hz(专业视频和音频应用)、96000 Hz 或更高(高分辨率音频)。
  2. 位深度(Bit Depth)
    • 位深度决定了每个样本的音频分辨率,即每个采样的数据大小。常见的位深度有 16位(CD音质)、24位(专业音频)。位深度越高,可以记录的动态范围越广,音质越细腻。
  3. 声道数(Channels)
    • 声道数指的是音频流中的独立音频信号数量,例如单声道、立体声(两个声道),或多声道(如5.1环绕声系统使用的六个声道)。

4.WAV文件

WAV(或波形音频文件格式)是一种无损的音频文件格式,由微软和IBM共同开发,主要用于Windows操作系统。它通常被用于存储未压缩的音频数据,这使得它成为专业音频编辑和处理中非常受欢迎的格式。因为音频数据未经压缩,所以WAV文件通常比MP3或其他压缩格式的文件大得多。

4.1 WAV的构成

WAV文件主要由以下几个部分构成:

  1. RIFF Header(资源交换文件格式头):
    • WAV文件以“RIFF”标记作为文件的开始。这个标头指明了文件是一个资源交换文件格式,并包含了整个文件的大小。
  2. WAVE Header(WAVE头):
    • 紧接着RIFF头的是“WAVE”标记,它表明这是一个WAVE类型的数据文件。
  3. Format Chunk(格式块):
    • 这是WAV文件中最重要的部分之一,它包含了有关音频数据格式的详细信息,如声道数(单声道或立体声)、采样率、位深度(每个样本的位数),以及每秒的数据字节数。
  4. Data Chunk(数据块):
    • 数据块包含了实际的音频采样数据。这个部分的大小取决于录音的长度和质量。每个采样点的数据通常以小端格式存储(在x86架构的计算机上)。

4.2WAV文件的标准块结构

  • RIFF Header: RIFF[大小]WAVE
  • Format Chunk: fmt [大小][格式类型][通道数][采样率][字节率][块对齐][位深度]
  • Data Chunk: data[大小][音频采样数据]

4.3WAV的使用场景

WAV格式由于其无损的特性,广泛用于:

  • 专业音频录制与编辑:在音乐制作和广播中,WAV格式因为其高保真度而被频繁使用。
  • 音频分析:科研和工程应用中,需要对原始音频数据进行精确分析时,通常会使用WAV格式。
  • 系统音效:在Windows操作系统中,系统音效通常以WAV格式存储。

5.PCM与WAV的关系

  • PCM 是音频数据编码的一种方式,而WAV 是一种文件格式,通常用来存储PCM编码的音频数据。
  • WAV 文件通常包含PCM数据,但WAV格式的灵活性也允许它包含压缩音频,如MP3编码的音频。然而,在实际应用中,WAV文件大多数情况下确实是用来存储PCM数据。
  • 由于WAV文件包含详细的头信息(采样率、位深度、声道等),它们比原始的PCM数据文件更易于在不同的播放设备和程序之间移植和使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/17018.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

代码随想录算法训练营第三十八天 | 435.无重叠区间、763.划分字母区间、56.合并区间

目录 435.无重叠区间 思路 代码 763.划分字母区间 思路 代码 56.合并区间 思路 代码 今天的三道题目,都算是 重叠区间 问题,大家可以好好感受一下。 都属于那种看起来好复杂,但一看贪心解法,惊呼:这么巧妙&#xff01…

YOLOV8逐步分解(6)_模型训练初始设置之image size检测batch预设及dataloder初始化

yolov8逐步分解(1)--默认参数&超参配置文件加载 yolov8逐步分解(2)_DetectionTrainer类初始化过程 yolov8逐步分解(3)_trainer训练之模型加载 YOLOV8逐步分解(4)_模型的构建过程 YOLOV8逐步分解(5)_模型训练初始设置之混合精度训练AMP 接逐步分解…

OpenLayers6入门,OpenLayers实现在地图上拖拽编辑修改绘制图形

专栏目录: OpenLayers6入门教程汇总目录 前言 在前面一章中,我们已经学会了如何绘制基础的三种图形线段、圆形和多边形:《OpenLayers6入门,OpenLayers图形绘制功能,OpenLayers实现在地图上绘制线段、圆形和多边形》,那么本章将在此基础上实现图形的拖拽编辑功能,方便我…

使用Java 读取PDF表格数据并保存到TXT或Excel

目录 导入相关Java库 Java读取PDF表格数据并保存到TXT Java读取PDF表格数据并保存到Excel 在日常工作中,我们经常需要处理来自各种来源的数据。其中,PDF 文件是常见的数据来源之一。这类文件通常包含丰富的信息,其中可能包含重要的表格数据…

FreeRtos进阶——栈保存现场的几种场景

MCU架构 在认识栈的结构前,我们先来认识以下单片机的简单架构。在我们的CPU中有着很重要的一个模块——寄存器(R0-R15),其中R13,R14,R15的别称分别为SP栈顶指针、LR返回地址、PC当前指令地址。外部RAM是单片…

css中min-height

在CSS中&#xff0c;min-height 属性用于设置元素的最小高度。这意味着&#xff0c;即使内容没有达到指定的最小高度&#xff0c;元素也会尝试占据至少指定的最小高度。 例如&#xff0c;如果你有一个 <div> 元素&#xff0c;并希望它至少有200px的高度&#xff0c;即使…

Android Gradle plugin 版本和Gradle 版本

1.当看到这两个版本时&#xff0c;确实有点迷糊。但是他们是独立的&#xff0c;没有太大关联。 就是说在Android studio中看到的两个版本信息&#xff0c;并无太大关联&#xff0c;是相互独立的。Gradle插件版本决定了你的项目是如何构建的&#xff0c;而Gradle版本是执行构建…

对竞品分析的理解

一、竞品分析是什么 竞品分析即对竞争对手进行分析&#xff0c;是市场研究中的一项重要工作&#xff0c;它可以帮助企业了解竞争对手的产品、策略、市场表现等信息&#xff0c;通过竞品分析可以为自己的产品制定更加精准的策略。 二、为什么要做竞品分析 1.了解市场情况 了解…

002 访问修饰符 package

访问修饰符 在Java中&#xff0c;protected、private、public 和包级别访问权限&#xff08;有时称为default或package-private&#xff09;是用于控制类、变量、方法和构造器的可见性和可访问性的修饰符。下面是这些修饰符的主要区别&#xff1a; public&#xff1a; 可见性…

vue/core源码中ref源码的js化

起源&#xff1a; 当看见reactivity文件中的ref.ts文件长达五百多的ts代码后&#xff0c;突发奇想想看下转化成js有多少行。 进行转化&#xff1a; let shouldTrack true; // Define shouldTrack variable let activeEffect null; // Define activeEffect variable// 定义…

M2m中的采样

采样的完整代码 import torch import numpy as np from torchvision import datasets, transforms from torch.utils.data import DataLoader, WeightedRandomSampler, SubsetRandomSamplerdef get_oversampled_data(dataset, num_sample_per_class):""" Gener…

C语言从头学12——流程控制(一)

C语言程序的执行顺序是从前到后依次序执行的。如果想要控制程序执行的流程&#xff0c;就必须使用 流程控制的语法结构&#xff0c;分为条件执行和循环执行。 1、if语句 if 语句在前面的举例中曾经出现过&#xff0c;这里做详细介绍。该语句用于条件判断&#xff0c;满…

Upstream最新发布2024年汽车网络安全报告-百度网盘下载

Upstream最新发布2024年汽车网络安全报告-百度网盘下载 2024年2月7日&#xff0c;Upstream Security发布了2024年Upstream《GLOBAL AUTOMOTIVE CYBERSECURITY REPORT》。这份报告的第六版着重介绍了汽车网络安全的拐点&#xff1a;从实验性的黑客攻击发展到规模庞大的攻击&…

fpga系列 HDL 00 : 可编程逻辑器件原理

一次性可编程器件&#xff08;融保险丝实现&#xff09; 一次性可编程器件&#xff08;One-Time Programmable Device&#xff0c;简称 OTP&#xff09;是一种在制造后仅能编程一次的存储设备。OTP器件在编程后数据不可更改。这些器件在很多应用场景中具有独特的优势和用途。 …

【软件设计师】——10.面向对象技术

目录 10.1 基本概念 10.2设计原则 10.3 设计模式的概念与分类 10.4 创建型模式 10.4.1 Singleton 单例模式 10.4.2 Builder 构建器模式 10.4.3 Abstract Factory 抽象工厂模式 10.4.4 Prototype原型模式 10.4.5 Factory Method工厂方法模式 10.5 结构型模式 10.5.1 A…

【LeetCode算法】第83题:删除排序链表中的重复元素

目录 一、题目描述 二、初次解答 三、官方解法 四、总结 一、题目描述 二、初次解答 1. 思路&#xff1a;双指针法&#xff0c;只需遍历一遍。使用low指向前面的元素&#xff0c;high用于查找low后面与low不同内容的节点。将具有不同内容的节点链接在low后面&#xff0c;实…

【c++】菱形虚拟继承的虚函数表如何继承

请看如下代码 #include <iostream>// 基类 class Base { public:virtual void foo() { std::cout << "Base::foo()" << std::endl; }virtual void bar() { std::cout << "Base::bar()" << std::endl; } };// 虚拟继承的中间…

全栈:session用户会话信息,用户浏览记录实例

PHP中的session是一种存储机制&#xff0c;它允许您存储和跟踪用户在访问Web应用程序时的信息。会话通常用于存储用户特定的数据&#xff0c;如用户ID、购物车内容、用户偏好设置等&#xff0c;这些数据需要在多个页面请求之间保持不变。 session详解 1. 会话是如何工作的 会…

西门子S7-1200加入MRP 环网用法

MRP&#xff08;介质冗余&#xff09;功能概述 SIMATIC 设备采用标准的冗余机制为 MRP&#xff08;介质冗余协议&#xff09;&#xff0c;符合 IEC62439-2 标准&#xff0c;典型重新组态时间为 200ms&#xff0c;每个环网最多支持 50个设备。​博途TIA/WINCC社区VX群 ​博途T…

Linux 批量网络远程PXE

一、搭建PXE远程安装服务器 1、yum -y install tftp-server xinetd #安装tftp服务 2、修改vim /etc/xinetd.d/tftpTFTP服务的配置文件 systemctl start tftp systemctl start xinetd 3、yum -y install dhcp #---安装服务 cp /usr/share/doc/dhc…