[Unity+OpenAI TTS] 集成openAI官方提供的语音合成服务,构建海王暖男数字人

1.简述

        最近openAI官方发布了很多新功能,其中就包括了最新发布的TTS语音合成服务的api接口。说到这个语音合成接口,大家可能会比较陌生,但是说到chatgpt官方应用上的聊天机器人,那个台湾腔的海王暖男的声音,可能就有印象了吧。那么从官方文档中,可以发现,openAI提供的TTS服务中,就包含了这个声音可选。经过我的实测发现,openAI的语音合成效果相当的出色,在语气、断句等方面有非常好的表现,所以很值得将这个语音合成服务集成到我的AI二次元项目工具包里,为水友们提供更多的选择。

2.API接口说明

       1)语音合成模型

        根据官方文档的说明,open AI的语音合成服务提供了两种合成质量的模型

        可选模型包括:tts-1以及tts-1-hd两种,其中tts-1-hd的模型,合成出来的声音质量更高,但是需要注意的是,hd模型的价格会更高,

       2)声音选择

        在可选声音方面,官方提供了六种可选的声音,在调用语音合成API时,在发送的报文中设置选择的声音即可。

        3)API报文格式

        根据官方提供的示例,可知道语音合成的api地址及为:

     https://api.openai.com/v1/audio/speechicon-default.png?t=N7T8https://api.openai.com/v1/audio/speech        报文结构中,需要发送带有model、input以及voice为关键字的json字符串。

curl https://api.openai.com/v1/audio/speech \-H "Authorization: Bearer $OPENAI_API_KEY" \-H "Content-Type: application/json" \-d '{"model": "tts-1","input": "Today is a wonderful day to build something people love!","voice": "alloy"}' \--output speech.mp3

3.示例代码

        unity端调用open AI的语音合成api的示例代码如下:

     [SerializeField] private string api_key=string.Empty;//apikey[SerializeField] private ModelType m_ModelType = ModelType.tts_1;//模型[SerializeField] private VoiceType m_Voice = VoiceType.onyx;//声音[SerializeField] private string m_PostURL = string.Empty; private void Awake(){m_PostURL = "https://api.openai.com/v1/audio/speech";}private IEnumerator GetVoice(string _msg, Action<AudioClip, string> _callback){using (UnityWebRequest request = UnityWebRequest.Post(m_PostURL, new WWWForm())){PostData _postData = new PostData{model = m_ModelType.ToString().Replace('_','-'),input = _msg,voice= m_Voice.ToString()};string _jsonText = JsonUtility.ToJson(_postData).Trim();byte[] data = System.Text.Encoding.UTF8.GetBytes(_jsonText);request.uploadHandler = (UploadHandler)new UploadHandlerRaw(data);request.downloadHandler = new DownloadHandlerAudioClip(m_PostURL, AudioType.MPEG);request.SetRequestHeader("Content-Type", "application/json");request.SetRequestHeader("Authorization", string.Format("Bearer {0}", api_key));yield return request.SendWebRequest();if (request.responseCode == 200){AudioClip audioClip = ((DownloadHandlerAudioClip)request.downloadHandler).audioClip;_callback(audioClip, _msg);}else{Debug.LogError("语音合成失败: " + request.error);}}}#region 数据定义/// <summary>/// 发送的报文/// </summary>[Serializable]public class PostData{public string model = string.Empty;//模型名称public string input = string.Empty;//文本内容public string voice = string.Empty;//声音}/// <summary>/// 模型类型/// </summary>public enum ModelType{tts_1,tts_1_hd}/// <summary>/// 声音类型/// </summary>public enum VoiceType{alloy,echo,fable,onyx,nova,shimmer}#endregion

4. Unity端数字人配置

        项目的源码已经发布到Github了,我们可以直接下载,并导入到unity中使用,要求unity版本在2020.3.44及以上。导入工具包之后,可以在Scene文件夹下,找到示例场景,在场景中找到TTS->openAI对象,该对象上就维护了openAI提供的语音合成服务的代码。

        使用这个模块,首先我们需要注册一个openAI账号,并创建一个api key,将apikey填写到脚本对应的apikey属性上。然后将TTS脚本配置到chatAgent脚本上即可。

        详细配置,可以到我的B站主页,查看本期视频的配置过程。

