语音合成之六端到端TTS模型的演进
端到端TTS模型的演进
- 引言
- Tacotron:奠基之作
- FastSpeech:解决效率瓶颈
- VITS:实现高保真和富有表现力的语音
- SparkTTS:利用LLM实现高效可控的TTS
- Cosyvoice:一种可扩展的多语种TTS方法
- 端到端TTS模型的演进与未来方向
引言
传统的TTS系统通常由多个独立阶段组成,例如文本分析前端、声学模型和音频合成模块 。构建这些组件往往需要大量的领域专业知识,并且各个模块之间的复杂依赖关系可能导致系统脆弱性增加 。这种复杂性以及对专业知识的依赖促使研究人员转向端到端TTS模型的开发 。
近年来,深度学习技术的飞速发展极大地推动了TTS领域的发展 。深度神经网络强大的建模能力使得端到端TTS系统能够直接从配对的文本和音频数据中学习复杂的映射关系,无需人工设计特征或复杂的中间步骤 。端到端模型通过简化TTS流程,降低了系统的复杂性以及对领域专业知识的需求 。
在追求高质量语音合成的同时,如何有效地训练模型并提高其推理效率,成为了端到端TTS系统发展过程中需要重点关注的问题。高质量的语音合成通常需要更复杂的模型和大量的训练数据,这可能会牺牲训练和推理的效率。反之,为了提高效率而采用的模型可能在语音的自然度和表现力方面有所妥协。因此,如何在生成质量和训练效率之间取得平衡,是端到端TTS模型研究的关键挑战。
Tacotron:奠基之作
Tacotron模型作为端到端TTS领域的开创性工作,为后续研究奠定了基础。最初的Tacotron(通常称为Tacotron 1)采用了编码器-解码器结构,并引入了注意力机制 。编码器部分负责将输入的字符序列转化为一系列隐藏表示 。注意力机制是Tacotron模型的一项关键创新,它使得解码器在生成每个音频帧时,能够自动地聚焦于输入文本序列的相关部分,从而学习文本特征与相应音频帧之间的对齐关系 。
解码器则基于编码器的输出和注意力机制提供的上下文信息,逐帧生成频谱图 。为了从生成的频谱图中合成最终的语音波形,Tacotron 1采用了Griffin-Lim算法 。Tacotron 1的后处理网络中使用了CBHG模块(卷积滤波器组、高速公路网络、双向GRU循环神经网络),该模块的设计灵感来源于机器翻译领域,能够有效地从序列中提取鲁棒的特征表示 。CBHG模块通过卷积滤波器捕获局部和上下文信息,并通过高速公路网络和双向GRU进一步提取高层序列特征。
Tacotron 2作为Tacotron 1的改进版本,在架构上进行了一些重要的调整 。Tacotron 2将编码器和解码器中的CBHG模块和门控循环单元(GRU)替换为更简单的卷积层和长短期记忆网络(LSTM) 。这种简化旨在减少模型的复杂性和参数数量,同时保持或提升性能。此外,Tacotron 2的目标输出从线性频谱图改为梅尔频谱图 。
梅尔频谱图在感知上更贴近人类听觉系统。为了生成更高质量的音频波形,Tacotron 2集成了WaveNet声码器(或者后来的WaveGlow) 。与Griffin-Lim算法相比,神经声码器能够合成更自然、更高保真度的语音。Tacotron 2还采用了位置敏感注意力机制,该机制在计算注意力权重时考虑了先前时间步的注意力对齐信息,从而提高了文本和语音之间的对齐质量 。与Tacotron 1不同,Tacotron 2不再使用“缩减因子”,即解码器的每一步对应生成一个频谱帧 。
Tacotron模型的主要特点在于其端到端的学习方式,能够直接从文本输入生成语音输出 。Tacotron模型能够学习到自然的韵律和语调 。在性能方面,Tacotron 1在美国英语上取得了3.82的平均意见得分(MOS) ,而Tacotron 2则达到了接近人类录音的语音质量 。
尽管Tacotron模型取得了显著的成功,但也存在一些局限性。由于解码器的自回归特性,Tacotron模型的推理速度相对较慢 。训练注意力机制也具有一定的挑战性,可能导致对齐失败,进而出现跳词或重复词等问题 。此外,Tacotron模型在处理复杂词汇和领域外文本时可能会遇到困难 。原始的Tacotron模型对语音参数(如语速或情感)的控制能力有限 。最后,Tacotron模型依赖于一个单独的声码器(WaveNet或WaveGlow),这增加了计算成本 。
FastSpeech:解决效率瓶颈
为了解决Tacotron模型推理速度慢的问题,FastSpeech模型被提出。FastSpeech采用了完全前馈的Transformer网络结构,能够并行生成梅尔频谱图,从而显著提高了推理速度 。
FastSpeech的编码器和解码器都由若干个前馈Transformer(FFT)模块堆叠而成 。每个FFT模块包含一个自注意力机制和一个一维卷积网络 。与Tacotron模型不同,FastSpeech去除了文本和语音之间的注意力机制,取而代之的是一个基于时长预测器的长度调节器 。时长预测器用于预测每个音素的持续时间,长度调节器则根据预测的时长将音素的隐藏序列扩展到与梅尔频谱图序列的长度相匹配,从而实现并行生成 。
FastSpeech相对于Tacotron模型在速度和鲁棒性方面都有显著的提升。在梅尔频谱图生成速度方面,FastSpeech比自回归的Transformer TTS模型快了高达270倍,端到端的语音合成速度也提升了38倍 。
由于采用了显式的时长建模,FastSpeech几乎消除了跳词和重复词的问题,提高了合成的鲁棒性 。在语音质量方面,FastSpeech能够达到与Tacotron相当甚至更好的水平 。此外,通过长度调节器,FastSpeech还能够灵活地控制语速和韵律 。
FastSpeech的训练流程依赖于一个自回归的教师模型(例如Tacotron 2)来预测音素时长并进行知识蒸馏 。首先,训练一个教师模型,然后从教师模型的注意力对齐中提取音素的持续时间,并使用教师模型生成的梅尔频谱图作为目标来训练FastSpeech模型及其时长预测器 。知识蒸馏有助于简化非自回归FastSpeech模型的学习任务 。
FastSpeech 2作为FastSpeech的改进版本,进一步提升了性能 。FastSpeech 2不再依赖教师模型的输出,而是直接使用真实的梅尔频谱图作为训练目标 。这简化了训练流程,并避免了因使用教师模型而可能导致的信息损失。
此外,FastSpeech 2引入了音高和能量预测器,从而能够更好地建模语音的韵律特征,生成更具表现力的语音 。FastSpeech 2还采用了通过强制对齐获得的更准确的音素时长信息,进一步提高了合成语音的质量 。与FastSpeech相比,FastSpeech 2的训练速度也更快 。
VITS:实现高保真和富有表现力的语音
VITS模型是一种端到端的TTS模型,它结合了变分自编码器(VAE)、归一化流和对抗学习等先进技术,旨在生成高保真且富有表现力的语音 。
VITS模型由后验编码器、解码器和条件先验组成 。VAE的结构使得模型能够学习到以文本为条件的语音的潜在表示。VITS模型中包含一个基于Transformer的文本编码器和多个耦合层的流式模块,用于预测频谱图 。归一化流技术允许模型生成复杂的频谱图分布。VITS模型使用HiFi-GAN声码器来生成高保真度的语音波形 。HiFi-GAN是一种先进的神经声码器,以其生成自然逼真的音频而闻名。
为了生成具有不同节奏的语音,VITS模型还包含一个随机时长预测器 。与确定性时长预测不同,随机时长预测能够反映人类语音的自然变化。VITS模型采用单调对齐搜索(Monotonic Alignment Search, MAS)来学习文本到音频的对齐,而无需外部对齐标注 。MAS允许模型直接从数据中学习对齐关系,简化了训练过程。
VITS模型通过端到端的方式联合训练所有组件(编码器、解码器、声码器) 。这种联合训练能够更好地优化整个系统。VITS模型对潜在变量的不确定性进行建模 ,这有助于捕捉语音中固有的变化性。对抗训练过程 通过使用判别器来区分真实语音和生成语音,从而提高输出的真实感。
VITS模型的架构结合了GlowTTS的编码器和HiFi-GAN的声码器 。VITS模型具备高质量的语音生成能力 ,在LJ Speech等数据集上取得了与真实录音相当的平均意见得分(MOS) ,并且能够生成富有表现力的、具有不同节奏和语调的语音 。
SparkTTS:利用LLM实现高效可控的TTS
SparkTTS模型是一种利用大型语言模型(LLM)进行高效且可控的TTS的新型系统 。SparkTTS采用了单流编解码器架构(BiCodec) ,该架构将语音分解为语义标记(低比特率,包含语言内容)和全局标记(固定长度,包含说话人属性) 。这种分离使得对语音的不同方面进行更有效的表示和操作成为可能。
SparkTTS集成了Qwen2.5等大型语言模型作为其骨干网络 ,并通过微调使LLM具备TTS能力 。该模型采用了链式思考(Chain-of-Thought, CoT)生成方法来实现属性控制 ,提供了一个用于粗粒度(性别、风格)和细粒度(音高、语速)属性的分层控制系统 。SparkTTS能够直接从LLM预测的代码中重建音频,无需单独的声学特征生成模型 ,从而简化了架构并提高了效率。
SparkTTS采用低比特率的语义标记进行高效编码 。其解码器比骨干网络小得多,有助于实现低延迟生成 。该模型还支持Nvidia Triton Inference Serving和TensorRT-LLM,以加速推理 。在性能指标方面,Spark-TTS-0.5B模型的名称暗示了其参数规模约为0.5亿 。在L20 GPU上,当并发数为1时,其推理延迟约为876毫秒,实时因子(Real-Time Factor, RTF)为0.1362 ,表明其推理速度相对较快。
SparkTTS具备零样本语音克隆和跨语言合成能力 ,即使没有特定说话人的训练数据,也能复制其声音 ,并支持中文和英文,能够进行跨语言的语音克隆 。这是SparkTTS的一个关键优势,表明其能够很好地泛化到未见过的声音和语言。
Cosyvoice:一种可扩展的多语种TTS方法
Cosyvoice模型是一种基于监督语义标记的多语种零样本TTS合成器 。与现有的无监督标记相比,使用监督标记旨在提高语音克隆的内容一致性和说话人相似度。
Cosyvoice由一个用于文本到标记生成的LLM和一个用于标记到语音合成的条件流匹配模型组成 。Cosyvoice还融入了x-vector来将语音建模分离为语义、说话人和韵律三个部分 。它通过分类器自由引导和余弦调度器等技术优化了流匹配过程 。
Cosyvoice在多语种和零样本TTS方面采用了独特的方法,是一个可扩展的多语种文本到语音合成器 ,支持包括中文、英文、日语、韩语以及各种汉语方言(粤语、四川话、上海话、天津话、武汉话等)在内的多种语言 。其关键特性是零样本上下文学习能力,仅需一段简短的参考语音样本即可复制任何声音 ,并且能够进行跨语言和混合语言的零样本语音克隆 。
与其他端到端TTS模型相比,Cosyvoice在内容一致性方面表现相当,并在说话人相似度方面表现更优 。与Cosy系列模型(指早期版本或相关模型)相比,Cosyvoice在韵律和情感方面表现显著更好 。Cosyvoice 2旨在以低延迟在流式模式下实现接近人类水平的自然度 。
在性能指标方面,Cosyvoice 2报告的MOS评分为5.53,与商业化的大型语音合成模型相当 。它在Seed-TTS评估集的硬测试集上实现了最低的字错误率 。在流式模式下,首次合成数据包的延迟低至150毫秒 。
为了更清晰地理解不同端到端TTS模型之间的差异,下表对Tacotron、FastSpeech、VITS、SparkTTS和Cosyvoice等模型在架构、关键特性、优化目标、优势、局限性以及典型应用场景等方面进行了比较。
表 1: 端到端TTS模型比较
模型 | 架构 | 关键特性 | 优化目标 | 优势 | 局限性 | 典型应用场景 |
---|---|---|---|---|---|---|
Tacotron | 编码器-解码器(RNN/LSTM,v1中含CBHG),注意力机制 | 梅尔/线性频谱图,WaveNet/WaveGlow声码器 | 高质量语音合成 | 自然的韵律和语调,端到端学习 | 推理速度慢,注意力机制可能失效 | 语音助手 |
FastSpeech | 前馈Transformer | 长度调节器,时长预测器 | 快速推理,鲁棒性,可控性 | 并行生成,推理速度快,几乎消除跳词和重复词 | 训练依赖教师模型 | 实时应用 |
VITS | VAE,归一化流,对抗学习 | HiFi-GAN声码器,随机时长预测器,MAS对齐 | 高保真度,富有表现力的语音 | 音质高,表现力强,端到端训练 | 模型复杂 | 研究,高质量应用 |
SparkTTS | 单流BiCodec,LLM骨干 | CoT控制,解耦语音标记 | 高效编码,快速推理,可控性 | 零样本语音克隆,跨语言合成 | 新兴模型,仍在发展 | 可定制语音生成 |
Cosyvoice | 监督语义标记,LLM,流匹配 | x-vector,条件流匹配 | 多语种,零样本语音克隆,流式合成 | 多语种支持,零样本语音克隆,流式推理 | 依赖高质量数据 | 多语种应用 |
从架构设计上看,Tacotron系列采用了循环神经网络(RNN/LSTM)和注意力机制,而FastSpeech则转向了完全前馈的Transformer结构。VITS模型则是一种混合架构,结合了VAE、归一化流和对抗学习。SparkTTS和Cosyvoice则更侧重于利用大型语言模型,并在标记化和生成流程上有所创新。
在优化目标方面,FastSpeech和SparkTTS主要关注推理速度和效率,而VITS和Cosyvoice则更侧重于提高语音的质量和表现力。Tacotron 2则试图在质量和效率之间取得平衡。性能指标方面,MOS评分常用于衡量语音的自然度,而实时因子和延迟则反映了模型的推理速度。鲁棒性和模型大小也是重要的评估指标。每个模型都有其独特的优势和局限性,因此在实际应用中选择合适的模型需要根据具体的使用场景和需求进行权衡。
端到端TTS模型的演进与未来方向
端到端TTS模型的发展历程可以追溯到2017年提出的Tacotron模型 。Tacotron作为首个成功的端到端TTS模型,为后续研究奠定了基础。2019年,FastSpeech的出现解决了自回归模型推理速度慢的瓶颈 。2021年,VITS通过引入先进的生成技术,将语音质量推向了新的高度 。近年来,基于大型语言模型的TTS模型,如2025年提出的SparkTTS ,以及侧重于可扩展性和多语种能力的Cosyvoice(2024年) ,相继涌现。
未来,端到端TTS模型的研究可能会朝着以下几个方向发展:进一步提高推理速度和效率,以满足更多实时应用的需求 ;增强合成语音的自然度和表现力,包括更好地控制情感和语速 ;开发更鲁棒的模型,能够处理嘈杂环境和不同的说话条件 ;在低资源语言TTS和跨语言语音克隆方面取得更多进展 ;探索新的架构和训练技术,例如扩散模型和更高级的LLM应用 ;以及提高TTS系统的可控性和个性化程度 。
相关文章:
语音合成之六端到端TTS模型的演进
端到端TTS模型的演进 引言Tacotron:奠基之作FastSpeech:解决效率瓶颈VITS:实现高保真和富有表现力的语音SparkTTS:利用LLM实现高效可控的TTSCosyvoice:一种可扩展的多语种TTS方法端到端TTS模型的演进与未来方向 引言 …...
文件的读取操作
#import time # 导入time 库 # 打开文件 fileopen("E:\Dasktape/python_test.txt","r",encoding"UTF-8")# 读取文件 print(f"读取文件的所有内容内容:{file.read()}\n") #\n是换行字符 print(f"读取10个字节的文件内容:{file.re…...
【Linux学习笔记】进程的fork创建 exit终止 wait等待
【Linux学习笔记】进程的fork创建 exit终止 wait等待 🔥个人主页:大白的编程日记 🔥专栏:Linux学习笔记 文章目录 【Linux学习笔记】进程的fork创建 exit终止 wait等待前言1.进程创建1.1 fork函数初识1.2fork函数返回值1.3写时拷…...
一种专用车辆智能配电模块的设计解析:技术革新与未来展望
关键词:智能配电模块、STM32、CAN总线、电子开关、新能源汽车 引言:传统配电系统的痛点与智能化转型 传统配电系统依赖继电器和保险丝,存在体积大、寿命短、智能化低等缺陷(如图1)。而新能源汽车和无人驾驶技术对配电…...
第TR5周:Transformer实战:文本分类
🍨 本文为🔗365天深度学习训练营中的学习记录博客 🍖 原作者:K同学啊 1.准备工作 1.1.加载数据 import torch import torch.nn as nn import torchvision import os,PIL,warnings import pandas as pd warnings.filterwarnings…...
Python爬虫(4)CSS核心机制:全面解析选择器分类、用法与实战应用
目录 一、背景与重要性二、CSS选择器基础与分类2.1 什么是选择器?2.2 选择器分类与语法 三、核心选择器详解与实战案例3.1 基础选择器:精准定位元素3.2 组合选择器:元素关系控制3.3 伪类与伪元素:动态与虚拟元素3…...
复杂地形越野机器人导航新突破!VERTIFORMER:数据高效多任务Transformer助力越野机器人移动导航
作者: Mohammad Nazeri 1 ^{1} 1, Anuj Pokhrel 1 ^{1} 1, Alexandyr Card 1 ^{1} 1, Aniket Datar 1 ^{1} 1, Garrett Warnell 2 , 3 ^{2,3} 2,3, Xuesu Xiao 1 ^{1} 1单位: 1 ^{1} 1乔治梅森大学计算机科学系, 2 ^{2} 2美国陆军研究实验室&…...
ROS 快速入门教程04
12.激光雷达工作原理 激光雷达的作用是探照周围障碍物的距离,按照测量维度可以分为单线雷达和多线雷达。 按照测量原理可以分为三角测距雷达和TOF雷达。按照工作方式可以分为固态雷达和机械旋转雷达。 本次讲解以TOF雷达为例,雷达发射器发射激光遇到障碍…...
Node.js 开发项目
初始化 npm init## npm install 编辑packege.json 添加,以支持ES6的语法 "type": "module" 连接mysql示例 import db from ./db/ops_mysql.jsconst createTable async () > {const insert_data CREATE TABLE IF NOT EXISTS users (…...
Linux系统下的常用网络命令
1.ping命令 作用:用来检测网络的连通情况和分析网络速度;根据域名得到服务器IP;根据ping返回的TTL值来判断对方所使用的操作系统及数据包经过路由器数量。 参数:-c 数字:设定ping命令发出的消息包数量,如无…...
【器件专题1——IGBT第1讲】IGBT:电力电子领域的 “万能开关”,如何撑起新能源时代?
一、IGBT 是什么?重新认识这个 “低调的电力心脏” 你可能没听过 IGBT,但一定用过它驱动的设备:家里的变频空调、路上的电动汽车、屋顶的光伏逆变器,甚至高铁和电网的核心部件里,都藏着这个 “电力电子开关的瑞士军刀”…...
C++23 新特性深度落地与最佳实践
一、引言 C 作为一门历史悠久且广泛应用的编程语言,一直在不断发展和演进。C23 作为 C 标准的一个重要版本,引入了许多令人期待的新特性,这些特性不仅提升了代码的可读性、可维护性,还增强了程序的性能和安全性。本文将深入探讨 …...
26考研 | 王道 | 数据结构笔记博客总结
26考研 | 王道 | 数据结构笔记博客总结 笔者博客网站 分类: 数据结构 | Darlingの妙妙屋 26考研 | 王道 | 数据结构 | 第一章 数据结构绪论 | Darlingの妙妙屋 26考研 | 王道 | 数据结构 | 第二章 线性表 | Darlingの妙妙屋 26考研 | 王道 | 数据结构 | 第三章 栈和队列 |…...
Bolsig+超详细使用教程
文章目录 Bolsig介绍Bolsig的使用 Bolsig介绍 BOLSIG 是一款用于求解弱电离气体中电子玻尔兹曼方程的免费计算程序,适用于均匀电场条件下的群体实验、气体放电及碰撞型低温等离子体研究。在此类环境中,电子分布函数呈现非麦克斯韦特性,其形态…...
基于线性LDA算法对鸢尾花数据集进行分类
基于线性LDA算法对鸢尾花数据集进行分类 1、效果 2、流程 1、加载数据集 2、划分训练集、测试集 3、创建模型 4、训练模型 5、使用LDA算法 6、画图3、示例代码 # 基于线性LDA算法对鸢尾花数据集进行分类# 基于线性LDA算法对鸢尾花数据集进行分类 import numpy as np import …...
C#高级语法--接口
先引用一些通俗一点的话语说明 1. 接口就像“插座标准”(解耦) 🧩 场景: 你家的手机充电器(USB-C、Lightning)必须插进匹配的插座才能充电。问题:如果每个手机品牌插座都不一样,你换手机就得换充电器,太麻烦了!💡 接口的作用: 定义一个通用的充电口标准(比如U…...
软测面经(私)
测试流程 分析需求——>制定测试计划——>设计测试用例——>执行测试——>编写测试报告 黑盒测试 等价类划分、边界值分析法、猜错法、随机数法、因果图。 白盒测试 代码检查法、程序变异、静态结构分析法、静态质量度量法、符号测试法、逻辑覆盖法、域测试、…...
线程函数库
pthread_create函数 pthread_create 是 POSIX 线程库(pthread)中的一个函数,用于创建一个新的线程。 头文件 #include <pthread.h> 函数原型 int pthread_create(pthread_t *thread, const pthread_attr_t *attr,void *(*s…...
数据结构初阶:排序
概述:本篇博客主要介绍关于排序的算法。 目录 1.排序概念及应用 1.1 概念 1.2 运用 1.3 常见的排序算法 2. 实现常见排序算法 2.1 插入排序 2.1.1 直接插入排序 2.1.2 希尔排序 2.2 选择排序 2.2.1 直接选择排序 2.2.2 堆排序 2.3 交换排序 2.3.1 冒泡排序…...
openwrt查询网关的命令
方法一:route -n 方法二:ip route show...
优化非线性复杂系统的参数
非线性项组合的系统 对于系统中的每一个复杂拟合,即每一个残差函数,都能表示为非线性方程的趋势,例如较为复杂的系统函数组, from optimtool.base import sp, np x sp.symbols("x1:5") res1 0.5*x[0] 0.2*x[1] 1.…...
【QQMusic项目界面开发复习笔记】第二章
🌹 作者: 云小逸 🤟 个人主页: 云小逸的主页 🤟 motto: 要敢于一个人默默的面对自己,强大自己才是核心。不要等到什么都没有了,才下定决心去做。种一颗树,最好的时间是十年前,其次就是现在&…...
并发编程【深度解剖】
并发介绍 谈到并发,随之而来的就是那几个问题。并发 并行 线程 进程 注意!!!本篇文章更多用诙谐的语调讲解,为保证易于理解,不够官方正式,所以可以结合AI读本篇文章,并且本文是以 g…...
前端如何连接tcp 服务,接收数据
在传统的浏览器前端环境中,由于浏览器的同源策略和安全限制,无法直接建立 TCP 连接。不过,可以通过 WebSocket 或者使用 WebRTC 来间接实现与 TCP 服务的通信,另外在 Node.js 环境中可以直接使用 net 模块建立 TCP 连接。下面分别…...
用C语言实现——一个中缀表达式的计算器。支持用户输入和动画演示过程。
一、思路概要和知识回顾 1.思路概要 ①中缀表达式计算: 需要处理运算符的优先级,可能需要用到栈结构。 ❗❗如何将中缀表达式转换为后缀表达式?或者直接计算? 通常,中缀转后缀(逆波兰式)再…...
使用 Pandas 进行多格式数据整合:从 Excel、JSON 到 HTML 的处理实战
前言 在数据处理与分析的实际场景中,我们经常需要整合不同格式的数据,例如 Excel 表格、JSON 配置文件、HTML 报表等。本文以一个具体任务(蓝桥杯模拟练习题)为例,详细讲解如何使用 Python 的 Pandas 库结合其他工具&…...
常见游戏引擎介绍与对比
Unreal Engine (UE4/UE5) 主语言:C Unreal Engine 主要使用 C 作为开发语言。C 提供了高性能的底层控制,适用于需要精细调优的 AAA 级游戏。C 在 Unreal 中用于开发核心游戏逻辑、物理引擎等性能要求较高的部分。 脚本语言:蓝图(B…...
第十一天 主菜单/设置界面 过场动画(Timeline) 成就系统(Steam/本地) 多语言支持
前言 对于刚接触Unity的新手开发者来说,构建完整的游戏系统往往充满挑战。本文将手把手教你实现游戏开发中最常见的四大核心系统:主菜单界面、过场动画、成就系统和多语言支持。每个模块都将结合完整代码示例,使用Unity 2022 LTS版本进行演示…...
vue3 使用 vite 管理多个项目,实现各子项目独立运行,独立打包
场景: 之前写过一篇 vite vue2 的配置,但是现在项目使用 vue3 较多,再更新一下 vue脚手架初始化之后的项目,每个项目都是独立的,导致项目多了之后,node依赖包过多,占用内存较多。想实现的效果…...
k8s(9) — zookeeper集群部署(亲和性、污点与容忍测试)
一、部署思路 1、前期设想 zookeeper集群至少需要运行3个pod集群才能够正常运行,考虑到节点会有故障的风险这个3个pod最好分别运行在3个不同的节点上(为了实现这一需要用到亲和性和反亲和性概念),在部署的时候对zookeeper运行的pod打标签加…...
Linux操作系统复习
Linux操作系统复习 一. Linux的权限和shell原理1. Linux从广义上讲是什么 从狭义上讲是什么?2. shell是什么?3. 为什么要设置一个shell外壳而不是直接和linux 内核沟通4. shell的原理是什么5. Linux中权限的概念6. 如何提升当前操作的权限7. 文件访问者的…...
深入解析 Linux 中动静态库的加载机制:从原理到实践
引言 在 Linux 开发中,动静态库是代码复用的核心工具。静态库(.a)和动态库(.so)的加载方式差异显著,直接影响程序的性能、灵活性和维护性。本文将深入剖析两者的加载机制,结合实例演示和底层原…...
总账主数据——Part 2 科目-1
本文主要介绍在S4 HANA OP中 总账主数据的后台配置及前台操作。 目录 1. 准备 1.1 科目表的定义(OB13) 1.2 给公司代码分配科目表(OB62) 1.3 定义科目组(OBD4) 1.4 定义留存收益科目(OB53) 1.5 维护科目表层“文本标识” (OBT6) 1.6 维护公司代码层“文本标识” (OBT…...
借助内核逻辑锁pagecache到内存
一、背景 内存管理是一个永恒的主题,尤其在内存紧张触发内存回收的时候。系统在通过磁盘获取磁盘上的文件的内容时,若不开启O_DIRECT方式进行读写,磁盘上的任何东西都会被缓存到系统里,我们称之为page cache。可以想象࿰…...
✨ Apifox:这玩意儿是接口界的“瑞士军刀”吧![特殊字符][特殊字符]
——全网最皮最全测评,打工人看了直呼“真香” 📢 友情提醒 还在用 Postman 测接口、Swagger 写文档、Mock.js 造假数据、脑细胞搞团队协作? 停! 你仿佛在玩《工具人环游记》,而隔壁同事已经用 Apifox 「一杆清台」了…...
《普通逻辑》学习记录——性质命题及其推理
目录 一、性质命题概述 二、性质命题的种类 2.1、性质命题按质的分类 2.2、性质命题按量的分类 2.3、性质命题按质和量结合的分类 2.4、性质命题的基本形式归纳 三、四种命题的真假关系 3.1、性质命题与对象关系 3.2、四种命题的真假判定 3.3、四种命题的对当关系 四、四种命题…...
设备接入与APP(应用程序)接入华为云iotDA平台的路径元素有哪些不同?
目录 壹、设备接入华为云iotDA 🏢 形象比喻:设备 员工,IoTDA 平台 安保森严的总部大楼 一、📍 平台接入地址 总部大楼地址 二、🧾 接入凭证 出入证 / 门禁卡 / 工牌 1. 设备密钥或证书 2. 预置接入凭证密钥&a…...
【git#4】分支管理 -- 知识补充
一、bug 分支 假如我们现在正在 dev2 分支上进行开发,开发到一半,突然发现 master 分支上面有 bug,需要解决。 在Git中,每个 bug 都可以通过一个新的临时分支来修复,修复后,合并分支,然后将临…...
AXOP34062: 40V双通道运算放大器
AXOP34062是一款通用型高压双通道运算放大器,产品的工作电压为2.5V至40V,具有25MHz的带宽,压摆率为10V/μs,静态电流为650A。较高的耐压和带宽使其可以胜任绝大多数的高压应用场景。 主要特性 轨到轨的输入输出范围低输入失调电…...
OpenCv高阶(十)——光流估计
文章目录 前言一、光流估计二、使用步骤1、导库读取视频、随机初始化颜色2、初始化光流跟踪3、视频帧处理循环4、光流计算与可视化5、循环控制与资源释放完整代码 总结 前言 在计算机视觉领域,光流估计是捕捉图像序列中像素点运动信息的核心技术。它描述了图像中每…...
BS客户端的单点登录
1、参数类似于“XXXXX://?userIdsystem&time1696830378038&token38a8ea526537766f01ded33a6cdfa5bd” 2、在config里加一个LoginSecret参数可随意指定一个字符串 3、BS登录代码里会对“LoginSecret的参数值用户ID时间戳”进行MD5加密形成token,与传过来的…...
通讯录完善版本(详细讲解+源码)
目录 前言 一、使通讯可以动态更新内存 1、contact.h 2、contact.c 存信息: 删除联系人,并试一个不存在的人的信息,看看会不会把其他人删了 编辑 修改: 编辑 排序: 编辑 销毁: 编辑 …...
第3讲:ggplot2完美入门与美化细节打磨——从基础绘制到专业级润色
目录 1. 为什么选择ggplot2? 2. 快速了解ggplot2绘图核心逻辑 3. 基础绘图示范:柱状图、折线图、散点图 (1)简单柱状图 (2)折线图示范 (3)高级散点图 + 拟合线 4. 精细美化:细节打磨决定专业感 5. 推荐的美化小插件(可选进阶) 6. 小练习:快速上手一幅美化…...
带宽?增益带宽积?压摆率?
一、带宽(Bandwidth) 1.科学定义: 带宽指信号或系统能够有效通过的频率范围,通常定义为信号功率下降到中频值的一半(即 - 3dB)时的最高频率与最低频率之差。对于运算放大器(Op-Amp)…...
为什么栈内存比堆内存速度快?
博主介绍:程序喵大人 35- 资深C/C/Rust/Android/iOS客户端开发10年大厂工作经验嵌入式/人工智能/自动驾驶/音视频/游戏开发入门级选手《C20高级编程》《C23高级编程》等多本书籍著译者更多原创精品文章,首发gzh,见文末👇…...
什么是非关系型数据库
什么是非关系型数据库? 引言 随着互联网应用的快速发展,传统的基于表格的关系型数据库(如 MySQL、Oracle 等)已经不能完全满足现代应用程序的需求。在这种背景下,非关系型数据库(NoSQL 数据库)…...
制作一个简单的操作系统9
自定义 myprintf 函数实现解析 探索如何实现一个自定义的 printf 函数来处理任意 %d 和 %s 组合 (说实话,想不用任何库函数和头文件,纯C实现太难了,我放弃了,弄了一个简陋版本 对付用) 运行效果: Hello 123 World 456 Coding这样参数传递:(最多支持5个参数,按顺序…...
华为Pura X的智控键:让折叠机体验更上一层楼的设计
还记得Mate 70系列刚出那会,我体验了下智控键,那时候就觉得这个“把快捷方式做进电源键”的交互方式非常惊艳,没想到在Pura X上,这种便捷体验感更上了一层楼。 智控键:折叠屏手机的天选快捷方式? 传统折叠…...
打造高功率、高电流和高可靠性电路板的厚铜PCB生产
厚铜PCB生产是指制作一种具有较厚铜层的PCB(Printed Circuit Board,印刷电路板)。这种PCB通常用于高功率、高电流和高可靠性的电子设备中。厚铜PCB的生产过程包括以下几个 主要步骤: 1. 基材准备 厚铜PCB的基材通常采用FR4或CEM-…...
AI超级智能体教程(三)---程序调用AI大模型的四种方式(SpringAI+LangChain4j+SDK+HTTP)
文章目录 1.安装SDK(查看文档)2.创建API-key3.项目引入灵积大模型4.HTTP接入的方式5.SpringAI引入5.1添加依赖5.2添加配置5.3测试代码 6.LangChain4j引入6.1依赖引入6.2测试提问 1.安装SDK(查看文档) 安装阿里云百炼SDK_大模型服…...