网站备案号怎么查,楼书设计素材网站,邵阳市网站建设,脑洞大开的创意设计关键词
自助机产品、排队呼叫功能、网络喇叭、百度语音合成SDK、微软TTS 阅读建议 对自助机产品功能扩展感兴趣的读者、需要实现远程语音呼叫功能的开发者、想要了解网络喇叭选型及其使用的技术人员、对百度语音合成SDK和微软TTS感兴趣的开发者 阅读时长 预计阅读时长#xf…关键词
自助机产品、排队呼叫功能、网络喇叭、百度语音合成SDK、微软TTS 阅读建议 对自助机产品功能扩展感兴趣的读者、需要实现远程语音呼叫功能的开发者、想要了解网络喇叭选型及其使用的技术人员、对百度语音合成SDK和微软TTS感兴趣的开发者 阅读时长 预计阅读时长15-20分钟。这个阅读时长是基于文章内容的详细程度和技术深度来预估的读者可以在这个时间内较为全面地了解整个项目的需求、解决思路、准备工作以及具体的开发工作。 目录
需求
解决思路
准备工作
开发工作
准备
百度语音合成SDK短文本的使用
申请账号获得授权
调用百度语音合成SDK
微软TTS的使用
获取当前Windows中的发音人信息 调用微软TTS
其他代码 需求
近日公司的自助机产品要在现有自助服务功能的基础上增加一个排队呼叫功能。考虑到现有自助服务需要对申请人进行语音提示新增的排队呼叫发声不能放在本地应另外想办法。
解决思路
经研究采用了网络喇叭的方式本地语音提示仍然采用本机TTS并发声播放另购入一个网络喇叭在需要对排队人员进行呼叫时本机从服务器获取呼叫信息排队号、窗口调用网络喇叭自带的TTS或者使用互联网如百度开放平台的语音合成实现远端喇叭安装在等候区上方播放。
准备工作
网络喇叭的选型由于等候区上方的吊顶周边无电源故选择了一款支持POE供电的网络喇叭。喇叭自带配套软件可实现文本合成、实时采集等功能。
POE供电模块网络喇叭功率20W需要选择单口供电功率20W以上的POE交换机或者供电模块。
将POE交换机连接电源自助机连接网线至POE交换机再从该交换机引出一根网线经由吊顶穿线连接等候区上方的吊装网络喇叭。
开发工作
准备
在Visual Studio中使用Nuget安装Baidu.Aip包
使用Nuget安装System.Speech包并添加“using System.Speech.Synthesis;”的引用
百度语音合成SDK短文本的使用
申请账号获得授权
注册百度开发者平台账号新建应用并申请百度云语音合成服务最终得到API_KEY、Secret_KEY两个参数值。
调用百度语音合成SDK
var API_KEY this.txtAppKey.Text;
var SECRET_KEY this.txtSecreKey.Text;
var _ttsClient new Baidu.Aip.Speech.Tts(API_KEY, SECRET_KEY);
_ttsClient.Timeout 60000; // 修改超时时间
// 可选参数
var option new Dictionary string,object () {{spd,GetStandardSpeed(this.trbSpeed.Value)}, // 语速取值0-15默认为5中语调{vol,GetStandardVolume(this.trbVolume.Value)}, // 音量基础音库取值0-9{per,cbBaiduReader.SelectedIndex}, // 发音人度小美0度小宇1度逍遥基础3度丫丫4{aue,6} //下载的文件格式, 3mp3(default) 4 pcm-16k 5 pcm-8k 6. wav};
// 使用提供的文本和可选参数进行语音合成
var result _ttsClient.Synthesis(this.txtContent.Text.Trim(), option);
// 检查结果的错误代码如果为0或result.Success为真表示合成成功
if (result.Success) // 或 result.ErrorCode为0
{ // 使用MemoryStream来读取合成后的语音数据 using (MemoryStream ms new MemoryStream(result.Data)) { // 使用SoundPlayer来播放语音 using (System.Media.SoundPlayer sp new System.Media.SoundPlayer(ms)) { sp.Play(); } }
}
注由于System.Media.SoundPlayer仅能播放wav故百度语音合成参数“aue”固定位6wav格式。
微软TTS的使用
获取当前Windows中的发音人信息
// 使用SpeechSynthesizer类创建一个语音合成器实例并确保在完成后释放资源
using (SpeechSynthesizer synthesizer new SpeechSynthesizer())
{ // 遍历并获取系统已安装的所有语音 foreach (var voice in synthesizer.GetInstalledVoices()) { // 获取当前语音的详细信息 var info voice.VoiceInfo; // 将语音的名称添加到comboBox1的下拉列表中供用户选择 comboBox1.Items.Add(info.Name); }
} 调用微软TTS
// 使用SpeechSynthesizer类创建一个新的语音合成器实例
using(var synthesizer new SpeechSynthesizer()) {// 将语音输出设置为默认音频设备 synthesizer.SetOutputToDefaultAudioDevice();// 从comboBox1中选择一个语音这里的comboBox1可能是一个下拉列表用于选择不同的语音 synthesizer.SelectVoice(comboBox1.Text);// 设置语音的音量音量值通过调用GetStandardVolume函数和trbVolume控件的值来确定 synthesizer.Volume GetStandardVolume(this.trbVolume.Value);// 设置语音的语速语速值通过调用GetStandardSpeed函数和trbSpeed控件的值来确定 synthesizer.Rate GetStandardSpeed(this.trbSpeed.Value);// 读取txtContent文本框中的内容并去除首尾的空白字符然后使用语音合成器朗读这段文本 synthesizer.Speak(this.txtContent.Text.Trim());
}
其他代码
另外考虑到百度语音合成和微软TTS的音量、语速的取值范围不尽相同故编写二者标准化方法进行转换
// 定义了一个私有方法GetStandardVolume用于根据当前的TTS引擎获取标准音量。
// 入参为微软tts要求的0-100
private int GetStandardVolume(int currentVolume)
{ // 判断当前的TTS引擎是否为百度。 // 如果是百度引擎音量范围0-9则将当前音量乘以0.09作为标准音量返回。 // 如果不是百度引擎则直接返回当前音量。 return currentTTSEngine CurrentTTSEngine.Baidu ? (int)(0.09 * currentVolume) : currentVolume;
} // 定义了一个私有方法GetStandardSpeed用于根据当前的TTS引擎获取标准语速。
//入参为微软tts要求的-10~10
private int GetStandardSpeed(int currentSpeed)
{ // 判断当前的TTS引擎是否为百度。 // 如果是百度引擎语速取值范围0-15则计算标准语速计算方式为当前语速加10后乘以0.75再加0.5最后转换为整数返回。 // 如果不是百度引擎则直接返回当前语速。 return currentTTSEngine CurrentTTSEngine.Baidu ? (int)(0.75 * (currentSpeed 10) 0.5) : currentSpeed;
}
至于上面映射的线性关系参数的确定让AI帮了忙