5.结束语  

        这次的文章简单介绍了如何使用open AI官方提供的语音合成服务api,实现高质量的语音合成功能,让我们的数字人具备情感丰富,语气逼真的语音效果。文章所涉及的项目配置过程,可以到B站查看详细配置过程。

[Unity+openAI TTS] chatgpt海王暖男,分分钟搞定,使用openAI官方语音合成服务,打造火热暖心数字人


项目地址传送门:

AI二次元老婆开源项目(unity-AI-Chat-Toolkit):

Github地址:https://github.com/zhangliwei7758/unity-AI-Chat-Toolkit

Gitee地址:https://gitee.com/DammonSpace/unity-ai-chat-toolkit

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

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

相关文章

轻量封装WebGPU渲染系统示例<38>- 动态构建WGSL材质Shader(源码)

实现原理: 基于宏定义和WGSL功能文件实现 当前示例源码github地址: https://github.com/vilyLei/voxwebgpu/blob/feature/rendering/src/voxgpu/sample/DynamicShaderBuilding.ts 当前示例运行效果: 此示例基于此渲染系统实现&#xff0c;当前示例TypeScript源码如下&#x…

前缀和及差分数组

前缀和 原数组x0x1x2x3x4x5前缀和数组x0x0x1x0x1x2x0x1x2x3x0x1x2x3x4x0x1x2x3x4x5前缀和数组代数形式x0’x1’x2’x3’x4’x5’ 计算原数组某区间的和 sum[x1,x2,x3] 利用前缀和计算 x3-x0 x0x1x2x3-x0 x1x2x3 差分数组 x0x1x2x3x4x5原数组x0x1x2x3x4x5差分数组x0x1-x0x…

HTTP四大参数类型及请求参数的方式和如何接收

HTTP 请求中4大参数类型和接收方法。 1、请求头参数head 请求头参数顾名思义&#xff0c;是存放在请求头中发送给服务器的参数&#xff0c;服务器通过解析请求头获取参数内容。通常会存放本次请求的基本设置&#xff0c;以帮助服务器理解并解析本次请求的body体。 参数形式如…

srs的webrtc信令分析

关于webrtc的流信令只有四个 /rtc/v1/publish/&#xff0c;这是推流接口&#xff0c;是推流客户端跟SRS交换SDP的接口 /rtc/v1/play/&#xff0c;这是拉流接口&#xff0c;是拉流客户端跟SRS交换SDP的接口 /rtc/v1/whip/&#xff0c;这也是推流接口&#xff0c;作用是也是交换…

C#开发的OpenRA游戏之属性RenderSprites(8)

C#开发的OpenRA游戏之属性RenderSprites(8) 本文开始学习RenderSprites属性,这个属性是跟渲染有关的,因此它就摄及颜色相关的内容,所以我们先来学习一下调色板,这是旧游戏的图片文件保存的格式,如果放在现代来看,不会再采用这种方法,毕竟现在存储空间变大,便宜了,并…

idea编译问题导致接口调用不通

问题背景&#xff1a; 1.idea版本2021&#xff0c;springboot&#xff0c;父子maven项目&#xff0c;创建了一个新的model。启动之后&#xff0c;调试controller接口&#xff0c;接口一直报404。 问题分析&#xff1a; 1.查看编译后的文件&#xff0c;发现java代码一直没编译…

Vue3使用dataV报错问题解决

DataV官网&#xff1a;https://datav-vue3.jiaminghi.com/guide/ vue2中是没有问题的&#xff0c;这是第一次在vue3中使用发现的报错问题 报错问题 首先安装&#xff1a; pnpm add dataview/datav-vue3 1. 全局注册报错 然后main.ts全局注册 import { createApp } f…

html网站-关于发展历程的案例

一、案例一 1.效果图&#xff1a; 2.代码&#xff1a; 所用到的文件自行在官网下载&#xff0c;也可在git上拉取。 <!DOCTYPE html> <html><head><meta http-equiv"Content-Type" content"text/html; charsetutf-8" /><meta…

USB驱动开发基础

USB标准 USB1.0&#xff0c; 1996&#xff0c;低速1.5Mbps和高速12Mbps&#xff0c;USB1.1 iMac G3&#xff0c;Type A和Type B接口USB 2.0 2000&#xff0c; 480Mpbs&#xff0c;Type A/B/C接口、Micro A/BUSB 3.0 5Gbps, 随着USB 3.2命名规定&#xff0c;现在也叫USB 3.2 Ge…

