java eclipse基于讯飞开放平台的语音合成技术学习demo
老规矩,先来一张图
话不多说 按步就搬
D1:我们先去eclipse中创建一个非常普通的java项目;
如果你创建项目不明白的话
可以移步这我的小破站
链接: link 创建完成之后进入手撸环节
在上手之前让我们打开百度
然后进入到讯飞开放平台
这里的右上角,如果第一次使用的话,你需要注册一个账号。注册成为开发者,这样就可以愉快的玩讯飞AI了,(〃‘▽’〃)
这里注册好了之后,左边会有一个控制台,进入这里就创建属于你自己的应用啦
我们这次主要演示语音合成的技术我们需要下载语音合成的技术SDK
如图所示
做完这些
详细java SDK文档介绍,可以查阅讯飞官方网站
现在只差一步
在项目中新建lib文件夹
把我们下载的SDK文件夹打开,在里面找到如下部分
红色方框的部分是我们需要的
把我们需要的复制到项目中
ok了,我们就完成准备工作了
========================================================
一道华丽的分割线
杨氏表演法则 showtime
下面开始上手敲
这一步是将语音识别的依赖jar包添加到我们项目的构造路径中;必须!
=============================
为了方便显示,我们以学习过程中的图形界面为例
// package iflytek;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.GraphicsEnvironment;
import java.awt.Point;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import com.iflytek.cloud.speech.SpeechConstant;
import com.iflytek.cloud.speech.SpeechError;
import com.iflytek.cloud.speech.SpeechSynthesizer;
import com.iflytek.cloud.speech.SpeechUtility;
import com.iflytek.cloud.speech.SynthesizerListener;
public class iflytekdemo extends JFrame {
/*
* 我们先构造一个画布用作容器面板,然后在面板中添加一个输入框,让我们输入的文字可以被识别成语音
* 以此来达到一个效果
* */
private JFrame win;
private JPanel pan;// 主面板
private JPanel pan1;
private JPanel pan2;
private JTextArea text;
private JButton btn_1,btn_2;
//设置一个语音同步器
private SpeechSynthesizer mc;
public static void main(String[] args) {
new iflytekdemo();
}
public iflytekdemo() {
//设置一个容器
Container con = this.getContentPane();
con.setLayout(new BorderLayout());
this.setTitle("java学习之讯飞合成语音的使用--简单语音合成的使用");
this.setSize(500, 300);
this.setLocationRelativeTo(null);
this.setResizable(true);
this.setLayout(new BorderLayout());
Frame();
this.add(pan2, BorderLayout.SOUTH);
this.add(pan1, BorderLayout.NORTH);
this. setVisible(true);
//设置完成之后,我们需要对讯飞语音进行初始化
initiflytek();
}
private void initiflytek() {
// TODO 自动生成的方法存根
//初始化语音的时候,我们需要先初始化语音同步,并且设置语音技术的账户id
mc = SpeechSynthesizer.createSynthesizer();
SpeechUtility.createUtility("appid=你自己的讯飞平台应用有APPID");
}
private void Frame() {
// TODO 自动生成的方法存根
//设置按钮
pan1 = new JPanel();
pan2 = new JPanel();
text = new JTextArea(50, 30);
text.setText("欢迎来到安徽信息工程学院");
btn_1 = new JButton("点击语音合成");
btn_1.addActionListener(e ->
{
voiceset();
String Text = text.getText();
if (!mc.isSpeaking()) mc.startSpeaking(Text, mSynListener);
else mc.stopSpeaking();
});
btn_2 = new JButton("停止");
btn_2.addActionListener(e ->
{
mc.stopSpeaking();
iatSpeechInitUI();
});
pan1.add(text);
pan2.add(btn_1);
pan2.add(btn_2);
}
private SynthesizerListener mSynListener = new SynthesizerListener() {
@Override
public void onEvent(int arg1, int arg2, int arg3, int arg4, Object msg, Object msg2) {
}
@Override
public void onSpeakBegin() {
btn_1.setText("听写中...");
btn_1.setEnabled(false);
}
@Override
public void onCompleted(SpeechError error) {
if (null != error) {
text.setText(error.getErrorDescription(true));
iatSpeechInitUI();
}
}
//讯飞SDK覆盖抽象类方法
@Override
public void onBufferProgress(int percent, int beginPos, int endPos, String info) {
}
@Override
public void onSpeakPaused() {
}
@Override
public void onSpeakProgress(int percent, int beginPos, int endPos) {
}
@Override
public void onSpeakResumed() {
}
};
private void iatSpeechInitUI() {
// TODO 自动生成的方法存根
btn_1.setEnabled(true);
btn_1.setText("点击合成语音");
}
private void voiceset() {
// TODO 自动生成的方法存根
final String engType = "cloud";
mc.setParameter(SpeechConstant.VOICE_NAME, "xiaoyan");//设置发音人
mc.setParameter(SpeechConstant.SPEED, "150");//设置语速
mc.setParameter(SpeechConstant.VOLUME, "80");//设置音量,范围0~100
//mc.setParameter(SpeechConstant.TTS_AUDIO_PATH, "./tts_test.pcm");
}
}
到这
我们就结束了
来看看效果吧