java eclipse基于讯飞开放平台的语音合成技术学习demo

老规矩,先来一张图

javacms多语言 java怎么做语音聊天_eclipse

话不多说 按步就搬

D1:我们先去eclipse中创建一个非常普通的java项目;

如果你创建项目不明白的话

可以移步这我的小破站

链接: link 创建完成之后进入手撸环节

javacms多语言 java怎么做语音聊天_讯飞_02


在上手之前让我们打开百度

javacms多语言 java怎么做语音聊天_javacms多语言_03


然后进入到讯飞开放平台

javacms多语言 java怎么做语音聊天_讯飞_04


这里的右上角,如果第一次使用的话,你需要注册一个账号。注册成为开发者,这样就可以愉快的玩讯飞AI了,(〃‘▽’〃)

这里注册好了之后,左边会有一个控制台,进入这里就创建属于你自己的应用啦

javacms多语言 java怎么做语音聊天_ide_05


我们这次主要演示语音合成的技术我们需要下载语音合成的技术SDK

如图所示

javacms多语言 java怎么做语音聊天_eclipse_06


做完这些

详细java SDK文档介绍,可以查阅讯飞官方网站

现在只差一步

javacms多语言 java怎么做语音聊天_javacms多语言_07


在项目中新建lib文件夹

把我们下载的SDK文件夹打开,在里面找到如下部分

javacms多语言 java怎么做语音聊天_javacms多语言_08


javacms多语言 java怎么做语音聊天_javacms多语言_09

javacms多语言 java怎么做语音聊天_eclipse_10


红色方框的部分是我们需要的

把我们需要的复制到项目中

javacms多语言 java怎么做语音聊天_讯飞_11


ok了,我们就完成准备工作了

========================================================
一道华丽的分割线

杨氏表演法则 showtime

下面开始上手敲

javacms多语言 java怎么做语音聊天_ide_12

javacms多语言 java怎么做语音聊天_java_13

这一步是将语音识别的依赖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");
	}
	
}
到这

我们就结束了

来看看效果吧

javacms多语言 java怎么做语音聊天_eclipse_14