《阿里云AI产品必知必会系列电子书》——智能语音交互——语音合成QuickStart使用教程

简介: 《阿里云AI产品必知必会系列电子书》——智能语音交互——语音合成QuickStart使用教程

语音合成Quick Start使用教程


一、服务开通以及项目创建请参考:一句话识别Quick Start使用教程


二、通过SDK调用一句话识别服务


1.添加maven依赖


<dependency>
 <groupId>com.aliyun</groupId>
 <artifactId>aliyun-java-sdk-core</artifactId>
 <version>4.5.13</version>
 </dependency>
 <dependency>
 <groupId>com.alibaba.nls</groupId>
 <artifactId>nls-sdk-tts</artifactId>
 <version>2.2.1</version>
</dependency>


2. java SDK Code

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.ByteBuffffer;
import com.alibaba.nls.client.AccessToken;
import com.alibaba.nls.client.protocol.NlsClient;
import com.alibaba.nls.client.protocol.OutputFormatEnum;
import com.alibaba.nls.client.protocol.SampleRateEnum;
import com.alibaba.nls.client.protocol.tts.SpeechSynthesizer;
import com.alibaba.nls.client.protocol.tts.SpeechSynthesizerListener;
import com.alibaba.nls.client.protocol.tts.SpeechSynthesizerResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
 * 此示例演示了:
 * 语音合成API调用。
 * 动态获取token。
 * 流式合成TTS。
 * 首包延迟计算。
 */
