【阿里云】文本转语音— 阿里云语音合成,文本转语音工具类

news/2024/10/30 17:18:20/

目录

一、导入SDK坐标

二、文本转语音 —步骤和工具类

1.登录阿里云账号,创建一个语音合成项目和创建用户并设置权限。

2.获取appKey、accessKeyId、accessKeySecret在相应位置进行填写。

3.相应位置填写自己需要保存的本地路径。意思就是说,自己定一个转化的语音存放在本地的一个位置。

4.测试,调用工具类中的方法uploadSoundOSS(String text) ,传入一个自己需要转化的文本信息进行测试就可以了


一、导入SDK坐标

<dependency><groupId>com.alibaba.nls</groupId><artifactId>nls-sdk-tts</artifactId><version>2.2.1</version>
</dependency>

二、文本转语音 —步骤和工具类

1.登录阿里云账号,创建一个语音合成项目创建用户并设置权限

2.获取appKey、accessKeyId、accessKeySecret在相应位置进行填写。

3.相应位置填写自己需要保存的本地路径。意思就是说,自己定一个转化的语音存放在本地的一个位置。

4.测试,调用工具类中的方法uploadSoundOSS(String text) ,传入一个自己需要转化的文本信息进行测试就可以了。

package com.tanhua.server.utils;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 java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.util.UUID;//文字转语音
public class SoundOSS {private static String appKey = "自己的appKey";private static String accessKeyId = "自己的accessKeyId";private static String accessKeySecret = "自己的accessKeySecret";static NlsClient client ;public static String uploadSoundOSS(String text) {String url = UUID.randomUUID().toString().replace("-", "");SpeechSynthesizerDemo("");//自己选一个本地路径填写File f =new File("需要保存在本地的路径"+url+".wav");process(text,f);client.shutdown();return f.getAbsolutePath();}public static void  SpeechSynthesizerDemo(String url) {AccessToken accessToken = new AccessToken(accessKeyId, accessKeySecret);try {accessToken.apply();if(url.isEmpty()) {client = new NlsClient(accessToken.getToken());}else {client = new NlsClient(url, accessToken.getToken());}} catch (IOException e) {e.printStackTrace();}}private static SpeechSynthesizerListener getSynthesizerListener(File f) {SpeechSynthesizerListener listener = null;try {listener = new SpeechSynthesizerListener() {FileOutputStream fout = new FileOutputStream(f);private boolean firstRecvBinary = true;//语音合成结束@Overridepublic void onComplete(SpeechSynthesizerResponse response) {//调用onComplete时表示所有TTS数据已接收完成,因此为整个合成数据的延迟。该延迟可能较大,不一定满足实时场景。System.out.println("name: " + response.getName() +", status: " + response.getStatus()+", output file :"+ f.getAbsolutePath());}//语音合成的语音二进制数据@Overridepublic void onMessage(ByteBuffer message) {try {if(firstRecvBinary) {//计算首包语音流的延迟,收到第一包语音流时,即可以进行语音播放,以提升响应速度(特别是实时交互场景下)。firstRecvBinary = false;}byte[] bytesArray = new byte[message.remaining()];message.get(bytesArray, 0, bytesArray.length);fout.write(bytesArray);} catch (IOException e) {e.printStackTrace();}}@Overridepublic 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 static void process(String text,File f) {SpeechSynthesizer synthesizer = null;try {//创建实例,建立连接。synthesizer = new SpeechSynthesizer(client,getSynthesizerListener(f));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(text);// 是否开启字幕功能(返回相应文本的时间戳),默认不开启,需要注意并非所有发音人都支持该参数。synthesizer.addCustomedParam("enable_subtitle", false);//此方法将以上参数设置序列化为JSON格式发送给服务端,并等待服务端确认。long start = System.currentTimeMillis();synthesizer.start();//等待语音合成结束synthesizer.waitForComplete();} catch (Exception e) {e.printStackTrace();} finally {//关闭连接if (null != synthesizer) {synthesizer.close();}}}}


http://www.ppmy.cn/news/83604.html

相关文章

奥特曼的变身能力如何启发卷积神经网络的图像识别能力?

目录 一、引言 二、奥特曼的变身能力 1. 奥特曼的变身过程 2. 奥特曼的变身能力的启示 三、卷积神经网络的图像识别能力 1. 卷积神经网络的基本原理 2. 卷积神经网络在图像识别中的应用 四、奥特曼的变身能力如何启发卷积神经网络的图像识别能力 1. 奥特曼的变身能力与…

什么是SD-WAN网络及其架构

一、概念 SD-WAN&#xff08;Software-Defined Wide Area Network&#xff09;是一种基于软件定义的广域网技术&#xff0c;它通过虚拟化网络功能和智能路由技术&#xff0c;将多个广域网连接整合成一个统一的、可管理的网络。SD-WAN可以提供更高的网络可靠性、更好的网络性能…

凝聚青年力量,打造数字化人才队伍

当代青年人勇于探索、敢于创新、勤于变革&#xff0c;积极承担社会责任。这与ABeam倡导的「Build Beyond As One.™」的品牌理念不谋而合。ABeam的青年员工是未来社会的中坚力量&#xff0c;也正用他们的青春能量助力ABeam在中国的发展。 01 新兴青年力量 对ABeam而言&#…

【JavaEE进阶】第五节.第一个SpringBoot项目的创建

作者简介&#xff1a;大家好&#xff0c;我是未央&#xff1b; 博客首页&#xff1a;未央.303 系列专栏&#xff1a;JavaEE进阶 每日一句&#xff1a;人的一生&#xff0c;可以有所作为的时机只有一次&#xff0c;那就是现在&#xff01;&#xff01;&#xff01; 文章目录 前…

构建buildroot

使用的是buildroot 2019.02.6版本 1、Target options Buildroot 中的 "Target options" 是一个配置菜单&#xff0c;用于选择目标系统的一些基本选项和属性。这些选项可以影响生成的目标系统的特性、构建方式和部署方式 在 "Target options" 菜单中&#…

二叉树:填充每个节点的下一个右侧节点指针(java)

leetcode116:填充每个节点的下一个右侧节点指针 leetcode原题链接&#xff1a;题目描述递归解法一递归方法二&#xff08;效率更高&#xff09;二叉树专题 leetcode原题链接&#xff1a; 116题&#xff1a;填充每个节点的下一个右侧节点指针 题目描述 给定一个 完美二叉树 &a…

Python获取北上广深历史天气数据并做数据可视化

前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 知识点: 动态数据抓包 requests发送请求 结构化非结构化数据解析 开发环境: 开发环境: python 3.8 运行代码 pycharm 2022.3.2 辅助敲代码 专业版 模块使用&#xff1a; requests 发送请求 pip install requests par…

洛谷P1042 乒乓球

[NOIP2003 普及组] 乒乓球 题目背景 国际乒联现在主席沙拉拉自从上任以来就立志于推行一系列改革&#xff0c;以推动乒乓球运动在全球的普及。其中 11 11 11 分制改革引起了很大的争议&#xff0c;有一部分球员因为无法适应新规则只能选择退役。华华就是其中一位&#xff0c…