Nginx模块开发之http过滤器filter

文章目录 什么是过滤模块Nginx相关数据结构介绍ngx_module_t的数据结构ngx_http_module_t数据结构ngx_command_s数据结构 相关宏定义filter&#xff08;过滤器&#xff09;实现Nginx模块开发流程Nginx 模块执行具体实现流程create_loc_confmerge_loc_confpostconfiguration修改…

使用OkHttp库爬取百度云视频详细步骤

目录 摘要 一、OkHttp库简介 二、爬虫基本概念 三、使用OkHttp库爬取百度云视频 1、发送HTTP请求 2、处理响应 3、下载文件 四、可能遇到的问题及解决方案 五、注意事项 总结与建议 摘要 本文将详细介绍如何使用OkHttp库爬取百度云视频。文章首先简要介绍OkHttp库和…

GPIO模式详解:推挽/开漏/浮空/上拉/下拉/施密特(迟滞)输入

GPIO(General Purpose Input Output)可用于执行数字输入或输出功能。典型的应用包括从/向模拟或数字传感器/设备读写数值、驱动LED、为I2C通信驱动时钟、生成外部组件的触发、发出中断等。 文章目录 1 GPIO简介2 输出模式2.1 推挽输出2.2 开漏输出 3 输入模式3.1 高阻态(浮空)、…

推荐一款适合做智慧旅游的前端模板

目录 前言 一、功能介绍 二、前端技术介绍 三、功能及界面设计介绍 1、数据概览 2、车辆监控 3、地图界面 4、其它功能 四、扩展说明 总结 前言 智慧旅游是一种全新的旅游业务模式&#xff0c;它充分利用先进的信息技术&#xff0c;提升旅游体验&#xff0c;优化旅游管…

【Axure高保真原型】树形表格

今天和大家分享树形表格的原型模板&#xff0c;点击树的箭头可以打开或者收起子节点&#xff0c;点击表格内容&#xff0c;可以选中该行内容实现高亮变色效果&#xff0c;树形表格是通过中继器制作的&#xff0c;使用简单&#xff0c;只需要按要求填写中继器表格即可&#xff0…

2023亚太杯数学建模思路 - 案例:粒子群算法

文章目录 1 什么是粒子群算法&#xff1f;2 举个例子3 还是一个例子算法流程算法实现建模资料 # 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 什么是粒子群算法&#xff1f; 粒子群算法&#xff08;Pa…

安防监控视频融合平台EasyCVR定制化页面开发

安防监控EasyCVR视频汇聚平台基于云边端智能协同&#xff0c;支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。安防视频平台EasyCVR拓展性强&#xff0c;视频能力丰富&#xff0c;具体可实现视频监控直播、视频轮播、视频录像、云存储、回放与检索…

Django 模型和Admin站点管理(三)

一、定义模型 &#xff08;1&#xff09; 创建模型类&#xff0c;必须要继承自 models.Model from django.db import models# Create your models here. #设计数据库 #创建模型 class UserModel(models.Model):namemodels.CharField(max_length30) #对应于SQL name varchar(30…

K8s实战RestartPoliy策略

一、默认策略为Always cmd.yaml apiVersion: v1 kind: Pod metadata:name: myapp-pod labels:app: myapp spec: containers:- name: myapp-container image: busyboxcommand: [sh, -c, echo OK!&& sleep 60]首先我们根据这个yaml创建一个测试的pod 执行命令 kubec…

深度之眼Paper带读笔记GNN.08.GCN(下)

文章目录 前言细节四&#xff1a;卷积核介绍图卷积核初代目图卷积核二代目契比雪夫多项式例子小结 GCN公式推导 实验设置和结果分析数据集节点分类任务消息传递方式比较运行效率 总结关键点创新点启发点 代码复现train.pyutil.pymodel.pylayer.py 作业 前言 本课程来自深度之眼…

基于单片机直流电机调速(proteus仿真+源程序)

一、系统方案 1、本设计采用这51单片机作为主控器。 2、转速值送到液晶1602显示。 3、按键设加减速&#xff0c;开始暂停、正反转。 二、硬件设计 原理图如下&#xff1a; 三、单片机软件设计 1、首先是系统初始化 en0; rw0; write_com(0x01); //lcd初始化 write_com(0x38)…