快捷搜索: 王者荣耀 脱发

科大讯飞语音工具类基于Java SDK的封装使用

目的

基于学习和小项目开发场景的需求,本文章对讯飞开放平台(https://www.xfyun.cn)中关于语音能力(语音合成、语音识别)进行了一定程度的封装,通过引入封装工具包可以便捷的使用在线合成和在线识别能力。

原理

讯飞开放平台提供了基于WebAPI的开发方式,同时也提供了多个平台的SDK开发,而我需要的仅仅是Java环境下的使用(准确的说是基于Java Swing进行桌面应用开发),所以考虑到SDK中已经集成了本地录音和播放的实现,因此基于JavaSDK进行封装使用更加的方便。

在Java SDK中,涉及到语音处理的核心类是听写对象SpeechRecognizer、听写监听器RecognizerListener和合成对象SpeechSynthesizer、合成监听器SynthesizerListener,主要操作则是通过创建听写对象和合成对象,分别进行初始设置,例如设置合成发声的音量、声调、语速、发音人,之后调用听写对象的startListening和合成对象的startSpeaking方法,传入监听器对象进行过程控制和结果解析。

因此,在本次封装中,将一些参数设置进行了默认处理后,提取出较为常用的方法:设置各种参数、开始合成(发声)、听一句话、持续听等。

使用

为了方便大家使用,封装的工具类以JAR包方式提供(下载地址:),并且在JAR包中包含了封装的核心源码供大家阅读,使用过程较为详细,请仔细按照步骤使用:

1、注册讯飞开放平台账号,并创建应用,创建应用后下载Java SDK

注意:经过测试发现SDK中的文件内部绑定了当前的APPID,因此使用本工具包,仍然需要创建自己的应用,并下载属于自己应用的SDK文件。

2、创建Java项目,然后下载JAR包(或者根据后面的核心代码自行封装),将JAR包和下载的SDK中的文件以如下项目结构摆放,并将lib目录中的JAR包添加到项目构建路径中:

3、创建测试类,使用MyYuyin类中的各种静态工具方法,注意:在项目其中时需要初始化一次,调用init方法传入该应用对应的APPID,使用示例如下:

public class TestDemo {

	public static void main(String[] args) {
		// !必须要先进行初始化
		MyYuyin.init("替换为你的应用的APPID");

		// A.合成功能
		MyYuyin.setVoice("aisxping"); // 发音人请参考官网“发音人授权管理”
		MyYuyin.speak("大家好");

		// B.听一句话
		String s = MyYuyin.listen();
		System.out.println("识别到说话内容:" + s);

		// C.持续听写,为了不阻塞,采用线程方式
		new Thread(new Runnable() {

			@Override
			public void run() {
				MyYuyin.startKeepListening();
				while (true) {
					if (MyYuyin.hasNext()) { // 有识别结果
						String string = MyYuyin.getFirstListen(); // 获取队列中第一个识别结果
						System.out.println("识别到说话内容:" + string);
					} else {
						try {
							Thread.sleep(10); // 防止CPU占用过高
						} catch (InterruptedException e) {
							e.printStackTrace();
						}
					}
				}
			}
		}).start();
	}
}

后续,可以将相关的方法应用到界面程序中,通过点击按钮,或者后台线程方式灵活应用实现。

扩展

另外,可以继续接入讯飞的AIUI能力平台,通过AIUI的智能机器人能力,可以实现人机交互对话,简单的流程就是:

开启持续监听 --> 识别到说话内容 --> 传递给AIUI机器人 --> 解析AIUI机器人响应结果 --> 将返回内容合成进行播放

经验分享 程序员 微信小程序 职场和发展