首页 > 其他分享 >Unity 文字转语音 Microsoft Interop.SpeechLib使用

Unity 文字转语音 Microsoft Interop.SpeechLib使用

时间:2023-11-30 16:14:05浏览次数:34  
标签:Log string Interop Unity SpVoice 语音 Debug Microsoft voiceToken

需要提前做以下设置:

  1. Unity中需要设置:
    Editor -> Project Settings -> Player -> Other Settings -> Api Compatibility Level -> 选择.Net 4.x

  2. 系统需要提前下载中文语音包
    Win11可以在 设置 -> 时间和语言 -> 语音 中查看已下载的语音

    其中Huihui Yaoyao Kangkang为中文语音,下面脚本也是这样判断的

    如果没有安装语音的话,可以在设置 -> 时间和语言 -> 语言和区域 -> 语言选项中查看安装

脚本

将下面脚本挂载到场景中GameObject上,然后通过其他方法对其进行实例化和调用

using UnityEngine;
using SpeechLib;
using System;

namespace Project
{
	/// <summary>
	/// 微软文字转语音
	/// </summary>
	public class SpeechLibText_ZH : MonoBehaviour
	{
		//微软组件
		SpVoice _SpVoice;

		/// <summary>
		/// 语音播放
		/// </summary>
		/// <param name="_SpeakText"></param>
		public void SpeakText(string _SpeakText)
		{
			try
			{
				_SpVoice = new SpVoice();
				//音量0-100
				_SpVoice.Volume = 100;
				//语速-10 - 10
				_SpVoice.Rate = 0;


				//设置中文语音包
				ISpeechObjectTokens voices = _SpVoice.GetVoices(string.Empty, string.Empty);
				ISpeechObjectToken chineseVoice = null;
				ISpeechObjectToken voiceToken = null;

				for (int i = 0; i < voices.Count; i++)
				{
					voiceToken = voices.Item(i);
					if (voiceToken.GetDescription().Contains("Huihui") || voiceToken.GetDescription().Contains("Yaoyao") || voiceToken.GetDescription().Contains("Kangkang"))
					{
						chineseVoice = voiceToken;
						Debug.Log("语音:" + voiceToken.GetDescription());
						break;
					}
				}

				if (chineseVoice != null)
				{
					_SpVoice.Voice = chineseVoice as SpObjectToken;
                }
                else
                {
					Debug.Log("未检索到语音包,使用默认语音");
					_SpVoice.Voice = _SpVoice.GetVoices(string.Empty, string.Empty).Item(0);
				}

				//开始执行 异步朗读
				_SpVoice.Speak(_SpeakText, SpeechVoiceSpeakFlags.SVSFlagsAsync);

			}
			catch (Exception e)
			{
				Debug.Log($"播放失败原因:" + e.Message);
			}
		}

		/// <summary>
		/// 语音播放暂停
		/// </summary>
		public void Pause()
		{
			try
			{
				_SpVoice.Pause();
			}
			catch (Exception e)
			{
				Debug.Log($"暂停失败 原因: {e.Message}");
			}
		}

		/// <summary>
		/// 语音播放继续
		/// </summary>
		public void Resume()
		{
			try
			{
				_SpVoice.Volume = (int)(GameEntry.Setting.GetFloat("SFXVolume") * 100);
				if (GameEntry.Setting.GetBool("SFXMuted"))
				{
					_SpVoice.Volume = 0;
				}
				_SpVoice.Resume();

			}
			catch (Exception e)
			{

				Debug.Log($"继续播放失败: {e.Message}");
			}
		}

		/// <summary>
		/// 语音播放停止
		/// </summary>
		public void StopPlaying()
		{
			try
			{
				_SpVoice.Speak(string.Empty, SpeechVoiceSpeakFlags.SVSFPurgeBeforeSpeak);//停止
			}
			catch (Exception e)
			{

				Debug.Log($"停止失败: {e.Message}");
			}
		}
	}
}

标签:Log,string,Interop,Unity,SpVoice,语音,Debug,Microsoft,voiceToken
From: https://www.cnblogs.com/su-make/p/17858503.html

