Unity使用sherpa-onnx实现离线语音合成

sherpa-onnx https://github.com/k2-fsa/sherpa-onnx
相关dll和lib库拷进Unity,官方示例代码稍作修改
在这里插入图片描述

using SherpaOnnx;
using System;
using System.IO;
using System.Runtime.InteropServices;
using UnityEngine;public class TTS : MonoBehaviour
{public string Model = "vits-zh-aishell3/vits-aishell3.onnx";public string Lexicon = "vits-zh-aishell3/lexicon.txt";public string Tokens = "vits-zh-aishell3/tokens.txt";public string DataDir = "";public string DictDir = "";public string RuleFsts = "vits-zh-aishell3/rule.far";public int SpeakerId = 99;// Start is called before the first frame updatevoid Start(){try{OfflineTtsConfig config = new OfflineTtsConfig();config.Model.Vits.Model = Path.Combine(Application.streamingAssetsPath, Model);config.Model.Vits.Lexicon = Path.Combine(Application.streamingAssetsPath, Lexicon);config.Model.Vits.Tokens = Path.Combine(Application.streamingAssetsPath, Tokens);//config.Model.Vits.DataDir = Path.Combine(Application.streamingAssetsPath, DataDir);//config.Model.Vits.DictDir = Path.Combine(Application.streamingAssetsPath, DictDir);config.Model.Vits.NoiseScale = 0.667f;config.Model.Vits.NoiseScaleW = 0.8f;config.Model.Vits.LengthScale = 1f;config.Model.NumThreads = 1;config.Model.Debug = 0;config.Model.Provider = "cpu";config.RuleFsts = Application.streamingAssetsPath + "/vits-zh-aishell3/phone.fst" + ","+ Application.streamingAssetsPath + "/vits-zh-aishell3/date.fst" + ","+ Application.streamingAssetsPath + "/vits-zh-aishell3/number.fst";config.MaxNumSentences = 1;OfflineTts tts = new OfflineTts(config);OfflineTtsCallback callback = new OfflineTtsCallback(MyCallback);OfflineTtsGeneratedAudio audio = tts.GenerateWithCallback("这是一个语音合成测试", 1, SpeakerId, callback);bool ok = audio.SaveToWaveFile(Application.streamingAssetsPath + "/test.wav");if (ok){Debug.Log("succeeded!");}else{Debug.Log("Failed");}}catch (Exception e){Debug.LogError(e);}}void MyCallback(IntPtr samples, int n){float[] data = new float[n];Marshal.Copy(samples, data, 0, n);//Debug.Log("n:" + n);}// Update is called once per framevoid Update(){}
}

在这里插入图片描述
在这里插入图片描述
不知为何生成的音频是8000HZ的……
24.5.15添加了方便测试的UI
在这里插入图片描述

最后,案发现场在https://gitee.com/awnuxcvbn/usherpa-onnx-tts.git

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/12751.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C++】vector的底层原理讲解及其实现

目录 一、认识vector底层结构 二、初始化vector的函数 构造函数拷贝构造赋值构造initializer_list构造迭代器区间构造 三、迭代器 四、数据的访问 五、容量相关的函数 六、关于数据的增删查改操作 一、认识vector底层结构 STL库中实现vector其实是用三个指针来完成的&#x…

Promise 还能这样理解呀!

目录: 1、Promise是什么 2、Promise三种状态 3、Promise如何使用 4、Promise作用

一种快速提升文件传输速度的方法

在面对网络条件不理想时,进行文件传输往往会导致传输速率的显著下降。为了克服这一难题,镭速软件特别引入了一系列创新的设置选项,旨在显著提升文件传输速率。通过这些优化措施,用户即使在网络不佳的情况下,也能享受到…

机器人工具箱学习(三)

一、动力学方程 机器人的动力学公式描述如下: 式中, τ \boldsymbol{\tau} τ表示关节驱动力矩矢量; q , q ˙ , q \boldsymbol{q} ,\; \dot{\boldsymbol { q }} ,\; \ddot{\boldsymbol { q }} q,q˙​,q​分别为广义的关节位置、速度和加速…

uniapp如何打包预约上门按摩APP

uniapp如何打包预约上门按摩APP? 开发工具:HBuilderX 一、创建移动应用 1、 点击此处微信开放平台 2、点击【管理中心 - 移动应用 - 创建移动应用】填写资料后等待审核 app运行流程图 签名如何获取: 1)先把打包好的app安装在手…

java多线程——线程池

概述 线程池是管理java线程生命周期的工具 降低资源消耗。通过池化技术能够重复利用已创建的线程,降低线程频繁创建和销毁造成的资源消耗提高线程的可管理性。无需程序员手动销毁线程,控制线程创建的数量,避免无限制的创建影响系统稳定性 …

OpenHarmony上移植memtester

