零基础入门多媒体音频(1)-音频基础
声音的本质是波动,波形图能直观体现声音的特征。我们常用于描述音频的属性有下面这些:
1.采样率:声音中每秒包含的采样点个数。
2.位宽:每个采样点需要多少个bit进行存储。
3.声道数:声音进行回放需要喇叭的个数。
4.频率:声波每秒中包含的周期数。
5.周期:声波两个波峰之间的时间差。
我们看到的波形图一般都是连续的,但在计算机中用于描述声音的是离散的点,连续的波形是通过对这些离散的点进行插值得到。这些点就是常说的采样点。
做音频领域的开发经常能看到PCM这个词。PCM指的是数据脉冲编码调制。具体定义可以从网络上获取,很好理解。一句话概括就是将模拟信号的声音直接编码成数字信号,最原始的音频数据。从软件角度看,PCM数据就是能直接进行播放的最基础的音频格式。与PCM格式相对应的是各种编码格式。包括DDP,DD,AAC,MP3,DTS,AVS3-P3.
当我们知道一段音频 PCM数据的数据量(bytes),声道数(channels),位宽(bitwidth),采样率(samplerate)时,
就可以计算出这段音频数据能播放多长时间。播放时长time = bytes / (bitwidth / 8) / samplerate / channels.
播放时长主要可以用于以下这两种场景:
1.判断数据发送端是否欠载:若数据发送端在时间time_real发送到数据接收端的音频PCM数据对应的时长time_data存在下面的情况时,则数据发送端发送数据不及时。time_real > time_data。
2.算法处理性能不足:若算法处理模块处理一段时长time_data的音频数据花费time_alg存在下面的情况时,则算法性能不足。time_alg > time_data。
我们不仅要知道播放时长的用途,还需要知道这背后的原理。播放一条特定的码流,硬件需要根据采样率,位宽,声道数进行配置,然后按照相应的速率进行数据的传输,转化。也就是硬件会在时长time内消耗掉bytes的数据量。为什么要按照这个速率处理呢?数据的录制媏就是按照这个进行数据录制的。如果播放媏数据输出太快,听到的声音就是加速播放的效果。反之,则是低速播放效果。因为硬件播放媏以恒定速度进行数据的处理,那么整个软件处理通路也必须保持相对稳定的数据处理速度。考虑到CPU调度的波动性,软件处理是不可能维持恒定处理速度。可以通过在不同处理节点增加缓存buffer进行抗抖动处理。(CPU调度不及时,则数据缓存至buffer。获得CPU调度时,则尽快消耗buffer里面的数据。在宏观层面上达到一个稳定的处理速度)
音频名词介绍:
merge:多路音频数据拼凑成一路音频数据,总数据量不变。
mix:多路音频数据混音成一路音频数据,总数据量减倍。
slot:一路TDM音频输出
BE:back end 一路硬件音频输出
FE:front end 一路软件音频输入
相关文章:
零基础入门多媒体音频(1)-音频基础
声音的本质是波动,波形图能直观体现声音的特征。我们常用于描述音频的属性有下面这些: 1.采样率:声音中每秒包含的采样点个数。 2.位宽:每个采样点需要多少个bit进行存储。 3.声道数:声音进行回放需要喇叭的个数。 4.频…...
40 道高频 C++ 面试、笔试题及答案
1. 什么是多态? 答案: 多态允许对象在运行时表现出不同的行为,具体取决于其类型。 2. 虚函数和纯虚函数之间的区别是什么? 答案: 虚函数可以被派生类重写,而纯虚函数必须被派生类实现,否则派生…...
【07】进阶html5
HTML5 包含两个部分的更新,分别是文档和web api 文档 HTML5 元素表 元素语义化 元素语义化是指每个 HTML 元素都代表着某种含义,在开发中应该根据元素含义选择元素 元素语义化的好处: 利于 SEO(搜索引擎优化)利于无障碍访问利于浏览器的插件分析网页新增元素 多媒体…...
Linux|centos7|postgresql数据库|yum和编译方式安装总结(全系版本)
一、 yum方式安装postgresql 这个是官方的yum源,包括postgresql的开发包,lib库什么的,很齐全,关键是包括pgbackrest yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-la…...
C++提高笔记(五)---STL容器(set/multiset、map/multimap)
1、set / multiset容器 1.1set基本概念 简介:所有元素都会在插入时自动被排序 本质:set和multiset属于关联式容器,底层结构是用二叉树实现 set和multiset区别: set不允许容器中有重复的元素 multiset允许容器中有重复的元素 …...
详解main函数参数argc、argv及如何传参
目录 1、main()函数参数 2、main函数如何传参 2.1 环境准备 2.2 通过 Powershell 窗口传参 2.3 通过vs界面传参 3、int main() 和 int main(int argc, char *argv[]) 特点 1、main()函数参数 在C语言中,main函数可以带参数。main函数的原型通常为以下两种形式…...
解释什么是Web组件化开发及其优势
解释什么是Web组件化开发及其优势 Web组件化开发,是一种将Web应用的界面和功能拆分为独立、可复用的组件的开发方法。这种方法的核心思想是将大型、复杂的Web应用拆分为一系列小型、功能单一的组件,每个组件都负责处理特定的业务逻辑或界面表现。通过组…...
那些场景需要额外注意线程安全问题
主要学习那些场景需要额外注意线程安全问题,在这里总结了四中场景。 访问共享变量或资源 第一种场景是访问共享变量或共享资源的时候,典型的场景有访问共享对象的属性,访问static静态变量,访问共享的缓存,等等。因为…...
(C语言)球球大作战
前言: 这款简易版的球球大作战是一款单人游戏,玩家需要控制一个小球在地图上移动,吞噬其他小球来增大自己的体积。本游戏使用C语言和easyx图形库编写,旨在帮助初学者了解游戏开发的基本概念和技巧。 在开始编写代码之前…...
高级数据结构 <AVL树>
本文已收录至《数据结构(C/C语言)》专栏! 作者:ARMCSKGT 目录 前言正文AVL树的性质AVL树的定义AVL树的插入函数左单旋右单旋右左双旋左右双旋 检验AVL树的合法性关于AVL树 最后 前言 前面我们学习了二叉树,普通的二叉树没有任何特殊性质&…...
在springboot中利用Redis实现延迟队列
文章目录 前言一、基本思路二、springboot实现案例三、测试总结 前言 在开发过程中,有很多场景都需要用到延迟队列来解决。目前支持延迟队列的中间件也不少,特别是基于JMS模式下的消息中间件基本上都支持延迟队列。但是有时我们项目规模可能比较小&…...
UpGrow评论:AI能将我的Instagram粉丝数增加10倍吗?
UpGrow Review: Can AI Grow My Instagram Followers 10X? 概述 UpGrow是一款专注于Instagram增长的AI驱动型社交媒体工具。它通过其庞大的300多人的网络,先进的定位功能,实时分析以及卓越的客户服务,帮助用户有机地增长Instagram关注者。…...
申请软著提交的演示视频有什么要求
申请软件著作权时,演示视频是一个重要的材料,主要用于展示软件的功能和操作流程。演示视频的要求可能会根据不同的申请机构和项目有所不同,但一般来说,以下是几个常见的要求: 内容完整性:演示视频需要展示…...
mac【启动elasticsearch报错:can not run elasticsearch as root
mac【启动elasticsearch报错:can not run elasticsearch as root 问题原因 es默认不能用root用户启动,生产环境建议为elasticsearch创建用户。 解决方案 为elaticsearch创建用户并赋予相应权限。 尝试了以下命令创建用户,adduser esh 和u…...
面试算法-65-二叉树的层平均值
题目 给定一个非空二叉树的根节点 root , 以数组的形式返回每一层节点的平均值。与实际答案相差 10-5 以内的答案可以被接受。 示例 1: 输入:root [3,9,20,null,null,15,7] 输出:[3.00000,14.50000,11.00000] 解释:第 0 层的…...
Linux: boot: latency启动延迟分析
https://elinux.org/images/6/64/Chris-simmonds-boot-time-elce-2017_0.pdf https://www.hcltech.com/sites/default/files/documents/resources/whitepaper/files/an_insight_to_optimize_embedded_linux_boot_time_performance.pdf 无意看到这个启动延迟分析,虽…...
QT界面制作
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);this->setWindowFlag(Qt::FramelessWindowHint);//接收动图QMovie *mv new QMovie(":/pictrue/th.gif…...
进阶二叉树
目录 二叉树 二叉搜索树 二叉搜索树的定义 二叉搜索树的操作 哈夫曼树 哈夫曼树的定义 哈夫曼树的构造 哈夫曼树的性质 平衡二叉树 平衡二叉树的定义: 平衡二叉树的插入调整 1.LL插入/LL旋转 2.RR插入/RR旋转 3.LR插入/LR旋转 4.RL插入/RL旋转 二叉树…...
无人机拦截
配置yolo CUDA报错 nvcc fatal : Unsupported gpu architecture compute_30.(1)查看显卡匹配型号:https://blog.csdn.net/u013308762/article/details/121658823 (2)查看显卡:nvidia-smi -a 》NVIDIA GeF…...
CSDN 编辑器设置图片缩放和居中
CSDN 编辑器设置图片缩放和居中 文章目录 CSDN 编辑器设置图片缩放和居中对齐方式比例缩放 对齐方式 Markdown 编辑器插入图片的代码格式为 CSDN 的 Markdown 编辑器中插入图片,默认都是左对齐,需要设置居中对齐的话,…...
web vue 项目 Docker化部署
Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage):…...
Caliper 配置文件解析:config.yaml
Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...
MySQL用户和授权
开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...
第7篇:中间件全链路监控与 SQL 性能分析实践
7.1 章节导读 在构建数据库中间件的过程中,可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中,必须做到: 🔍 追踪每一条 SQL 的生命周期(从入口到数据库执行)&#…...
苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会
在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...
tomcat指定使用的jdk版本
说明 有时候需要对tomcat配置指定的jdk版本号,此时,我们可以通过以下方式进行配置 设置方式 找到tomcat的bin目录中的setclasspath.bat。如果是linux系统则是setclasspath.sh set JAVA_HOMEC:\Program Files\Java\jdk8 set JRE_HOMEC:\Program Files…...
DiscuzX3.5发帖json api
参考文章:PHP实现独立Discuz站外发帖(直连操作数据库)_discuz 发帖api-CSDN博客 简单改造了一下,适配我自己的需求 有一个站点存在多个采集站,我想通过主站拿标题,采集站拿内容 使用到的sql如下 CREATE TABLE pre_forum_post_…...
vxe-table vue 表格复选框多选数据,实现快捷键 Shift 批量选择功能
vxe-table vue 表格复选框多选数据,实现快捷键 Shift 批量选择功能 查看官网:https://vxetable.cn 效果 代码 通过 checkbox-config.isShift 启用批量选中,启用后按住快捷键和鼠标批量选取 <template><div><vxe-grid v-bind"gri…...
十二、【ESP32全栈开发指南: IDF开发环境下cJSON使用】
一、JSON简介 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,具有以下核心特性: 完全独立于编程语言的文本格式易于人阅读和编写易于机器解析和生成基于ECMAScript标准子集 1.1 JSON语法规则 {"name"…...
【动态规划】B4336 [中山市赛 2023] 永别|普及+
B4336 [中山市赛 2023] 永别 题目描述 你做了一个梦,梦里有一个字符串,这个字符串无论正着读还是倒着读都是一样的,例如: a b c b a \tt abcba abcba 就符合这个条件。 但是你醒来时不记得梦中的字符串是什么,只记得…...