相关文章

  • Unity屏幕适配的3个妙招
    屏幕适配是面试中必问的一个题目,今天给大家说说怎么样做屏幕适配。对惹,这里有一个游戏开发交流小组,希望大家可以点击进来一起交流一下开发经验呀!设计分辨率大家都好理解,那么什么是适配策略呢?假设我们以设计分辨率是960x640为例,我们要适配到1920x1080上面,大家会发现,这个怎......
  • spine 3.8.75 导出到unity
    下载spine-unity运行库spine-unity-3.8-2021.unitypackagehttp://zh.esotericsoftware.com/spine-unity-download/?eqid=97a447270004c44a0000000564268a631.导出文件把  (1).atlas修改成 (1).atlas.txt2.JSON文件版本号"spine":"3.8.75"修改成"spine":&quo......
  • Unity版本使用情况统计(更新至2023年10月)
    本期UWA发布的内容是第十三期Unity版本使用统计,统计周期为2023年5月至2023年10月,数据来源于UWA网站(www.uwa4d.com)性能诊断提测的项目。希望给Unity开发者提供相关的行业趋势,了解近半年来哪些Unity版本的使用概率更高。2023年5月-2023年10月版本分布 以近半年的数据统计来......
  • Wpf 第三方Mvvm包(mvvmLight/Microsoft.Toolkit.Mvvm/CommunityToolkit.Mvvm)
    十年河东,十年河西,莫欺少年穷学无止境,精益求精 mvvmLight和 Microsoft.Toolkit.Mvvm已被Nuget弃用且不再更新,在此不作说明CommunityToolkit.Mvvm是NetCore版本引用包,详情参考:WPFMVVM框架:CommunityToolkit.Mvvm包使用介绍1、wpf项目中使用 CommunityToolkit.Mvvm(NetCo......
  • Unity DOTS Component概述
    最近DOTS终于发布了正式的版本,我们来分享以下DOTS里面地几个关键概念,方便大家上手学习掌握UnityDOTS开发。UnityDOTS中Entity作为实体不直接去存放数据,而是将数据以一个个的组件为载体来存放起来。每个Entity会得到一些不同的ComponentData的组合,这些组合代表着不同的Entity......
  • Unity DOTS World Entity ArchType Component EntityManager System概述
    最近DOTS终于发布了正式的版本,我们来分享以下DOTS里面地几个关键概念,方便大家上手学习掌握UnityDOTS开发。UnityDOTS中所有的Entities都是被放到World世界中。每个Entity在它所在的World里面有唯一不同的ID号来区分。DOTS项目中可以同时有多个World。每个World有一个Entity......
  • 【unity】鼠标拖拽实现摄像机围绕物体视角旋转(物体不动、摄像机旋转)
    直接贴效果和源码了usingUnityEngine;publicclassStagitCamController:MonoBehaviour{//旋转的目标点publicTransformtarget;publicfloatdistance=5.0f;publicVector3startRotation;publicfloatxSpeed=120.0f;publicf......
  • Unity 2022 LTS版本的稳定性
    1)Unity2022LTS版本的稳定性2)多个小资源包合并为大资源包的疑问3)启动Unity导入变动的资源时,SingletonScriptableObject 加载不到这是第362篇UWA技术知识分享的推送,精选了UWA社区的热门话题,涵盖了UWA问答、社区帖子等技术知识点,助力大家更全面地掌握和学习。UWA社区主页:commu......
  • Django配置为连接到Microsoft SQL Server
    可以将Django配置为连接到MicrosoftSQLServer2019。为此,你需要更改数据库设置中的一些配置选项。首先,确保你已经安装了django和pyodbc这两个库: pipinstalldjangopyodbc 然后,你需要在settings.py文件中修改DATABASES部分。以下是连接到SQLServer的示例......
  • UE,Unity和WebGL技术对比
    title:UE,Unity和WebGL技术对比banner_img:https://drive.studyinglover.com/api/raw/?path=/photos/blog/background/1679397016745.pngdate:2023-3-2119:00:00tags:-元宇宙-ThreeJSUE,Unity和WebGL技术对比随着科技的不断进步和数字化时代的到来,元宇宙(Metaverse)已......