1. 下载源码: wget https://pyropus.ca./software/memtester/old-versions/memtester-4.6.0.tar.gz 2. 解压并指定交叉编译方式 解压 tar -xvf memtester-4.6.0.tar.gz 修改conf-cc和conf-ld,指定交叉编译方式 conf-cc conf-ld 3. 编译 直接运行m…

Stable Diffusion入门使用技巧及个人实例分享--大模型及lora篇

大家好,近期使用Stable Diffusion比较多,积累整理了一些内容,得空分享给大家。如果你近期正好在关注AI绘画领域,可以看看哦。 本文比较适合已经解决了安装问题,(没有安装的在文末领取) 在寻找合…

分布式搜索——ElasticSeach简介

一般都用数据库存储数据,然后对数据库进行查询获取数据,但是当数据量很大时,查询效率就会很慢(具体下面会讲到),所以这种情况下就会使用到ElasticSeach ElasticSeach的基本介绍 ElasticSeach是一 款非常强…

杰发科技AC7801——ADC之Bandgap和内部温度计算

0. 参考 电流模架构Bandgap设计与仿真 bandgap的理解(内部带隙电压基准) ​ ​ 虽然看不懂这些公式,但是比较重要的一句应该是这个:因为传统带隙基准的输出值为1.2V ​ 1. 使用 参考示例代码。 40002000是falsh控制器寄…

NXP RT1176(一)——二级BootLoader开发(安全引导加载程序SBL)

目录 1. 开发环境 2. 二级BOOT的功能 3. 步骤 3.1 配置源码 3.2 构建项目 3.2.1 MDK 3.2.2 IAR(IAR也编译一下工程看看,这样两个平台都可以支持了) 单核M7的开发!! 1. 开发环境 本文Windows下开发:…

MHD、MQA、GQA注意力机制详解

MHD、MQA、GQA注意力机制详解 注意力机制详解及代码前言:MHAMQAGQA 注意力机制详解及代码 前言: 自回归解码器推理是 Transformer 模型的 一个严重瓶颈,因为在每个解码步骤中加 载解码器权重以及所有注意键和值会产生 内存带宽开销 下图为三…

【合成孔径雷达】合成孔径雷达的多视角理解和时/频成像算法的统一解释

文章目录 一、什么是雷达成像(1)主要的遥感探测手段:光学、红外和雷达(2)从数学的角度:雷达成像主要研究什么?数据采集: y T x n yTxn yTxn信息提取: y − > x ? y…

编译错误:stray ‘\357’ in program的解决方法

目录 把报错文件更换编码格式,我试的utf-8 bom编码就可以了,可以多换几种试试。 网友的另一种案例: 编译错误:stray ‘\357’ in program的解决方法 把报错文件更换编码格式,我试的utf-8 bom编码就可以了&#xff0c…

如何同步管理1000个设备的VLAN数据?

什么是VLAN? VLAN,也就是虚拟局域网,是通过为子网提供数据链路连接来抽象出局域网的概念。在企业网中,一个企业级交换机一般是24口或者是48口,连接这些接口的终端在物理上形成一个广播域。广播域过大,就会导…

【AI智能体】零代码构建AI应用,全网都在喊话歌手谁能应战,一键AI制作歌手信息查询应用

欢迎来到《小5讲堂》 这是《文心智能体平台》系列文章,每篇文章将以博主理解的角度展开讲解。 温馨提示:博主能力有限,理解水平有限,若有不对之处望指正! 目录 文心智能体大赛背景创建应用平台地址快速构建【基础配置】…

前端无样式id或者class等来定位标签

目录: 1、使用背景2、代码处理 1、使用背景 客户使用我们产品组件,发现替换文件,每次替换都会新增如下的样式,造就样式错乱,是组件的文件,目前临时处理的话就是替换文件时删除新增的样式,但是发…

【JVM】阅读Class字节码:常量池

目录 基本结构解析 常量池 常量池简介 如何阅读Class文件中的常量池信息 基本结构解析 Magic(魔数) Magic的唯一作用是确定这个文件是否为一个能被虚拟机所接受的class 文件。魔数值固定为0xCAFEBABE,不会改变。 常量池 常量池简介 下图是反编译过后的字节码文…

TensorFlow的学习

0.基础概念 术语表: https://developers.google.cn/machine-learning/glossary?hlzh-cn#logits 1.快速入门 https://tensorflow.google.cn/tutorials/quickstart/beginner?hlzh-cn 2.基于Keras进行图像分类 https://tensorflow.google.cn/tutorials/keras/cl…

gradle 共享存储挂载缓存目录的问题

2个任务同时构建的时候,报错如上。 原因:挂载目录的问题导致的,挂在最小粒度的目录下。 /home/app/.gradle/caches/modules-2/files-2.1 挂载到这个级别的目录下。