深入探索 AAC 编码原理与 ADTS 格式:音频世界的智慧结晶
在数字音频的广阔领域中,AAC 编码及其相关的 ADTS 格式扮演着至关重要的角色。无论是在我们日常使用的音乐 APP,还是高清视频中的音频部分,都能看到它们的身影。今天,就让我们深入探索 AAC 编码原理与 ADTS 格式的奥秘,揭开它们高效处理音频数据的神秘面纱。
一、走进 AAC 编码
(一)AAC 编码的诞生背景
随着数字音频技术的不断发展,人们对音频质量和文件大小的要求越来越高。传统的 MP3 编码在一定程度上已经无法满足这些需求,于是,AAC(Advanced Audio Coding,高级音频编码)应运而生。它是由 Fraunhofer IIS、杜比实验室、索尼等公司共同开发的一种音频编码标准,旨在提供更高质量的音频压缩,同时减小文件体积。可以说,AAC 编码就像是音频领域的新一代 “工匠”,用更精湛的技艺打造出既节省空间又保证音质的音频作品。
(二)AAC 编码特点
1.感知编码技术:AAC 编码的核心基于感知编码技术,这是一种模仿人类听觉系统特性的编码方式。人类听觉系统有一个有趣的特性 —— 掩蔽效应。简单来说,当一个强音和一个弱音同时存在时,弱音可能会被强音 “掩盖”,我们的耳朵就难以察觉到弱音的存在。AAC 编码巧妙地利用了这一特性,通过分析音频信号的频率、幅度等信息,将那些被掩蔽的音频成分去除,从而在不影响听觉体验的前提下,大大减小了音频数据量。这就好比在一幅复杂的画作中,巧妙地隐藏一些不影响整体视觉效果的细节,使画作既保持美观又占用更少的存储空间。
虚线为人耳能察觉的声压阈值,当环境中存在强音掩蔽音是,声压阈值随之提高(蓝色曲线),而低于这个掩蔽阈值而高于虚线的声音会被岩壁音掩盖。
2.多声道支持:在当今的音频应用中,多声道音频越来越普及,比如常见的 5.1 声道、7.1 声道等。AAC 编码对多声道音频提供了良好的支持。它能够有效地对多个声道的音频数据进行编码,在保证各个声道声音质量的同时,合理地压缩数据。以家庭影院系统为例,AAC 编码可以将不同声道的声音,如前方的主声道、后方的环绕声道等,精确地编码并传输,让我们在家中就能享受到身临其境的音频体验。
3.灵活的采样率和比特率:AAC 编码支持多种采样率和比特率设置。采样率决定了音频信号在单位时间内的采样点数,比特率则表示单位时间内传输的音频数据量。通过灵活调整这两个参数,AAC 可以适应不同的应用场景和网络环境。比如在网络带宽有限的情况下,可以选择较低的采样率和比特率,保证音频能够流畅传输;而在对音质要求较高的音乐制作场景中,则可以选择较高的采样率和比特率,以获得更出色的音质。这就像一个可以根据不同路况调整速度的智能汽车,总能找到最合适的行驶方式。
(三)AAC编码深度解析
此部分内容参考音视频编解码——音频编解码格式AAC(Advanced Audio Coding)
编码流程:
-
音频分帧:AAC 编码的第一步,是将连续的音频信号进行巧妙 “切割”,这就是音频分帧。想象一下,音频信号是一条源源不断流淌的声音长河,为了更好地处理它,我们需要把它切成一段段固定长度的 “小片段”,这每一段就叫做一帧。通常情况下,每帧会包含几十毫秒的音频数据,这个长度是经过精心挑选的。如果帧太长,处理起来计算量太大;如果帧太短,又会丢失音频的连贯性。这就好比把一长卷电影胶片切成一段段合适长度的小胶片,每一段都能独立又完整地记录一小段精彩的画面。
-
窗函数应用:分好帧后,每个音频帧都要 “戴上” 一个特殊的 “滤镜”—— 窗函数。音频信号在时域中是连续变化的,当进行频谱分析时,如果直接处理,会出现频谱泄漏的问题,就像光线透过不完美的窗户发生散射一样,导致分析结果不准确。窗函数就像是一个温柔的 “整形工具”,它可以让音频帧的边缘变得平滑,减少频谱泄漏。不同类型的窗函数有着不同的 “整形效果”,常见的有汉宁窗、汉明窗等,AAC 会根据具体的应用场景选择合适的窗函数,让音频帧以最好的状态进入下一个处理环节。
-
频谱分析:经过窗函数 “温柔处理” 后的音频帧,接下来要开启一场神奇的 “频率之旅”—— 频谱分析。这一步通常借助快速傅里叶变换(FFT)来实现,FFT 就像是一把神奇的钥匙,能把时域的音频信号转换为频域表示。在时域中,我们看到的音频信号是随时间变化的波形,而在频域中,就像打开了一个神秘的频率宝藏箱,我们可以清楚地看到信号包含的不同频率成分及其强度。这就好比把一幅彩色画按照不同颜色的频率进行分解,每种颜色的频率就是音频信号中的一个频率成分,通过这种方式,AAC 能够更方便地分析和处理音频信号。
-
感知模型:基于人耳的感知特性,AAC 编码引入了感知模型,这是整个编码过程中最具智慧的环节之一。人耳有着独特的掩蔽效应,AAC 编码利用这个特性,对频谱进行掩蔽效应处理。它会像一个聪明的管理者,精准地识别出那些被强音掩盖的弱音区域,然后减少对这些掩盖区域的编码量,这样在不影响我们听觉体验的前提下,大大减小了音频数据量,实现了高效的压缩。
-
量化和编码:经过感知模型处理后,接下来要对频谱进行量化和编码。根据频谱中系数幅度的大小,合理地分配表示它们所需的比特数。对于那些幅度较小的系数,就像一些不太重要的小物件,用较少的比特来表示;而对于幅度较大的系数,如同重要的大物件,则用更多的比特表示。这样做的目的是在保证音频质量的同时,尽可能地减少数据量。但量化过程不可避免地会造成一些信息损失,就像用低分辨率去拍摄照片,会丢失一些细节,但 AAC 通过巧妙的算法,将这种损失控制在人耳难以察觉的范围内。
-
熵编码:量化后的音频数据,还能进一步压缩,这就要靠熵编码技术了,常见的如霍夫曼编码等。熵编码就像是一根神奇的魔法棒,它利用数据的统计特性,对出现概率高的符号用较短的编码表示,对出现概率低的符号用较长的编码表示。比如在一段音频数据中,如果某个量化值经常出现,就给它分配一个短编码;而很少出现的量化值,就用长编码。通过这种方式,进一步减少了数据量,让音频文件变得更小,同时又能保证在解码时准确还原数据。
-
打包和封装:经过前面一系列复杂的处理,压缩后的音频数据还需要进行最后的 “包装”—— 打包和封装。这一步就像是把整理好的物品整齐地装进一个包装盒里,同时附上详细的清单和标识。AAC 编码会把这些压缩后的音频数据打包为 AAC 格式的数据流,并且添加音频元数据,比如采样率、声道数等重要信息,以及同步信息,这些信息就像是包装盒上的标签和说明书,方便接收设备准确地解析和播放音频数据。
二、认识 ADTS 格式
在打包和封装后,AAC会把编码后的音频数据集存成ADIF格式或ADTS格式,ADIF格式的解码必须在明确定义的开始处进⾏。故这种格式常⽤在磁盘⽂件中。而ADTS这种格式的特征是它是⼀个有同步字的⽐特流,解码可以在这个流中任何位置开始。它的特征类似于mp3数据流格式。由于⽬前⼀般编码后的和抽取出的都是 ADTS格式的⾳频流,所以我们着重介绍ADTS格式。
(一)ADTS 是什么
ADTS(Audio Data Transport Stream,音频数据传输流)是一种 AAC 音频数据的传输格式,它为 AAC 编码后的音频数据提供了一种结构化的封装方式。可以把 ADTS 格式想象成一个精美的包装盒,AAC 编码后的音频数据就像珍贵的礼物被装在这个盒子里,方便在不同的设备和系统中传输和处理。ADTS 格式定义了音频数据的帧结构、同步信息、错误检测等内容,确保音频数据能够准确无误地被接收和播放。
(二)ADTS 的帧结构
-
ADTS 头:ADTS 头是 ADTS 帧的重要组成部分,它包含了许多关键信息。ADTS 头的长度一般为 7 或 9 个字节(取决于是否包含 CRC 校验字段),就像一个小而强大的 “指挥中心”。在这个 “指挥中心” 里,有采样率索引,它告诉接收设备音频数据的采样率是多少;还有声道配置信息,让设备知道这是单声道、立体声还是多声道音频;另外,帧长度字段则明确了整个 ADTS 帧的长度,方便接收设备准确地解析数据。
-
AAC 音频数据:在 ADTS 头之后,就是经过 AAC 编码的音频数据了。这些数据按照一定的规则排列,是我们最终听到的声音的数字体现。不同的 AAC 编码配置,会导致音频数据的结构和内容有所不同,但都被有序地封装在 ADTS 帧中。
adts_fixed_header()大小28bits,具体内容包括
- syncword :同步头 总是0xFFF, all bits must be 1,代表着⼀个ADTS帧的开始
- ID:MPEG标识符,0标识MPEG-4,1标识MPEG-2
- Layer:always: '00'
- protection_absent:表示是否误码校验。注意,这一位为1那么没有CRC校验字段,那么ADTS 头为7字节,如果这意味为0,那么有CRC校验字段,那么ADTS 头为9字节.
- CRC and 0 if there is CRC
- profile:表示使⽤哪个级别的AAC,如01 Low Complexity(LC)--- AAC LC,有些芯⽚只⽀持AAC LC
- sampling_frequency_index:表示使⽤的采样率下标,通过这个下标在Sampling Frequencies数组中查找得知采样率的值。
- channel_configuration: 表示声道数,⽐如2表示⽴体声双声道
固定头信息中的数据每⼀帧都相同
adts_variable_header()大小28bits,具体内容包括
- aac_frame_length : ⼀个ADTS帧的⻓度包括ADTS头和AAC原始流.
- adts_buffer_fullness:0x7FF 说明是码率可变的码流。
- number_of_raw_data_blocks_in_frame:表示ADTS帧中存在了number_of_raw_data_blocks_in_frame + 1个AAC原始帧。 所以说number_of_raw_data_blocks_in_frame == 0 表示说ADTS帧中有⼀个 AAC数据块。
可变头信息中的数据每⼀帧可能不同
(三)ADTS 格式的优势
-
同步性好:ADTS 格式具有良好的同步性。它的帧结构中包含了同步字,接收设备可以通过检测同步字快速找到 ADTS 帧的起始位置,实现音频数据的准确同步。这就好比在一场接力比赛中,每个运动员都能准确地找到交接棒的位置,保证比赛的顺利进行。在实时音频传输场景中,如网络直播、语音通话等,这种良好的同步性尤为重要,能够确保声音的连贯和稳定。
-
错误检测与纠正:ADTS 格式支持错误检测和部分纠正功能。通过 CRC(循环冗余校验)字段,接收设备可以检测到数据在传输过程中是否发生错误。如果发现错误,虽然不能完全纠正,但可以采取相应的措施,如丢弃错误帧,避免错误数据对音频播放质量的影响。这就像给音频数据穿上了一层 “防护衣”,在一定程度上保证了音频的质量。
三、AAC 编码与 ADTS 格式的应用场景
(一)在线音乐平台
如今,我们常用的在线音乐平台,如 QQ 音乐、网易云音乐等,大多采用 AAC 编码结合 ADTS 格式来存储和传输音乐文件。这样做的好处显而易见,一方面,AAC 编码可以在保证音质的前提下,减小音乐文件的大小,节省用户的流量和设备存储空间;另一方面,ADTS 格式的良好同步性和错误检测功能,确保了音乐在网络传输过程中的稳定性,让用户能够流畅地播放音乐,享受高品质的听觉盛宴。
(二)视频媒体
在视频领域,无论是电影、电视剧,还是各种短视频平台,AAC 编码和 ADTS 格式也被广泛应用。高清视频往往伴随着高质量的音频,AAC 编码的多声道支持和优秀的音质表现,能够完美地配合视频画面,为观众带来沉浸式的视听体验。而 ADTS 格式的结构化封装,使得音频数据能够与视频数据准确同步,避免了声画不同步的问题。例如,在观看高清电影时,我们能清晰地听到从各个方向传来的声音,仿佛置身于电影场景之中,这都离不开 AAC 编码和 ADTS 格式的功劳。
(三)移动设备音频应用
在移动设备上,如手机、平板电脑等,资源相对有限,对音频文件的大小和播放效率有较高的要求。AAC 编码的高效压缩特性和 ADTS 格式的简洁结构,使其成为移动设备音频应用的理想选择。无论是手机自带的音乐播放器,还是各种音频编辑 APP,都常常采用 AAC 编码和 ADTS 格式来处理音频数据,既能保证音频质量,又能适应移动设备的性能和存储限制。
四、AAC 编码与 ADTS 格式的发展展望
随着技术的不断进步,音频领域也在持续发展。未来,AAC 编码和 ADTS 格式有望进一步优化,以适应更高的音频质量需求和更复杂的应用场景。例如,在虚拟现实(VR)和增强现实(AR)领域,对音频的空间感和实时性要求极高,AAC 编码和 ADTS 格式可能会进一步提升多声道处理能力和同步性能,为用户创造更加逼真的音频环境。同时,随着 5G 网络的普及,网络带宽的提升为高质量音频传输提供了更广阔的空间,AAC 编码和 ADTS 格式也可能会利用这一优势,进一步提高音频的码率和音质,为我们带来更加卓越的音频体验。
AAC 编码原理和 ADTS 格式是数字音频技术的重要成果,它们在众多领域的广泛应用,极大地丰富了我们的数字生活。通过深入了解它们的原理、格式和应用,我们能够更好地欣赏和利用数字音频资源,也能为相关技术的进一步发展贡献自己的智慧。希望这篇文章能让你对 AAC 编码原理和 ADTS 格式有更深入的认识,在数字音频的世界里探索更多的精彩。
相关文章:
深入探索 AAC 编码原理与 ADTS 格式:音频世界的智慧结晶
在数字音频的广阔领域中,AAC 编码及其相关的 ADTS 格式扮演着至关重要的角色。无论是在我们日常使用的音乐 APP,还是高清视频中的音频部分,都能看到它们的身影。今天,就让我们深入探索 AAC 编码原理与 ADTS 格式的奥秘,…...
深度学习核心架构:探明四种基础神经网络
摘要 本文对多层感知机(MLP)、卷积神经网络(CNN)、循环神经网络(RNN)和注意力机制等深度学习核心架构的内部运作机制进行可视化分析。通过展示参数学习过程、激活映射和注意力分布等关键特征,揭示了"黑箱"模型的内部工作原理,为模型可解释性研…...
解析机器人 2.0.2 | 支持超过50种短视频平台的链接解析,无水印提取,多功能下载工具
解析机器人是一款功能强大的工具软件,登录即可解锁会员特权。它支持超过50种短视频平台的链接解析,包括抖音、快手、西瓜、bilibili等,并能实现无水印提取。此外,还提供P2P下载、磁力链等多种下载方式,确保用户能够快速…...
【漫话机器学习系列】237. TSS总平方和
深度理解 TSS(总平方和):公式、意义与应用 在机器学习与统计建模领域,评价模型好坏的重要指标之一就是方差与误差分析。其中,TSS(Total Sum of Squares,总平方和)扮演着非常关键的角…...
flutter3.29 build.gradle.kts设置安卓签名
1、在android目录下创建key.properties文件 storePassword密码 keyPassword密码 keyAlias别名 storeFilejks文件完整路径 2、修改android/app/build.gradle.kts 顶部插入import java.util.Properties import java.io.FileInputStreamval keystoreProperties Properties() v…...
<servlet-class>和</url-pattern>的作用
在 SpringMVC 的 web.xml 配置中,<servlet-class> 和 <url-pattern> 是两个关键配置项,分别用于指定处理请求的 Servlet 类和定义该 Servlet 拦截的请求路径规则。以下是它们的具体作用及原理分析: 一、<servlet-class> 的…...
linux部署的mysql数据库修改表名为小写配置
背景: 使用ruoyi-flowable框架初始化流程表结构时, 执行的sql语句创建的表名是大写。但mysql执行sql时大小写是敏感的 删除大写表 处理配置 使用mysql 8.0.41配置表名大小写敏感配置,需要初始化数据库 在MySQL 8.0及以上版本中,lower_case_table_names参…...
【Hot 100】94. 二叉树的中序遍历
目录 引言二叉树的中序遍历我的解题代码优化更清晰的表述建议: 🙋♂️ 作者:海码007📜 专栏:算法专栏💥 标题:【Hot 100】94. 二叉树的中序遍历❣️ 寄语:书到用时方恨少ÿ…...
基于D-Mixer与TransXNet的YOLOv8改进—融合全局-局部特征与空间降维注意力机制的CNN-ViT混合架构
随着目标检测任务对精度与效率要求的不断提升,传统的卷积神经网络(CNN)在建模长程依赖和复杂语义关系方面逐渐暴露出其局限性。而视觉Transformer(ViT)虽然在全局信息建模上表现优异,却因计算开销大、局部细节感知能力不足,在实时检测任务中难以直接部署。本文提出一种面向Y…...
《算法导论(第4版)》阅读笔记:p2-p3
《算法导论(第4版)》学习第 2 天,p2-p3 总结,总计 2 页。 一、技术总结 无。 二、英语总结(生词:1) 1.incremental (1) increase: in-(“in”) crescere “to grow” (2)increment (3)incremental: increment -al adj. incremental…...
基于Qlearning强化学习的电梯群控系统高效调度策略matlab仿真
目录 1.算法仿真效果 2.算法涉及理论知识概要 2.1 Q-learning强化学习原理 2.2 基于Q-learning的电梯群控系统建模 3.MATLAB核心程序 4.完整算法代码文件获得 1.算法仿真效果 matlab2022a仿真结果如下(完整代码运行后无水印): 仿真操作…...
嵌入式硬件篇---STM32F103C8T6STM32F103RCT6
文章目录 前言一、相同点内核与主频基础外设开发环境 二、不同点1. 存储容量2. 外设资源3. 封装与引脚 三、代码移植注意事项1. 内存与 Flash 限制Flash差异RAM调整 2. 外设差异外设缺失:GPIO 映射: 3. 中断向量表中断向量偏移 4. 时钟与总线配置APB分频…...
rhce第二次作业
任务目标 1.配置ssh实现A,B主机互相免密登录 2.配置nginx服务,通过多ip区分多网站 任务一 关闭防火墙 [rootlocalhost ~]# setenforce 0 [rootlocalhost ~]# systemctl stop firewalld.service A主机免密登录B主机 ### A主机生成密钥 [rootlocalh…...
Linux第20节 --- inode和文件系统
一、没有被打开的文件 如果一个文件没有被打开,那么该文件存储在哪里? 该文件是存储在磁盘当中的! 文件 文件内容 文件属性! 文件的内容是按照数据块存储的;文件的属性其实就是inode(是一个128字节的…...
LeetCode - 19.删除链表的倒数第N个结点
目录 题目 解法一 双指针算法 核心思想 执行流程 具体例子 代码 解法二 两次遍历法 核心思想 执行流程 具体例子 代码 题目 19. 删除链表的倒数第 N 个结点 - 力扣(LeetCode) 解法一 双指针算法 核心思想 利用双指针间隔固定距离(n1)&a…...
在 Ubuntu 上安装 cPanel
开始之前,请确保拥有一台 Ubuntu 服务器,推荐使用 Ubuntu 22.04 LTS。如果没有,可以查看免费服务器: 11个免费 VPS,够用一辈子了!(2025最新)Top 11 免费VPS推荐平台对比(…...
《Linux macOS :GCC升级方法》
GCC(GNU Compiler Collection)是广泛使用的编译器套件,升级到9以上版本可以获得更好的C17/20支持和性能优化。以下是不同Linux发行版和macOS的升级方法: Ubuntu/Debian 系统 添加工具链源 sudo apt update sudo apt install soft…...
C++ STL vector容器详解:从原理到实践
引言 亲爱的小伙伴们,今天我要和大家分享一个C编程中的"神器"——vector容器!作为STL(标准模板库)中最常用的容器之一,vector就像是一个"超级数组",既有数组的高效随机访问特性&#…...
[计算机网络]数据链路层
0 概论:数据链路层都干什么事,提供啥功能 比物理层再高一层就是数据链路层,咱们上一篇讲物理层,物理层直接接触传输介质,现在数据链路层是使用物理层的传输服务,然后实现更多的功能。物理层是只管把比特流…...
基于 vue-flow 实现可视化流程图
vue-flow 是一个基于 Vue.js 的强大且灵活的可视化流程图库,它允许开发者轻松创建交互式的流程图、工作流图、节点图等。 主要特点 易于使用 :提供了简洁的 API 和组件,开发者可以快速上手并创建复杂的流程图。高度可定制 :支持…...
【网络编程】HTTP(超文本传输协议)详解
🦄个人主页:修修修也 🎏所属专栏:网络编程 ⚙️操作环境:Visual Studio 2022 目录 📌HTTP定义 📌HTTP工作原理 1.客户端发起请求: 2.服务器处理请求: 3.客户端处理响应: 📌HTTP关键特性 🎏HTTP请求方法 &am…...
NuttX 与 PX4 系统开发全流程详解
NuttX 与 PX4 系统开发全流程详解 目录 1. NuttX 构建与使用2. NuttX 启动流程解析3. BootLoader 源码分析4. GPIO 驱动机制5. I2C 驱动分析6. PX4 系统架构简析7. uORB 消息机制8. PX4 应用开发示例9. 串口及 GPS 驱动解析10. MAVLink 协议与 PX4 交互 1. NuttX 构建与使用 …...
【Mytais系列】Myatis的设计模式
目录 设计模式 1. 工厂模式(Factory Pattern) 2. 建造者模式(Builder Pattern) 3. 动态代理模式(Dynamic Proxy Pattern) 4. 模板方法模式(Template Method Pattern) 5. 策略模…...
Linux:进程优先级及环境
一:孤儿进程 在Linux系统中,当一个进程创建了子进程后,如果父进程执行完毕或者提前退出而子进程还在运行,那么子进程就会成为孤儿进程。子进程就会被systemd(系统)进程收养,其pid为1 myproces…...
网络编程初识
注:此博文为本人学习过程中的笔记 1.socket api 这是操作系统提供的一组api,由传输层向应用层提供。 2.传输层的两个核心协议 传输层的两个核心协议分别是TCP协议和UDP协议,它们的差别非常大,编写代码的风格也不同,…...
疾病传播模拟 ——python实操
1、需求 疾病传播模拟 定义一个Infection类,包含初始感染人数、每日感染率等属性,以及一个simulate_spread方法用于模拟疾病传播过程。 使用numpy随机生成初始感染人数(范围1-100)和每日感染率(范围0.01-0.1)。 创建Infection对象,模拟10天的疾病传播过程,每天计算感染…...
用docker ffmpeg测试视频vmaf分数,很快不用编译
之前测试vmaf要自己编译libvmaf,自己编译ffmpeg,巨麻烦,或者用老旧不再维护的docker仓库,最近在docker hub上发现了编译了libvmaf的ffmpeg的docker,而且镜像很小,适合直接运行。 # dest.mp4 评分视频&…...
【浅学】Windows下ffmpeg+nginx+flv将本地视频推流在本地搭建的Web前端页面中播放,超详细步骤
Nginx安装和配置 下载nginx-1.19.3-http-flv 模块预编译包并解压放在d盘,路径就跟安装步骤里说的一样(如下图),不然会有其他问题出现。 打开conf/nginx.conf,查看RTMP和http相关的配置,确认端口号和路由名称 ffpemg推流视频…...
SQL笔记——左连接、右连接、内连接
前言:总是忘记表连接的区别,在面试的时候也容易被问到,因此就好记性不如烂笔头吧 集合运算 有并集、交集、差集 联合查询*(针对行合并的)* union为关键字,就是将两个select的结果求并集(此时重…...
iOS启动优化:从原理到实践
前言 在iOS应用开发中,启动速度是影响用户体验的重要因素之一。研究表明,启动时间每增加1秒,用户留存率就会下降约7%。本文将深入探讨iOS启动优化的各个方面,从底层原理到具体实践,帮助开发者打造更快的应用启动体验。…...
202553-sql
目录 一、196. 删除重复的电子邮箱 - 力扣(LeetCode) 二、602. 好友申请 II :谁有最多的好友 - 力扣(LeetCode) 三、176. 第二高的薪水 - 力扣(LeetCode) 一、196. 删除重复的电子邮箱 - 力扣…...
Socket-TCP
在TCP/ip协议中,用源IP、源端口号、目的IP、目的端口号、协议号这样一个五元组来标识一个通信! 端口号范围划分 0 - 1023: 知名端口号,HTTP,FTP,SSH 等这些广为使用的应用层协议,他们的端口号都是固定的。…...
BOSS的收入 - 华为OD机试(A卷,C++题解)
华为OD机试题库《C》限时优惠 9.9 华为OD机试题库《Python》限时优惠 9.9 华为OD机试题库《JavaScript》限时优惠 9.9 代码不懂有疑问欢迎留言或私我们的VX:code5bug。 题目描述 一个 XX 产品行销总公司,只有一个 boss,其有若干一级分销&…...
神经网络的基本概念与深度解析——基于生物机制的仿生建模与工程实现
广义上讲,神经网络是泛指生物神经网络与人工神经网络这两个方面。所谓生物神经网络是指由中枢神经系统(脑和脊髓)及周围神经系统(感觉神经、运动神经、交感神经、副交感神经等)所构成的错综复杂的神经网络,…...
JavaScript基础-运算符优先级
在JavaScript编程中,理解运算符的优先级是编写正确且高效代码的关键之一。当一个表达式包含多个运算符时,JavaScript会根据运算符的优先级来决定执行顺序。如果不了解这些规则,可能会导致意外的结果。本文将详细介绍JavaScript中的运算符优先…...
【RocketMQ NameServer】- NameServer 启动源码
文章目录 1. 前言2. RocketMQ 通信架构3. NameServer 启动流程3.1 创建 NameServerController3.2 启动 NameServerController3.3 NamesrvController#initialize3.3.1 Netty 通信的整体流程3.3.2 创建 NettyRemotingServer 3.4 this.remotingServer.start()3.4.1 this.remotingS…...
Learning vtkjs之WindowedSincPolyDataFilter
过滤器 模型简化(光滑处理) 介绍 像是对模型进行特征信息的简化(光滑处理) 效果 核心代码 主要流程 const fullScreenRenderer vtkFullScreenRenderWindow.newInstance({background: [0, 0, 0],rootContainer: vtkContainerR…...
C++ - 数据容器之 forward_list(创建与初始化、元素访问、容量判断、元素遍历、添加元素、删除元素)
一、创建与初始化 引入 <forward_list> 并使用 std 命名空间 #include <forward_list>using namespace std;创建一个空 forward_list forward_list<int> fl;创建一个包含 5 个元素,每个元素初始化为 0 的 forward_list forward_list<int&g…...
ES6/ES11知识点
ES 全称ECMAScript ,是脚本语言的规范,javascript是ES的一种实现。 作用域链 在 JavaScript 中,作用域链是一个非常重要的概念,它决定了变量和函数的访问顺序。掌握作用域链有助于深入理解执行上下文、闭包和变量查找等概念。 …...
力扣面试150题--二叉树的最大深度
Day 40 题目描述 做法 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right…...
360驱动大师v2.0(含网卡版)驱动工具软件下载及安装教程
1.软件名称:360驱动大师 2.软件版本:2.0 3.软件大小:218 MB 4.安装环境:win7/win10/win11 5.下载地址: https://www.kdocs.cn/l/cdZMwizD2ZL1?RL1MvMTM%3D 提示:先转存后下载,防止资源丢失&…...
Excel-CLI:终端中的轻量级Excel查看器
在数据驱动的今天,Excel 文件处理成为了我们日常工作中不可或缺的一部分。然而,频繁地在图形界面与命令行界面之间切换,不仅效率低下,而且容易出错。现在,有了 Excel-CLI,一款运行在终端中的轻量级Excel查看…...
AI Agent开发第48课-DIFY中利用AI动态判断下一步流程-DIFY调用API、REDIS、LLM
开篇 之前我们在《AI Agent开发第47课-DIFY处理多步流程慢?你确认用对了?》中讲述了DIFY的设计中在整合多步LLM时如避免过多调用LLM的良好设计,并给出了AI工作流的相应设计手法。今天我们要在上一篇的基础上把“上门维修预约”这个流程进一步按照实际业务需求加入用户在整个…...
C# 操作符
C# 操作符 一、操作符概览二、优先级与运算顺序三、各类操作符的实例 一、操作符概览 操作符(运算符)的本质是函数的简记法 操作符不能脱离与它关联的数据类型 int x 5; int y 4; int z x / y; Console.WriteLine(z);//输出1double a 5.0; double b…...
python下载
一、下载python和IDIE 1.进入python官网 加载可能有点慢,因为是国外网站 下载 点击Downloads按钮,选择版本下载。 安装 勾选两个多选框,点击Install Now安装完成,进入开始菜单,多出一个Python xxx.xxx文件夹&…...
tp5 php获取农历年月日干支甲午
# 切换为国内镜像源 composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/# 再次尝试安装 composer require overtrue/chinese-calendar核心写法一个农历转公历,一个公历转农历 农历闰月可能被错误标记(例如 闰四月 应表示…...
MySQL安装完全指南:从零开始到配置优化(附避坑指南)
🔥 前言:为什么你总是装不好MySQL? (实话实说)每次看到新手在MySQL安装环节疯狂踩坑,老司机都忍不住想摔键盘!明明官网下载的安装包,怎么就会报错呢?为什么别人的环境变…...
5.3刷题
P3370 【模板】字符串哈希 #include<bits/stdc.h> using namespace std; #define int long long typedef unsigned long long ull; int n; ull myhash(string s){ull code 0, x 131, y 140814840257324663;for(int i 0; i < s.size(); i){code (code * x (ull)…...
KeyPresser 一款自动化按键工具
1. 简介 KeyPresser 是一款自动化按键工具,它可以与窗口交互,并支持后台运行, 无需保持被控窗口在前台运行。用户可以选择要操作的目标窗口,并通过勾选复选框来控制要发送哪些按键消息。可以从组合框中选择所需的按键,并在编辑框中输入时间间隔以控制按键发送之间的延迟。程…...
# LeetCode 1007 行相等的最少多米诺旋转
LeetCode 1007 行相等的最少多米诺旋转 原题英文:Minimum Domino Rotations For Equal Row 难度:中等 | 标签:数组、贪心 1 题目重述 给定两行长度相同的多米诺骨牌: tops[i] 表示第 i 张骨牌上面的数字;bottoms[…...