科大讯飞语音工具类基于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机器人响应结果 --> 将返回内容合成进行播放