java eclipse基於訊飛開放平臺的語音合成技術學習demo
---我是來自IT界的搬運工(*^▽^*)
老規矩,先來一張圖
話不多說 按步就搬
D1:我們先去eclipse中創建一個非常普通的java項目;
如果你創建項目不明白的話
可以移步這我的小破站
鏈接: link
創建完成之後進入手擼環節
在上手之前讓我們打開百度
然後進入到訊飛開放平臺
這裏的右上角,如果第一次使用的話,你需要註冊一個賬號。註冊成爲開發者,這樣就可以愉快的玩訊飛AI了,(〃‘▽’〃)
這裏註冊好了之後,左邊會有一個控制檯,進入這裏就創建屬於你自己的應用啦
我們這次主要演示語音合成的技術我們需要下載語音合成的技術SDK
如圖所示
做完這些
詳細java SDK文檔介紹,可以查閱訊飛官方網站
https://www.xfyun.cn/doc/tts/online_tts/Java-SDK.html
現在只差一步
在項目中新建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");
}
}
到這
我們就結束了
來看看效果吧
有錯誤的話可以私信我哈,評論區也會回覆的;感謝大家的支持!