public class SpeechSynthesizerDemo {
 private static fifinal Logger logger = LoggerFactory.getLogger(SpeechSynthesizerDemo.class);
 private static long startTime;
 private String appKey;
 NlsClient client;
 public SpeechSynthesizerDemo(String appKey, String accessKeyId, String accessKeySecret) {
 this.appKey = appKey;
 private static SpeechSynthesizerListener getSynthesizerListener() {
 SpeechSynthesizerListener listener = null;
 try {
 listener = new SpeechSynthesizerListener() {
 File f=new File("tts_test.wav");
 FileOutputStream fout = new FileOutputStream(f);
 private boolean fifirstRecvBinary = true;
 //语音合成结束
 @Override
 public void onComplete(SpeechSynthesizerResponse response) {
 //调用onComplete时表示所有TTS数据已接收完成,因此为整个合成数据的延迟。该延迟可能较大,不一定满足实
时场景。
 System.out.println("name: " + response.getName() +
 ", status: " + response.getStatus()+
 ", output fifile :"+f.getAbsolutePath()
 );
 }
 //语音合成的语音二进制数据
 @Override
 public void onMessage(ByteBuffffer message) {
 try {
 if(fifirstRecvBinary) {
 //计算首包语音流的延迟,收到第一包语音流时,即可以进行语音播放,以提升响应速度(特别是实时交互场
景下)。
 fifirstRecvBinary = false;
 long now = System.currentTimeMillis();
 logger.info("tts fifirst latency : " + (now - SpeechSynthesizerDemo.startTime) + " ms");
 }
byte[] bytesArray = new byte[message.remaining()];
 message.get(bytesArray, 0, bytesArray.length);
 fout.write(bytesArray);
 } catch (IOException e) {
 e.printStackTrace();
 }
 }
 @Override
 public void onFail(SpeechSynthesizerResponse response){
 //task_id是调用方和服务端通信的唯一标识,当遇到问题时需要提供task_id以便排查。
 System.out.println(
 "task_id: " + response.getTaskId() +
 //状态码 20000000 表示识别成功
 ", status: " + response.getStatus() +
 //错误信息
 ", status_text: " + response.getStatusText());
 }
 };
 } catch (Exception e) {
 e.printStackTrace();
 }
return listener;
 }
 public void process() {
 SpeechSynthesizer synthesizer = null;
 try {
 //创建实例,建立连接。
 synthesizer = new SpeechSynthesizer(client, getSynthesizerListener());
 synthesizer.setAppKey(appKey);
//设置返回音频的编码格式
 synthesizer.setFormat(OutputFormatEnum.WAV);
 //设置返回音频的采样率
 synthesizer.setSampleRate(SampleRateEnum.SAMPLE_RATE_16K);
 //发音人
 synthesizer.setVoice("siyue");
 //语调,范围是-500~500,可选,默认是0。
 synthesizer.setPitchRate(100);
 //语速,范围是-500~500,默认是0。
 synthesizer.setSpeechRate(100);
 //设置用于语音合成的文本
 synthesizer.setText("欢迎使用阿里巴巴智能语音合成服务,您可以说北京明天天气怎么样啊");
 // 是否开启字幕功能(返回相应文本的时间戳),默认不开启,需要注意并非所有发音人都支持该参数。
 synthesizer.addCustomedParam("enable_subtitle", false);
 //此方法将以上参数设置序列化为JSON格式发送给服务端,并等待服务端确认。
 long start = System.currentTimeMillis();
 synthesizer.start();
 logger.info("tts start latency " + (System.currentTimeMillis() - start) + " ms");
 SpeechSynthesizerDemo.startTime = System.currentTimeMillis();
 //等待语音合成结束
 synthesizer.waitForComplete();
 logger.info("tts stop latency " + (System.currentTimeMillis() - start) + " ms");
 } catch (Exception e) {
 e.printStackTrace();
 } fifinally {
 //关闭连接
 if (null != synthesizer) {
 synthesizer.close();
 }
}
 }
 public void shutdown() {
 client.shutdown();
 }
 public static void main(String[] args) throws Exception {
 String appKey = "";
 String id = "";
 String secret = "";
 String url = ""; //默认值:wss://nls-gateway.cn-shanghai.aliyuncs.com/ws/v1
 if (args.length == 3) {
 appKey = args[0];
 id = args[1];
 secret = args[2];
 } else if (args.length == 4) {
 appKey = args[0];
 id = args[1];
 secret = args[2];
 url = args[3];
 } else {
 System.err.println("run error, need params(url is optional): " + "<app-key> <AccessKeyId> <AccessKeySecret> 
[url]");
 System.exit(-1);
 }
 SpeechSynthesizerDemo demo = new SpeechSynthesizerDemo(appKey, id, secret, url);
 demo.process();
 demo.shutdown();
 }
}


3.填入参数


image.png


4.测试结果


image.png

相关实践学习
达摩院智能语音交互 - 声纹识别技术
声纹识别是基于每个发音人的发音器官构造不同,识别当前发音人的身份。按照任务具体分为两种: 声纹辨认:从说话人集合中判别出测试语音所属的说话人,为多选一的问题 声纹确认:判断测试语音是否由目标说话人所说,是二选一的问题(是或者不是) 按照应用具体分为两种: 文本相关:要求使用者重复指定的话语,通常包含与训练信息相同的文本(精度较高,适合当前应用模式) 文本无关:对使用者发音内容和语言没有要求,受信道环境影响比较大,精度不高 本课程主要介绍声纹识别的原型技术、系统架构及应用案例等。 讲师介绍: 郑斯奇,达摩院算法专家,毕业于美国哈佛大学,研究方向包括声纹识别、性别、年龄、语种识别等。致力于推动端侧声纹与个性化技术的研究和大规模应用。
相关文章
|
1月前
|
人工智能 自然语言处理 语音技术
智能语音交互:AI如何重塑人际沟通###
【10月更文挑战第22天】 本文旨在探讨智能语音交互技术如何深刻改变我们的人际沟通方式,从历史沿革、技术原理、应用领域到未来趋势,全面剖析这一AI技术的魅力与影响。通过生动实例与通俗语言,揭示智能语音交互背后的科技力量,以及它如何让沟通更自然、高效,同时引发关于隐私、伦理等问题的深思。 ###
45 4
|
17天前
|
存储 人工智能 搜索推荐
AI智能语音机器人的基本业务流程
简介: 先画个图,了解下AI语音机器人的基本业务流程。上图是一个AI语音机器人的业务流程,简单来说就是首先要配置话术,就是告诉机器人在遇到问题该怎么回答,这个不同公司不同行业的差别比较大,所以一般每个客户都会配置其个性化的话术。话术配置完成后,需要给账号配置线路,目的就是能够顺利的把电话打出去。线路配完后,就是建立任务了,说白了就是导入电话号码,因为资源有限,不可能导入一批立即打完,所以需要以任务的形式分配给机器人,然后机器人逐个完成。值得一提的是,如果有多条线路,创建任务时建议提供线路选择功能,很多公司的业务不止一个城市,而大家又是比较习惯接听自己所在城市的电话,所以这个选择主
|
2月前
|
自然语言处理 IDE 测试技术
通义灵码史上最全使用教程:秀一秀AI编程新肌肉
通义灵码是阿里云推出的一款智能编码辅助工具,基于通义大模型,提供行级/函数级实时续写、自然语言生成代码、单元测试生成、代码优化、注释生成、代码解释、研发智能问答、异常报错排查等功能。它支持 Visual Studio Code 和 JetBrains IDEs,适配多 IDE 原生设计,帮助开发者高效、流畅地编码。官方提供了详细的下载和安装指南,以及丰富的功能介绍和使用指南。
341 3
|
28天前
|
机器学习/深度学习 人工智能 自然语言处理
智能语音交互:AI如何重塑人际沟通###
【10月更文挑战第27天】 一句话 本文将探讨智能语音交互技术如何深刻改变我们的沟通方式,从简单的命令识别到复杂的情感理解和多模态互动,揭示其背后的技术原理与未来趋势。 ###
|
3月前
|
机器学习/深度学习 人工智能 编解码
深入探索AI文生语音技术的奥秘:从文本输入到逼真语音输出的全链条语音合成过程解析
【9月更文挑战第2天】深入探索AI文生语音技术的奥秘:从文本输入到逼真语音输出的全链条语音合成过程解析
 深入探索AI文生语音技术的奥秘:从文本输入到逼真语音输出的全链条语音合成过程解析
|
4月前
|
人工智能
Suno教程篇:音乐小白也能使用Suno AI零门槛创作音乐?从此只听AI写的歌!
本文是一篇Suno AI音乐创作工具的教程,指导音乐小白如何使用Suno AI零门槛创作音乐,包括准备工作、基础使用、歌曲风格的选择、歌词填入技巧,以及通过实例展示如何为不同场景生成背景音乐。
Suno教程篇:音乐小白也能使用Suno AI零门槛创作音乐?从此只听AI写的歌!
|
4月前
|
机器学习/深度学习 人工智能 自然语言处理
还不懂如何与AI高效交流?保姆级且全面的chatGPT提示词工程教程来啦!(一)基础篇
这篇文章是一篇保姆级的教程,旨在全面介绍如何与AI进行高效交流,包括ChatGPT的前世今生、应用场景以及提问的基础技巧。
还不懂如何与AI高效交流?保姆级且全面的chatGPT提示词工程教程来啦!(一)基础篇
|
3月前
|
人工智能 Linux iOS开发
AI超强语音转文本SenseVoice,本地化部署教程!
【9月更文挑战第7天】以下是AI超强语音转文本工具SenseVoice的本地化部署教程:首先确保服务器或计算机满足硬件和软件要求,包括处理器性能、内存及操作系统等。接着从官网下载适合的安装包,并按操作系统进行安装。配置音频输入设备和语言模型后,启动SenseVoice并测试其语音转文本功能。最后根据实际使用情况进行优化调整,并定期更新以获取最新功能。详细步骤需参照官方文档。
680 1
|
3月前
|
机器学习/深度学习 人工智能 测试技术
AI计算机视觉笔记二十五:ResNet50训练部署教程
该项目旨在训练ResNet50模型并将其部署到RK3568开发板上。首先介绍了ResNet50网络,该网络由何恺明等人于2015年提出,解决了传统卷积神经网络中的退化问题。项目使用车辆分类数据集进行训练,并提供了数据集下载链接。环境搭建部分详细描述了虚拟环境的创建和所需库的安装。训练过程中,通过`train.py`脚本进行了15轮训练,并可视化了训练和测试结果。最后,项目提供了将模型转换为ONNX和PT格式的方法,以便在RK3568上部署。
|
4月前
|
数据采集 人工智能 自然语言处理
从零开始学AI:Python完整操作教程
本教程详尽介绍了利用Python进行人工智能操作的核心方法与应用场景,涵盖数据预处理、模型训练与评估全过程。通过源码解析和实战案例(如房价与股票价格预测),读者将学会构建与测试AI模型,并理解其优缺点。教程还探讨了AI在智能客服与医疗诊断等领域的应用,以及如何通过单元测试确保代码质量。通过本教程,初学者能够快速掌握AI基本技能,为未来的技术发展奠定坚实基础。
446 4
从零开始学AI:Python完整操作教程

热门文章

最新文章