Java对接讯飞语音合成(流式版)WebAPI 经验分享

本文分享了在开发字幕酱在线工具过程中,如何利用Java对接讯飞的语音合成流式WebAPI,包括接口特点、发音人选择,并提到了小语种的使用注意事项与编码要求。
摘要由CSDN通过智能技术生成

最近在开发字幕酱(https://www.zimujiang.com/),一个自动生成字幕的在线工具,遇到使用讯飞语音合成的需求,这边记录下

讯飞语音合成流式接口将文字信息转化为声音信息,同时提供了众多极具特色的发音人(音库)供您选择,可以在 这里 在线体验发音人效果。
该语音能力是通过Websocket API的方式给开发者提供一个通用的接口。Websocket API具备流式传输能力,适用于需要流式数据传输的AI服务场景。相较于SDK,API具有轻量、跨语言的特点;相较于HTTP API,Websocket API协议有原生支持跨域的优势。

原WebAPI普通版本接口(http[s]: //api.xfyun.cn/v1/service/v1/tts) 不再对外开放,已经使用WebAPI普通版本的用户仍可使用,同时也欢迎体验新版流式接口并尽快完成迁移~

小语种及少数民族方言

  • 目前新增:韩语、日语、维吾尔语、藏语、法语、俄语、西班牙语、印地语、德语、越南语、巴西葡萄牙语、意大利语、葡萄牙语、泰语、乌尔都语;
  • 使用小语种时上传文本编码必须使用unicode编码且设置tte=unicode(unicode即utf16小端的编码方式);
  • 需先在控制台开启小语种发音人才可合成小语种,否则报错11200。
package com.iflytek.voicecloud.webapi.demo;

import com.google.gson.Gson;
import com.google.gson.JsonObject;
import okhttp3.*;
import okio.ByteString;

import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URL;
import java.nio.charset.Charset;
import java.text.SimpleDateFormat;
import java.util.Base64;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;

/**
 * 语音合成流式 WebAPI 接口调用示例 接口文档(必看):https://www.xfyun.cn/doc/tts/online_tts/API.html
 * 语音合成流式WebAPI 服务,发音人使用方式:登陆开放平台https://www.xfyun.cn/后,到控制台-我的应用-语音合成-添加试用或购买发音人,添加后即显示该发音人参数值
 * 错误码链接:https://www.xfyun.cn/document/error-code (code返回错误码时必看)
 * 小语种需要传输小语种文本、使用小语种发音人vcn、ent=mtts、tte=unicode以及修改文本编码方式
 * @author iflytek
 */

public class WebTTSWS {
    private static final String hostUrl = "https://tts-api.xfyun.cn/v2/tts"; //http url 不支持解析 ws/wss schema
    private static final String appid = "XXXXXXXX";//到控制台-语音合成页面获取
    private static final String apiSecret = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&#
AI虚拟人Java对接API实现主要包括以下步骤: 1. 注册开发者账号并创建智能客服应用。 2. 获取AI虚拟人API的AppID、API Key和API Secret。 3. 在Java项目中引入AI虚拟人API的SDK。 4. 根据API文档编写Java代码,调用API接口实现对话交互。 以下是一个简单的示例代码: ```java import com.iflytek.cloud.*; import java.util.Scanner; public class VirtualAssistantDemo { public static void main(String[] args) { // 初始化AI虚拟人SDK SpeechUtility.createUtility(SpeechConstant.APPID + "=your_appid"); // 创建AI虚拟人对象 AIUIAgent agent = AIUIAgent.createAgent("", ""); // 设置参数 AIUIEvent event = new AIUIEvent(AIUIConstant.CMD_PARAM); event.putParam(AIUIConstant.PARAM_SPEECH_TIMEOUT, "60000"); event.putParam(AIUIConstant.PARAM_SKIP_VAD, "false"); event.putParam(AIUIConstant.PARAM_WAKEUP_MODE, "ivw"); // 发送事件 agent.sendMessage(event); // 创建听写对象 SpeechRecognizer recognizer = SpeechRecognizer.createRecognizer(); recognizer.setParameter(SpeechConstant.DOMAIN, "iat"); recognizer.setParameter(SpeechConstant.LANGUAGE, "zh_cn"); recognizer.setParameter(SpeechConstant.ACCENT, "mandarin"); // 开始识别 recognizer.startListening(new RecognizerListener() { @Override public void onResult(RecognizerResult recognizerResult, boolean b) { // 解析识别结果 String result = recognizerResult.getResultString(); System.out.println("Recognized text: " + result); // 创建AI虚拟人消息 AIUIMessage message = new AIUIMessage(AIUIConstant.CMD_WRITE, 0, 0, "text", result, null); // 发送消息 agent.sendMessage(message); } // 实现其他回调方法 // ... }); // 等待输入结束 Scanner scanner = new Scanner(System.in); scanner.nextLine(); // 停止听写 recognizer.stopListening(); recognizer.destroy(); // 销毁AI虚拟人对象 agent.destroy(); } } ``` 在上述示例中,我们首先初始化了AI虚拟人SDK,并创建了一个AIUIAgent对象。然后通过AIUIEvent设置了一些参数,并发送了一个CMD_PARAM事件。接着创建了一个SpeechRecognizer对象用于语音识别,并在startListening()方法中实现了一个RecognizerListener,当识别结果返回时会调用onResult()方法,我们在该方法中创建了一个AIUIMessage对象,并通过sendMessage()方法将其发送给AIUIAgent对象。 最后,我们等待用户输入结束后停止了语音识别,并销毁了AIUIAgent对象。需要注意的是,以上代码仅为示例,实际应用中还需要根据具体需求进行适当的修改和完善。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值