音频PCM介绍与运用
音频PCM介绍与运用
什么是PCM
PCM (Pulse Code Modulation) 是一种数字音频编码方式,将模拟声音信号转换为数字信号的过程。在 PCM 中,声音信号被采样并量化为离散的数值,以便于数字化处理和传输。
以下是 PCM 的主要特点:
-
采样:模拟声音信号会以固定的时间间隔进行采样,并将每个采样点的振幅值记录下来。
-
量化:采样得到的连续信号会通过量化器转换成离散数值。量化过程中,会将每个采样点的振幅值映射为一个对应的数字值。
-
编码:最后,这些数字化的采样点按照特定规则编码成二进制数据,形成 PCM 数据流。
在 PCM 编码中,需要考虑以下几个关键参数:
-
采样率(Sample Rate):表示每秒钟采集多少次声音信号的采样值,常用单位是 Hz(赫兹)。
-
位深度(Bit Depth):表示每个采样点的量化级别,即采样点能够表示的幅度范围。通常以比特(bit)为单位,如 16 位、24 位等。
-
声道数(Channels):指音频中使用的独立声道数量,可以是单声道(Mono)或双声道(Stereo)等。
PCM 是一种常见且基础的音频编码方式,在数字音频领域被广泛应用,如 CD 音频、无损音频格式等。PCM 格式的音频文件保留了原始音频的所有信息,不经过任何压缩处理,因此具有较高的音质和可靠性。
FFmpeg 解码 PCM
要使用 FFmpeg 解码 PCM 格式的音频文件,你可以通过以下命令行示例来实现:
ffmpeg -f s16le -ar 44100 -ac 2 -i input.pcm output.wav
解释:
-f s16le: 指定输入文件的格式为 signed 16-bit little-endian PCM。-ar 44100: 设置采样率为 44100 Hz。-ac 2: 设置声道数为 2(双声道立体声)。input.pcm: 输入的 PCM 格式音频文件。output.wav: 输出的 WAV 格式音频文件。
这个示例将 PCM 格式的音频文件解码为 WAV 格式的音频文件。你可以根据需要调整采样率、声道数以及输入输出文件名等参数。记得确保你已经安装了 FFmpeg,以便能够在命令行中运行该命令。
FFmpeg 播放PCM
要使用 FFmpeg 播放 PCM 格式的音频文件 input.pcm,你可以通过以下命令行示例来实现:
ffplay -f s16le -ar 44100 -ac 2 input.pcm
解释:
-f s16le: 指定输入文件的格式为 signed 16-bit little-endian PCM。-ar 44100: 设置采样率为 44100 Hz。-ac 2: 设置声道数为 2(双声道立体声)。input.pcm: 要播放的 PCM 格式音频文件。
这个命令会用 FFmpeg 的 ffplay 工具来播放指定的 PCM 格式音频文件。确保已经安装了 FFmpeg,并且在命令行中运行该命令。播放音频时,你应该能够听到 PCM 格式音频文件的声音输出。
PCM 音频变调和变速处理的第三方库:
SoundTouch:
优点:
- 高质量处理:提供高品质的音频时间拉伸、压缩和升降调功能。
- 易于集成:具有简单易用的接口,方便集成到项目中。
- 跨平台支持:适用于多个平台和编程语言。
缺点:
- 功能相对单一:主要专注于变速和变调处理,可能在其他音频处理方面功能较少。
Rubber Band Library:
优点:
- 高品质音频处理:提供高质量的实时变速和变调功能。
- 多格式支持:支持多种音频格式,包括 PCM 格式。
- 灵活定制:提供了丰富的参数调整选项,用户可以灵活定制处理效果。
缺点:
- 学习曲线:对于初学者来说,可能需要一定时间来掌握库的使用方法和参数设置。
- 复杂性:由于提供了较多的参数选项,可能需要花费一些时间来调整参数以获得理想的效果。
Aubio:
优点:
- 音频分析和处理:除了变调和变速功能外,还提供了音频特征提取和分析功能。
- 开源且跨平台:作为 Python 库,易于使用并可在多个平台上运行。
缺点:
- 功能有限:相较于专门的变调和变速库,Aubio 在这方面的功能可能相对简单。
- 性能问题:可能不如专门优化过的库在变速和变调处理上表现出色。
Superpowered Audio SDK:
优点:
- 强大的音频处理功能:提供广泛的音频处理功能,包括变速、变调、混音等。
- 适用于移动应用:在移动应用程序开发中得到广泛应用,具有良好的性能和稳定性。
缺点:
- 商业许可:需要购买商业许可才能使用所有功能。
- 学习成本:相对于某些开源库,可能需要支付额外的费用,并且需要熟悉 SDK 的使用方法。
相关文章:
音频PCM介绍与运用
音频PCM介绍与运用 什么是PCM PCM (Pulse Code Modulation) 是一种数字音频编码方式,将模拟声音信号转换为数字信号的过程。在 PCM 中,声音信号被采样并量化为离散的数值,以便于数字化处理和传输。 以下是 PCM 的主要特点: 采样…...
计算机专业大学四年应该如何规划(Java方向)
计算机专业的学生,如何在大学四年内提高自己的竞争力,毕业之后直接进大厂工作? 以下将从大学四年计算机专业的学习规划、课程设置、能力提升、参考书籍等方面,为同学们提供一些建议和指导。 大一: 主攻技能学习并且达…...
算法D27|回溯算法4| 93.复原IP地址 78.子集 90.子集II
93.复原IP地址 本期本来是很有难度的,不过 大家做完 分割回文串 之后,本题就容易很多了 题目链接/文章讲解:代码随想录 视频讲解:回溯算法如何分割字符串并判断是合法IP?| LeetCode:93.复原IP地址_哔哩哔…...
C++实现XOR加解器
#include <Windows.h> #include <iostream> #include <fstream> #include <string>// 加解密函数,使用XOR运算 void XORCrypt(char* data, int size, const std::string& key) {int keyLength key.length();for (int i 0; i < siz…...
Kubernetes的Sevice管理
服务原理: 所有服务都是根据这个服务衍生或者变化出来,根服务---- 服务感知后端靠标签 slelector 标签选择器 kubectl label pods web1 appweb kubectl cluter-info dump | grep -i service-cluster-ip-range 服务ip取值范围 Service 管理: 创建服务: --- kind: Serv…...
C# 高阶语法 —— Winfrom链接SQL数据库的存储过程
存储过程在应用程序端的使用的优点 1 如果sql语句直接写在客户端,以一个字符串的形式体现的,提示不友好,会导致效率降低 2 sql语句写在客户端,可以利用sql注入进行攻击,为了安全性,可以把sql封装在…...
vue3+vite+ts配置多个代理并解决报404问题
之前配置接口代理总是报404,明明接口地址是对的但还是报是因数写法不对;用了vue2中的写法 pathRewrite改为rewrite 根路径下创建env文件根据自己需要名命 .env.development文件内容 # just a flag ENVdevelopment# static前缀 VITE_APP_PUBLIC_PREFIX"" # 基础模块…...
开创未来:探索OpenAI首个AI视频模型Sora的前沿技术与影响
Sora - 探索AI视频模型的无限可能 随着人工智能技术的飞速发展,AI视频模型已成为科技领域的新热点。而在这个浪潮中,OpenAI推出的首个AI视频模型Sora,以其卓越的性能和前瞻性的技术,引领着AI视频领域的创新发展。让我们将一起探讨…...
Redis---持久化
Redis是内存数据库,是把数据存储在内存中的,但是内存中的数据不是持久的,如果想要做到持久,那么就需要让redis将数据存储到硬盘上。 Redis持久化有两种策略: RDB > Redis DataBase RDB机制采取的是定期备份AOF …...
从 Flask 切到 FastAPI 后,起飞了!
我这几天上手体验 FastAPI,感受到这个框架易用和方便。之前也使用过 Python 中的 Django 和 Flask 作为项目的框架。Django 说实话上手也方便,但是学习起来有点重量级框架的感觉,FastAPI 带给我的直观体验还是很轻便的,本文就会着…...
状态码转文字!!!(表格数字转文字)
1、应用场景:在我们的数据库表中经常会有status这个字段,这个字段经常表示此类商品的状态,例如:0->删除,1->上架,0->下架,等等。 2、我们返回给前端数据时,如果在页面显示0…...
Pytorch 复习总结 4
Pytorch 复习总结,仅供笔者使用,参考教材: 《动手学深度学习》Stanford University: Practical Machine Learning 本文主要内容为:Pytorch 深度学习计算。 本文先介绍了深度学习中自定义层和块的方法,然后介绍了一些…...
YOLOv9中加入SCConv模块!
专栏介绍:YOLOv9改进系列 | 包含深度学习最新创新,主力高效涨点!!! 一、本文介绍 本文将一步步演示如何在YOLOv9中添加 / 替换新模块,寻找模型上的创新! 适用检测目标: YOLOv9模块…...
代码随想录算法训练营第四十七天丨198. 打家劫舍、 213. 打家劫舍 II、337. 打家劫舍 III
198. 打家劫舍 自己的思路: 初始化两个dp数组,dp[i][0]表示不偷第i户,在0-i户可以偷到的最大金额,dp[i][1]表示偷i户在0-i户可以偷到的最大金额。 class Solution:def rob(self, nums: List[int]) -> int:n len(nums)dp […...
龙蜥Anolis 8.4 anck 安装mysql5.7
el8没有用mysql5.7了,镜像里是mysql8。 禁用 sudo dnf remove mysql sudo dnf module reset mysql sudo dnf module disable mysql 修改Yum源 sudo vi /etc/yum.repos.d/mysql-community.repo [mysql57-community] nameMySQL 5.7 Community Server baseurlhttp:…...
【踩坑】修复xrdp无法关闭Authentication Required验证窗口
转载请注明出处:小锋学长生活大爆炸[xfxuezhang.cn] 问题如下,时不时出现,有时还怎么都关不掉,很烦: 解决方法一:命令行输入 dbus-send --typemethod_call --destorg.gnome.Shell /org/gnome/Shell org.gn…...
python学习笔记 - 标准库常量
Python 中有一些内置的常量,它们是一些特殊的值,通常不会改变。以下是其中一些常见的内置常量及其详细解释以及使用示例: True: 表示布尔值真。给 True 赋值是非法的并会引发 SyntaxError。 x True print(x) # 输出:…...
视频和音频使用ffmpeg进行合并和分离(MP4)
1.下载ffmpeg 官网地址:https://ffmpeg.org/download.html 2.配置环境变量 此电脑右键点击 属性 - 高级系统配置 -高级 -环境变量 - 系统变量 path 新增 文件的bin路径 3.验证配置成功 ffmpeg -version 返回版本信息说明配置成功4.执行合并 ffmpeg -i 武家坡20…...
02| JVM堆中垃圾回收的大致过程
如果一直在创建对象,堆中年轻代中Eden区会逐渐放满,如果Eden放满,会触发minor GC回收,创建对象的时GC Roots,如果存在于里面的对象,则被视为非垃圾对象,不会被此次gc回收,就会被移入…...
R语言数据可视化之美专业图表绘制指南(增强版):第1章 R语言编程与绘图基础
第1章 R语言编程与绘图基础 目录 第1章 R语言编程与绘图基础前言1.1 学术图表的基本概念1.1.1 学术图表的基本作用1.1.2基本类别1.1.3 学术图表的绘制原则 1.2 你为什么要选择R1.3 安装 前言 这是我第一次在博客里展示学习中国作者的教材的笔记。我选择这本书的依据是作者同时…...
LeetCode 155. Min Stack 题解
LeetCode 155. Min Stack 题解 题目描述 设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初始化堆栈对象。void push(int val) 将元素 val 推入堆栈。void pop() 删除堆栈…...
全球仅7家获准接入奇点情感云API,2026大会现场开放首批200个测试配额(附申请通道与合规自检清单)
第一章:2026奇点智能技术大会:AI情感陪伴 2026奇点智能技术大会(https://ml-summit.org) 本届大会首次将“AI情感陪伴”设为独立主议题,聚焦大模型在共情建模、长期关系记忆、多模态情绪识别与伦理响应机制上的突破性进展。来自MIT Media L…...
RimWorld模组管理终极指南:RimSort免费开源工具完整教程
RimWorld模组管理终极指南:RimSort免费开源工具完整教程 【免费下载链接】RimSort RimSort is an open source mod manager for the video game RimWorld. There is support for Linux, Mac, and Windows, built from the ground up to be a reliable, community-ma…...
【路由原理与路由协议-RIP路由信息协议】
路由原理与路由协议-RIP路由信息协议一、概念二、防环机制一、概念 1.RIP是内部网关协议,属于距离矢量路由协议,核心思想就是:跳数越少,路径越好。 2.RIP用于自治系统内部,基于UDP,520端口传输,…...
生成式AI多语言支持实战手册(覆盖127种语系+低资源语言破局方案)
第一章:生成式AI多语言支持的战略价值与全景图 2026奇点智能技术大会(https://ml-summit.org) 全球化数字生态正加速演进,生成式AI的多语言能力已从技术可选项跃升为战略基础设施。企业若仅依赖英语单语模型部署,将错失超65%的新兴市场用户触…...
突破栅栏效应:Zoom-FFT算法原理详解与MATLAB实战
1. 什么是栅栏效应? 我第一次接触频谱分析时,遇到一个特别头疼的问题:明明信号里有两个很接近的频率成分,但FFT结果就是分不开。后来才知道这就是著名的"栅栏效应"——就像透过栅栏看风景,总有些细节被栅栏挡…...
从基础Agent到复杂工作流,LangGraph如何用状态机重构智能体开发
在人工智能应用快速落地的今天,智能体Agent已经成为连接大模型与实际业务的关键桥梁。从简单的问答交互,到复杂的内容创作、数据分析、多步骤任务处理,Agent正在不断拓展大模型的应用边界。早期我们借助LangChain搭建基础Agent时,…...
OpenPLC Editor C语言实战:在MP157 ARM板上实现自定义IO驱动与Modbus通信
1. OpenPLC Editor与MP157 ARM板开发环境搭建 第一次接触OpenPLC Editor时,我被它强大的跨平台特性惊艳到了。这个开源的PLC编程环境不仅支持传统的梯形图编程,还能在ST(结构化文本)环境中直接嵌入C语言代码,这对于需要…...
为了搜索引擎需要把302重定向修改为301
其实只是修改一个字就可以了:RedirectMatch 301 ^/(.*)$ https://weilaifh.store:10001/$1...
为什么选择rake:5个理由让Ruby构建工具成为你的首选
为什么选择rake:5个理由让Ruby构建工具成为你的首选 【免费下载链接】rake A make-like build utility for Ruby. 项目地址: https://gitcode.com/gh_mirrors/ra/rake rake作为一款类make的Ruby构建工具,凭借其简洁的语法和强大的功能,…...
