springboot微软文本转语音(texttospeach) java实现微软文本转语音

java实现微软文本转语音(TTS)经验总结

  • 官网地址:

    https://docs.microsoft.com/zh-cn/azure/cognitive-services/speech-service/quickstarts/setup-platform?tabs=windows%2Cubuntu%2Cdotnet%2Cjre%2Cmaven%2Cnodejs%2Cmac%2Cpypi&pivots=programming-language-java

  • 参数文档和其他文档

    https://docs.microsoft.com/zh-cn/java/api/com.microsoft.cognitiveservices.speech.speechconfig?view=azure-java-stable#com-microsoft-cognitiveservices-speech-speechconfig-fromsubscription(string-string)

  • 选到语音名称

    在ssml选一个语音,会生成到左边代码里,voice name=‘xxxxxx’

    https://azure.microsoft.com/zh-cn/services/cognitive-services/text-to-speech/#features

一、直接上代码

方式一:直接调用

  <dependency>
      <groupId>com.microsoft.cognitiveservices.speech</groupId>
      <artifactId>client-sdk</artifactId>
      <version>1.12.1</version>
  </dependency>

@PostMapping("/text-to-url")
    @ApiOperation("地址识别")
    public Result getArea(String text) {
        SpeechConfig speechConfig = SpeechConfig.fromSubscription("你的apiKey", "eastasia");//key,地区
        speechConfig.setSpeechSynthesisLanguage("zh-CN");//语言
        speechConfig.setSpeechSynthesisVoiceName("zh-CN-XiaoxiaoNeural");//语言名称
     	 speechConfig.setSpeechSynthesisOutputFormat(SpeechSynthesisOutputFormat.Riff24Khz16BitMonoPcm);
        SpeechSynthesizer synthesizer = new SpeechSynthesizer(speechConfig, null);
        SpeechSynthesisResult result = synthesizer.SpeakText(text);
        AudioDataStream stream = AudioDataStream.fromResult(result);
        stream.saveToWavFile("D:/file.wav");//生成位置
        stream.close();
        return new Result();
    }

方式二:ssml(因为别人写过了,我这边就不写了,实测不好用,看了官方文档,写了方式一)

  • 参考地址:http://t.zoukankan.com/aohongzhu-p-15174381.html

  • 参考地址的原文地址:https://www.cnblogs.com/aohongzhu/p/15174381.html

改进(退化成没有redis)

import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;
import javax.net.ssl.HttpsURLConnection;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Date;
@Component
@Slf4j
public class Authentication {
    private String assessToken = null;//token缓存
    private Date setTime = null;//设置的有效时间
    /**
     * @param token   新获取的token
     *
     */
    private void setToken(String token) {
        this.assessToken = token;
        this.setTime = new Date(new Date().getTime() + TtsConst.ACCESS_TOKEN_EXPIRE_TIME * 1000L);
    }
    /**
     * 判断是否在有效期前
     * @return token
     */
    private String getAssessToken() {
        Date date = new Date();
        if (date.getTime() - this.setTime.getTime() < 0L) {
            return this.assessToken;
        }
        return null;
    }
    public String genAccessToken() {
        InputStream inSt;
        HttpsURLConnection webRequest;

        try {
            String accessToken = this.getAssessToken();
            if (StringUtils.isEmpty(accessToken)) {
                webRequest = HttpsConnection.getHttpsConnection(TtsConst.ACCESS_TOKEN_URI);
                webRequest.setDoInput(true);
                webRequest.setDoOutput(true);
                webRequest.setConnectTimeout(5000);
                webRequest.setReadTimeout(5000);
                webRequest.setRequestMethod("POST");

                byte[] bytes = new byte[0];
                webRequest.setRequestProperty("content-length", String.valueOf(bytes.length));
                webRequest.setRequestProperty("Ocp-Apim-Subscription-Key", TtsConst.API_KEY);
                webRequest.connect();

                DataOutputStream dop = new DataOutputStream(webRequest.getOutputStream());
                dop.write(bytes);
                dop.flush();
                dop.close();

                inSt = webRequest.getInputStream();
                InputStreamReader in = new InputStreamReader(inSt);
                BufferedReader bufferedReader = new BufferedReader(in);
                StringBuilder strBuffer = new StringBuilder();
                String line = null;
                while ((line = bufferedReader.readLine()) != null) {
                    strBuffer.append(line);
                }

                bufferedReader.close();
                in.close();
                inSt.close();
                webRequest.disconnect();

                accessToken = strBuffer.toString();
                //设置accessToken的过期时间为9分钟
                this.setToken(accessToken);
                log.info("获取微软tss token成功,token: {}", accessToken);
            }
            return accessToken;
        } catch (Exception e) {
            log.error("生成微软tss token失败,错误信息:{}", e.getMessage());
        }
        return null;
    }
}
  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
Spring Boot是一个用于构建独立的、生产级别的Spring应用程序的框架。Spring Boot可以快速方便地搭建一个基于Java的后端开发环境。 要实现文字语音功能,可以利用Spring Boot中提供的相关技术和库来实现。以下是一个基本的实现思路: 1. 引入相关依赖:在项目的pom.xml文件中引入Spring Boot Web和Spring Boot语音换的依赖。例如,可以引入Spring Boot Starter Web和Google Text-to-Speech依赖。 2. 创建Controller:创建一个Spring MVC的Controller类来处理文字语音的请求。可以添加一个POST接口,接收需要换的文字作为参数。 3. 调用语音换API:在Controller中使用Google Text-to-Speech语音换API,将文字换为语音文件。一般来说,这些API提供了将文字换为音频文件的功能。你可以将换后的音频保存到本地文件系统/云存储中,并返回音频文件的路径或URL给客户端。 4. 处理换结果:根据API返回的结果,可以处理换成功或失败的情况。如果换成功,可以返回成功的消息和音频文件路径;如果换失败,可以返回失败的消息和错误码。 5. 编写前端界面:为了方便使用,可以编写一个简单的前端界面,让用户可以输入需要换的文字。可以使用HTML、CSS和JavaScript等前端技术来实现。 6. 部署和运行:将完成的Spring Boot应用程序部署到服务器上,并启动应用程序。你可以通过访问前端界面,输入需要换的文字来实现文字语音的功能。 总的来说,使用Spring Boot可以快速实现文字语音功能。通过引入相关的依赖和使用语音换API,结合Spring MVC的控制器和前端界面,可以方便地构建一个具有文字语音功能的应用程序。
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值