开源分享:TTS-Web-Vue系列:SSML格式化功能与高级语音合成
🎯 本文是TTS-Web-Vue系列的第十二篇文章,重点介绍项目新增的SSML格式化功能以及SSML在语音合成中的应用。通过自动格式化和实时预览,我们显著提升了SSML编辑体验,让用户能够更精确地控制语音合成的细节,实现更自然、更专业的语音效果。
📖 系列文章导航
- TTS-Web-Vue系列:打造最便捷的微软语音合成Web工具 - 项目介绍与整体架构
- TTS-Web-Vue系列:批量转换功能的实现与优化 - 批量转换功能详解
- TTS-Web-Vue系列:现代化UI设计与用户体验优化 - 界面设计与交互优化
- TTS-Web-Vue系列:语音主播库扩充与本地化优化 - 语音主播扩充与名称本地化
- TTS-Web-Vue系列:语音主播头像与名称本地化增强 - 主播头像生成与名称本地化
- TTS-Web-Vue系列:抽屉式布局与交互体验优化 - 抽屉式设计与布局优化
- TTS-Web-Vue系列:免费TTS服务集成与额度管理 - 免费TTS服务与配额系统
- TTS-Web-Vue系列:交互式用户引导功能实现 - 交互式用户引导功能详解
- TTS-Web-Vue系列:语音转换加载组件优化 - 加载组件与状态反馈优化
- TTS-Web-Vue系列:移动端引导体验优化 - 移动端引导交互优化
- TTS-Web-Vue系列:SSML格式化功能与高级语音合成 - SSML格式化与语音控制详解
- 更多文章持续更新中…
🌟 SSML格式化功能亮点
本次更新的SSML格式化功能包含以下亮点:
- 自动代码格式化:输入的SSML代码自动进行缩进和换行处理,提高可读性
- 实时预览更新:设置变化时自动更新SSML预览,实现所见即所得
- 语音参数映射:UI控件值与SSML属性智能映射,简化复杂参数设置
- 命名空间优化:自动添加正确的XML命名空间,确保SSML格式规范
- 标签嵌套结构:根据微软TTS要求自动构建正确的嵌套结构
- 错误处理机制:自动捕获和修复常见SSML格式错误
💻 什么是SSML?
SSML (Speech Synthesis Markup Language) 是一种基于XML的标记语言,用于增强文本到语音转换系统的能力。它允许开发者精确控制语音合成的多个方面,如:
- 语速、音调和音量
- 语音停顿和停顿时长
- 发音和重音
- 表达方式和情感强度
- 特殊单词或短语的处理
与纯文本相比,SSML提供了更丰富的语音控制能力,使合成语音更自然、更符合预期。
🔍 SSML基本语法与结构
基本结构
一个标准的SSML文档包含以下结构:
<speak xmlns="http://www.w3.org/2001/10/synthesis" xmlns:mstts="https://www.w3.org/2001/mstts" xmlns:emo="http://www.w3.org/2009/10/emotionml" version="1.0" xml:lang="en-US"><voice name="zh-CN-XiaoxiaoNeural"><mstts:express-as style="cheerful" styledegree="1.5"><prosody rate="0%" pitch="0%" volume="medium">这是一段示例文本</prosody></mstts:express-as></voice>
</speak>
常用标签解析
<speak>
标签
根元素,定义SSML文档的开始和结束,包含必要的命名空间声明。
<speak xmlns="http://www.w3.org/2001/10/synthesis" xmlns:mstts="https://www.w3.org/2001/mstts" version="1.0" xml:lang="en-US"><!-- 内容 -->
</speak>
<voice>
标签
指定要使用的语音,通过 name
属性设置语音名称。
<voice name="zh-CN-XiaoxiaoNeural"><!-- 内容 -->
</voice>
<mstts:express-as>
标签
微软特有的标签,用于设置语音风格和角色。
<mstts:express-as style="cheerful" role="Girl" styledegree="1.5"><!-- 内容 -->
</mstts:express-as>
style属性值:
- cheerful (开朗)
- sad (悲伤)
- angry (愤怒)
- fearful (恐惧)
- disgruntled (不满)
- serious (严肃)
- affectionate (深情)
- gentle (温柔)
- embarrassed (尴尬)
styledegree属性: 控制风格强度,范围0.5-2.0
<prosody>
标签
控制语速、音调和音量。
<prosody rate="50%" pitch="20%" volume="loud"><!-- 内容 -->
</prosody>
rate属性: 语速
- 百分比值:
-90%
到900%
- 预定义值:
x-slow
,slow
,medium
,fast
,x-fast
pitch属性: 音调
- 百分比值:
-50%
到50%
- 预定义值:
x-low
,low
,medium
,high
,x-high
volume属性: 音量
- 预定义值:
silent
,x-soft
,soft
,medium
,loud
,x-loud
<break>
标签
插入停顿。
<break time="500ms" />
time属性: 停顿时长,可使用ms或s为单位
🧰 SSML格式化功能实现
XML格式化核心函数
格式化SSML的核心函数如下:
// 添加XML格式化函数
const formatXML = (xml) => {let formatted = '';let indent = '';// 将XML字符串分割成行xml.split(/>\s*</).forEach(function(node) {if (node.match(/^\/\w/)) indent = indent.substring(2);formatted += indent + '<' + node + '>\n';if (!node.match(/^\//) && !node.match(/\/$/)) indent += ' ';});// 处理第一个和最后一个标签return formatted.substring(1, formatted.length - 2);
};
这个函数通过以下步骤格式化XML:
- 将XML字符串按
>
和<
分割成节点 - 根据节点类型动态调整缩进级别
- 为每个节点添加适当的缩进和换行
- 处理起始和结束标签的特殊情况
SSML生成与更新逻辑
根据UI设置自动生成SSML的逻辑:
// 更新SSML内容的函数
function updateSSML() {if (!formConfig.value || !formConfig.value.voiceSelect) {return;}// 提取所需的值const config = formConfig.value;// 准备样式属性let styleAttr = "";if (config.voiceStyleSelect) {styleAttr = 'style="' + config.voiceStyleSelect + '"';}// 准备角色属性let roleAttr = "";if (config.role) {roleAttr = 'role="' + config.role + '"';}// 准备强度属性let intensityAttr = "";if (config.intensity && config.intensity !== "default") {// 将字符串强度值转换为对应的数值let intensityValue = "";if (config.intensity === "weak") intensityValue = "0.5";else if (config.intensity === "strong") intensityValue = "1.5";else if (config.intensity === "extraStrong") intensityValue = "2";else intensityValue = config.intensity; // 如果已经是数值则直接使用intensityAttr = 'styledegree="' + intensityValue + '"';}// 准备音量属性let volumeAttr = "";if (config.volume && config.volume !== "default") {// 定义音量值映射let volumeMapping = {"extraWeak": "x-soft","weak": "soft", "strong": "loud","extraStrong": "x-loud"};volumeAttr = 'volume="' + (volumeMapping[config.volume] || config.volume) + '"';}// 准备静音配置let silenceConfig = "";if (config.silence && config.silence !== "default") {silenceConfig = '<break time="' + config.silence + '" />';}// 计算速率和音调const rateValue = (config.speed * 100).toFixed(); // 直接使用速度值乘以100const pitchValue = (config.pitch * 100 - 100).toFixed(); // 将音调值转换为百分比变化// 生成完整的SSMLconst ssml = '<speak xmlns="http://www.w3.org/2001/10/synthesis" xmlns:mstts="https://www.w3.org/2001/mstts" xmlns:emo="http://www.w3.org/2009/10/emotionml" version="1.0" xml:lang="en-US">\n' +' <voice name="' + config.voiceSelect + '">\n' +' <mstts:express-as ' + styleAttr + ' ' + roleAttr + ' ' + intensityAttr + '>\n' +' <prosody rate="' + rateValue + '%" pitch="' + pitchValue + '%" ' + volumeAttr + '>\n' +' ' + silenceConfig + inputs.value.inputValue + '\n' +' </prosody>\n' +' </mstts:express-as>\n' +' </voice>\n' +'</speak>';// 格式化并设置SSMLinputs.value.ssmlValue = formatXML(ssml);
}
自动更新与监听逻辑
为确保SSML内容与UI设置同步,我们实现了多个观察器:
// 监听SSML值的变化
watch(() => inputs.value.ssmlValue, (newValue) => {if (newValue && !newValue.includes('\n')) { // 只在非格式化的情况下进行格式化inputs.value.ssmlValue = formatXML(newValue);}
});// 监听抽屉打开状态
watch(() => openSettingsDrawer.value, (newValue) => {if (newValue && inputs.value.ssmlValue) {// 当抽屉打开时,确保SSML是格式化的nextTick(() => {inputs.value.ssmlValue = formatXML(inputs.value.ssmlValue);});}
});// 在打开设置面板时重新格式化SSML
const openSettingsPanel = () => {setTimeout(() => {openSettingsDrawer.value = true;// 重新格式化SSMLif (inputs.value.ssmlValue) {inputs.value.ssmlValue = formatXML(inputs.value.ssmlValue);}// 其他逻辑...}, 100);
};
🎭 SSML高级应用场景
1. 多语言混合朗读
SSML可以在同一文档中混合使用多种语言:
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="zh-CN"><voice name="zh-CN-XiaoxiaoNeural">今天我们将学习一些英语单词:<lang xml:lang="en-US">Hello, world! This is an example.</lang>现在回到中文。</voice>
</speak>
2. 自定义发音
对特定单词的发音进行微调:
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="zh-CN"><voice name="zh-CN-XiaoxiaoNeural">正常发音:紧急情况。特殊发音:<phoneme alphabet="sapi" ph="jin1 ji2 qing2 kuang4">紧急情况</phoneme>。</voice>
</speak>
3. 数字和日期处理
控制数字和日期的读法:
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="zh-CN"><voice name="zh-CN-XiaoxiaoNeural">默认读法:123作为电话号码读:<say-as interpret-as="telephone">123</say-as>日期读法:<say-as interpret-as="date" format="ymd">2023-05-20</say-as></voice>
</speak>
4. 情感表达控制
利用微软特有的情感控制标签:
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:mstts="https://www.w3.org/2001/mstts"xmlns:emo="http://www.w3.org/2009/10/emotionml"xml:lang="zh-CN"><voice name="zh-CN-XiaoxiaoNeural"><emo:emotion category="happiness" intensity="0.7">今天是个好天气,我感到非常开心!</emo:emotion><emo:emotion category="anger" intensity="0.5">但是我错过了公交车,这真让人恼火!</emo:emotion></voice>
</speak>
5. 背景音频混合
在语音中添加背景音乐:
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="zh-CN"><voice name="zh-CN-XiaoxiaoNeural"><audio src="https://example.com/background.mp3">这段文字会在背景音乐播放时朗读出来。如果音频无法播放,则只会朗读这段文字。</audio></voice>
</speak>
📊 SSML实际应用效果对比
下面展示了几个使用和不使用SSML的语音效果对比:
1. 标准文本 vs. SSML格式化文本
普通文本:
这是一段测试文本,没有任何语音控制效果。
SSML格式化:
<speak xmlns="http://www.w3.org/2001/10/synthesis" xmlns:mstts="https://www.w3.org/2001/mstts" version="1.0" xml:lang="zh-CN"><voice name="zh-CN-XiaoxiaoNeural"><prosody rate="10%" pitch="15%" volume="loud">这是一段测试文本,通过SSML添加了语音控制效果。</prosody></voice>
</speak>
效果差异:SSML版本语速更慢、音调更高、音量更大,整体表现更加突出。
2. 情感表达对比
普通文本:
我今天非常开心,因为完成了所有工作!
SSML格式化:
<speak xmlns="http://www.w3.org/2001/10/synthesis" xmlns:mstts="https://www.w3.org/2001/mstts" version="1.0" xml:lang="zh-CN"><voice name="zh-CN-XiaoxiaoNeural"><mstts:express-as style="cheerful" styledegree="1.8">我今天非常开心,因为完成了所有工作!</mstts:express-as></voice>
</speak>
效果差异:SSML版本表现出明显的欢快语调,语速略快,音调变化更丰富。
3. 停顿和重音控制
普通文本:
请注意,这是重要通知,请认真阅读全文。
SSML格式化:
<speak xmlns="http://www.w3.org/2001/10/synthesis" xmlns:mstts="https://www.w3.org/2001/mstts" version="1.0" xml:lang="zh-CN"><voice name="zh-CN-XiaoxiaoNeural">请注意,<break time="500ms" />这是<emphasis level="strong">重要通知</emphasis>,<break time="300ms" />请认真阅读全文。</voice>
</speak>
效果差异:SSML版本在关键位置添加了停顿,"重要通知"一词读得更重,整体节奏感更强,突出了重点信息。
🚀 TTS-Web-Vue中的SSML编辑器使用指南
基本操作流程
- 切换到SSML模式:在文本输入区域上方切换到"SSML模式"
- 使用UI控件调整参数:通过侧边栏的控件调整语音、风格、速度等参数
- 实时预览SSML:在SSML编辑框中查看自动生成和格式化的SSML代码
- 手动编辑SSML:可以直接在编辑框中修改SSML代码
- 播放预览:点击"播放预览"按钮试听效果
- 转换并下载:满意后点击"开始转换"按钮生成语音文件
最佳实践
- 从UI控件开始:先使用UI控件调整基本参数,生成基础SSML结构
- 微调SSML代码:根据需要手动调整生成的SSML代码
- 分段控制:对于长文本,考虑分段使用不同的语音风格和参数
- 调整停顿:在关键位置添加
<break>
标签,提高自然度 - 少量测试:每次修改后进行预览,避免大量修改后难以定位问题
🔮 未来优化方向
- SSML语法检查:实现实时语法检查,提示潜在错误
- 可视化SSML编辑器:开发更直观的可视化编辑界面
- SSML模板库:预设常用的SSML模板便于快速应用
- 多语言支持扩展:增强对更多语言的SSML特性支持
- SSML代码高亮:实现编辑器语法高亮功能
- AI辅助SSML生成:通过AI分析文本内容,自动生成合适的SSML标记
📝 总结
通过SSML格式化功能的实现,TTS-Web-Vue显著提升了用户对语音合成的控制能力。用户现在可以通过直观的UI界面或直接编辑SSML代码,精确控制语音的各个方面,实现更自然、更专业的语音效果。格式化功能的自动应用,也大大降低了编辑SSML的难度,使得即使是SSML新手也能轻松上手。
SSML作为一种强大的语音合成控制语言,拥有巨大的应用潜力。通过本文介绍的基础知识和实际应用案例,希望能帮助更多开发者和内容创作者充分利用SSML的能力,创造出更优质的语音内容。
🔗 相关链接
- TTS-Web-Vue项目主页
- 在线演示
- 微软SSML官方文档
- W3C SSML规范
注意:本文介绍的功能仅供学习和个人使用,请勿用于商业用途。如有问题或建议,欢迎在评论区讨论!
相关文章:

开源分享:TTS-Web-Vue系列:SSML格式化功能与高级语音合成
🎯 本文是TTS-Web-Vue系列的第十二篇文章,重点介绍项目新增的SSML格式化功能以及SSML在语音合成中的应用。通过自动格式化和实时预览,我们显著提升了SSML编辑体验,让用户能够更精确地控制语音合成的细节,实现更自然、更…...
[人机交互]理解界面对用户的影响
零.重点 – 什么是情感因素 – 富有表现力的界面 – 用户的挫败感 – 拟人化在交互设计中的应用 – 虚拟人物:代理 一.什么是情感方面 情感是指某事物对心理造成的一种状态 二.计算机科学中存在的两个相关的研究领域 2.1情感计算 机器如何能感知其他代理的情感&…...

FAST-LIO笔记
1.FAST-LIO FAST-LIO 是一个计算效率高、鲁棒性强的激光-惯性里程计系统。该系统通过紧耦合的迭代扩展卡尔曼滤波器(IEKF)将激光雷达特征点与IMU数据进行融合,使其在快速运动、噪声较大或环境复杂、存在退化的情况下仍能实现稳定的导航。 1…...

软考中级软件设计师——UML(统一建模语言)篇
UML的词汇表包含3种构造块:事物、关系和图。事物是对模型中最具有代表性的成分的抽象;关系把事物结合在一起;图聚集了相关的事物。 一、事物 UML 事物是模型中的基本元素,分为 结构事物、行为事物、分组事物、注释事物。 1. 结构事物 类(Class&#x…...

TSN网络与DIOS融合:破解煤矿井下电力系统越级跳闸难题
一、引言 1.1 研究背景与意义 在现代煤矿生产中,井下电力系统作为整个煤矿生产的动力核心,其重要性不言而喻。煤矿井下的各类机械设备,如采煤机、刮板输送机、通风机、排水泵等,都依赖稳定的电力供应才能正常运行。电力系统的稳定…...
python 实现文件批量重命名
以下是使用Python实现文件批量重命名的示例代码。该代码可以将指定目录下的文件按照一定规则进行重命名,这里以将文件重命名为带有编号的文件名为例: import osdef batch_rename(directory):if not os.path.isdir(directory):print(...

SierraNet协议分析使用指导[RDMA]| 如何设置 NVMe QP 端口以进行正确解码
在解码RoCEv2数据包(包括TCP RDMA和RoCE RDMA)时,若捕获的跟踪数据无法正确解码,通常需要执行特定的解码步骤。对于RoCE RDMA跟踪数据的处理,分析器主要采用两种方式获取必要信息以实现数据包解码: 首先&am…...
Nodejs核心机制
文章目录 前言 前言 结合 Node.js 的核心机制进行说明: 解释事件循环的各个阶段。 答案 Node.js 事件循环分为 6 个阶段,按顺序执行: Timers:执行 setTimeout 和 setInterval 的回调。 Pending I/O Callbacks:处理系…...
Win全兼容!五五 Excel Word 转 PDF 工具解决多场景转换难题
各位办公小能手们!今天给你们介绍一款超牛的工具——五五Excel Word批量转PDF工具V5.5版。这玩意儿专注搞批量格式转换,能把Excel(.xls/.xlsx)和Word(.doc/.docx)文档唰唰地变成PDF格式。 先说说它的核心功…...
【Bluedroid】HID DEVICE 连接的源码分析
本文分析Android Bluetooth协议栈中HID device设备连接流程的完整实现,从应用层接口到协议栈底层的交互细节。通过关键函数(如connect()、BTA_HdConnect()、HID_DevConnect()等)的代码解析,重点关注btif、bta、HID协议栈三层的协同机制,揭示BTA_HD_CONN_STATE_EVT事件传递…...
【AI大模型】SpringBoot整合Spring AI 核心组件使用详解
目录 一、前言 二、Spring AI介绍 2.1 Spring AI介绍 2.2 Spring AI主要特点 2.3 Spring AI核心组件 2.4 Spring AI应用场景 2.5 Spring AI优势 2.5.1 与 Spring 生态无缝集成 2.5.2 模块化设计 2.5.3 简化 AI 集成 2.5.4 支持云原生和分布式计算 2.5.5 安全性保障…...
Redis的操作以及Spring Cache框架
Redis是一种开源的内存数据结构存储,用作数据库、缓存和消息代理。它支持多种数据结构,如字符串、哈希、列表、集合、有序集合等。在Spring应用中,可以使用Spring Cache框架结合Redis来实现高效的缓存机制。本文将详细介绍Redis的基本操作以及…...
C#输出参数:使用、要求与新特性
在C#编程中,输出参数是一种强大的工具,用于从方法体内把数据传出到调用代码。它的行为与引用参数类似,但也有自己的特点。今天我们就来详细了解一下C#中的输出参数。 输出参数的基本要求 修饰符的使用 输出参数必须在声明和调用中都使用修…...

信号处理基础
一、目的 掌握信号处理的基本思想,理解采样信号的频谱特性,加强信号采样与重建的有关基本概念的理解,深入理解线性时不变系统输出与输入的关系,了解数字信号采样率转换前后信号频谱的特征。 二、内容与设计思想 1、给定序列,绘…...

小刚说C语言刷题—1058 - 求出100至999范围内的所有水仙花数
1.题目描述 2.参考代码(C语言版) #include <stdio.h> int main(void) { int i; int bai,shi,ge; for( i100;i<999;i) { baii/100; shii/10%10; gei%10; if((bai*bai*bai)(shi*shi*shi)(ge*ge*ge)i) printf("%d\n",i); } return 0; } 今天内容到此结束&…...
cat、more和less的区别
在 Linux 系统中,cat、more 和 less 都是用于查看文件内容的命令,但它们在功能和使用场景上有显著区别。以下是它们的详细对比: 1. cat 命令 功能: - 直接输出整个文件:一次性将文件内容全部显示在终端上ÿ…...

深入解析Docker:核心架构与最佳实践
文章目录 前言一、Docker 解决了什么问题?二、Docker 底层核心架构2.1 Docker 引擎的分层架构2.2 镜像的奥秘:联合文件系统(UnionFS)2.3 容器隔离的核心技术2.3.1 命名空间2.3.2 控制组(Cgroups)2.3.3 内核…...
HVV面试题汇总合集
应急响应的命令 Linux ps -aux 查看进程 netstat -antlp 查看端口 top查看 cpu使用情况 Windows tasklist 查看进程 netstat -an 查看端口struts2原理特征 原理: 045:默认的content-type解析器会把用户传来的数据直接当成代码执行,造成rce 特征:ognl表达式&…...
什么是深度神经网络
深度神经网络(DNN)详细介绍 1. 定义与核心原理 深度神经网络(Deep Neural Network, DNN)是一种具有多个隐藏层的人工神经网络模型,其核心在于通过层次化的非线性变换逐步提取输入数据的高层次抽象特征。与浅层神经网络相比,DNN的隐藏层数量通常超过三层,例如VGGNet、R…...
Node.js 24.0 正式发布:性能跃升与开发体验全面升级
Node.js v24.0.0 震撼发布!V8 13.6、npm 11、权限模型稳定化等重磅更新 2025年5月6日 —— Node.js 社区迎来重大里程碑!Node.js v24.0.0 正式发布,带来一系列激动人心的新特性、性能优化和 API 改进。本次更新涵盖 V8 JavaScript 引擎升级至…...
Linux/AndroidOS中进程间的通信线程间的同步 - 信号量
1 概述 本文将介绍 POSIX 信号量,它允许进程和线程同步对共享资源的访问。有两种类型的 POSIX 信号量: 命名信号量:这种信号量拥有一个名字。通过使用相同的名字调用 sem_open(),不相关的进程能够访问同一个信号量。未命名信号量…...
Python Cookbook-7.10 在 MySQL 数据库中储存 BLOB
任务 想把一个二进制的大对象(BLOB)存入MySQL数据库 解决方案 MySQLdb 模块并不支持完整的占位符,不过可以使用模块的escape_string 函数来解决: import MySQLdb,cPickle #连接到数据库,用你的本机来测试数据库,并获得游标 connection = MySQLdb.connect(db = "tes…...

Edge浏览器PDF字体显示错误
Edge浏览器PDF字体显示错误 软件版本信息 Edge Version: 136.0.3240.50 Word Version: Microsoft Office 专业增强版2021问题描述 在Word中使用多级列表自动编号, 并使用Word软件自带的导出为PDF文件功能, 在Word中显示正常的数字, 在Edge中查看PDF将会出现渲染错误的现象,…...
计算机网络与多线程同步机制详解
一、IP地址与子网划分 在互联网世界中,IP地址就像是每个设备的"门牌号",它使得数据包能够准确送达目的地。IP地址的划分与管理就像城市的规划,通过合理的子网划分,能够高效地管理网络资源。 子网掩码的工作原理 子网…...

Python训练营打卡——DAY22(2025.5.11)
复习日 学习参考如何使用kaggle平台,写下使用注意点,并对下述比赛提交代码 泰坦尼克号——来自灾难的机器学习 数据来源: kaggle泰坦里克号人员生还预测 挑战 泰坦尼克号沉没是历史上最臭名昭著的海难之一。 1912年4月15日,在被普…...

实战项目4(05)
目录 任务场景一 【sw1配置】 任务场景二 【sw1配置】 【sw2配置】 任务场景一 按照下图完成网络拓扑搭建和配置 任务要求: 1、在交换机SW1的E0/0/1端口进行设置,实现允许最多两个电脑可以正常进行通信。 2、在交换机SW1的E0/0/2端口进行设置&…...
快速上手Pytorch Lighting框架 | 深度学习入门
快速上手Pytorch Lighting框架 | 深度学习入门 前言参考官方文档 介绍快速上手基本流程常用接口LightningModule\_\_init\_\_ & setup()\*\_step()configure_callbacks()configure_optimizers()load_from_checkpoint Trainer常用参数 可选接口LoggersTensorBoard Logger Ca…...

C++学习之STL学习
在经过前面的简单的C入门语法的学习后,我们开始接触C最重要的组成部分之一:STL 目录 STL的介绍 什么是STL STL的历史 UTF-8编码原理(了解) UTF-8编码原理 核心编码规则 规则解析 编码步骤示例 1. 确定码点范围 2. 转换为…...

3. 仓颉 CEF 库封装
文章目录 1. capi 使用说明2. Cangjie CEF2. 1实现目标 3. 实现示例 1. capi 使用说明 根据上一节 https://blog.csdn.net/qq_51355375/article/details/147880718?spm1011.2415.3001.5331 所述, cefcapi 是libcef 共享库导出一个 C API, 而以源代码形式分发的 li…...

LabVIEW多通道并行数据存储系统
在工业自动化监测、航空航天测试、生物医学信号采集等领域,常常需要对多个传感器通道的数据进行同步采集,并根据后续分析需求以不同采样率保存特定通道组合。传统单线程数据存储方案难以满足实时性和资源利用效率的要求,因此设计一个高效的多…...