java实现文本转语音(即语音朗读)

🏷️ bat365台湾入口 ⏱️ 2026-02-24 16:45:24 👨‍🔧 admin 👁️ 9610 ⚡ 663
java实现文本转语音(即语音朗读)

java实现文本转语音(即语音朗读)

1.方式一:使用jacob离线语音合成

1.下载jacob-1.18.zip

链接:https://pan.baidu.com/s/1-zYB9I4VF5cPuj3ok1WLyg

提取码:7t1g

2.将 jacob-1.18-x64.dll拷贝到jdk的bin目录或windows/SysWOW64目录中

3.添加需要的依赖

com.hynnet

jacob

1.18

核心代码

package speechrecognition.demo.lianxi;

import com.jacob.activeX.ActiveXComponent;

import com.jacob.com.Dispatch;

import com.jacob.com.Variant;

import java.io.BufferedReader;

import java.io.FileReader;

import java.io.IOException;

import java.util.Objects;

import java.util.UUID;

/**

* 离线 本地 TXT文件 语音朗读,生成mp3文件

*/

public class VoiceReading {

public static void main(String[] args) {

//本地TXT文件位置

String text = textToStr("D:\\workspace3/1111.txt");

textToSpeechIO(text);

}

/**

* 字符串文本转 wav格式 语音文件

* @param text 要读的文字字符串

*/

public static void textToSpeechIO(String text){

String path = "D:\\workspace3\\test/";

ActiveXComponent ax = null;

Dispatch spFileStream = null;

Dispatch spAudioFormat = null;

Dispatch spVoice = null;

try{

ax = new ActiveXComponent("Sapi.SpFileStream");

spFileStream = ax.getObject();

ax = new ActiveXComponent("Sapi.SpAudioFormat");

spAudioFormat = ax.getObject();

spVoice = new ActiveXComponent("Sapi.SpVoice").getObject();

// 设置音频流格式

Dispatch.put(spAudioFormat, "Type", new Variant(22));

// 设置文件输出流格式

Dispatch.putRef(spFileStream, "Format", spAudioFormat);

//随机uuid

String uuid = UUID.randomUUID().toString().trim().replaceAll("-", "");

// String filePath = path + uuid + ".wav";

String filePath = path + uuid + ".mp3";

// 调用输出 文件流打开方法,创建一个.wav文件

// Dispatch.call(spFileStream, "Open", new Variant("D:\\workspace3\\test/test.mp3"), new Variant(3), new Variant(true));

Dispatch.call(spFileStream, "Open", new Variant(filePath), new Variant(3), new Variant(true));

// 设置声音对象的音频输出流为输出文件对象

Dispatch.putRef(spVoice, "AudioOutputStream", spFileStream);

// 设置音量 0 ~ 100

Dispatch.put(spVoice, "Volume", new Variant(100));

// 设置朗读速度 -10 ~ +10

Dispatch.put(spVoice, "Rate", new Variant(1));

Dispatch.call(spVoice, "Speak", new Variant(text));

System.out.println("输出语音文件成功!");

}catch(Exception e){

e.printStackTrace();

}finally {

// 关闭输出文件

Dispatch.call(Objects.requireNonNull(spFileStream), "Close");

Dispatch.putRef(Objects.requireNonNull(spVoice), "AudioOutputStream", null);

Objects.requireNonNull(spAudioFormat).safeRelease();

spFileStream.safeRelease();

spVoice.safeRelease();

ax.safeRelease();

}

}

/**

* txt文件转字符串

* @param fileName txt文件所在位置

* @return txt文件中的字符串

*/

public static String textToStr(String fileName){

BufferedReader reader = null;

try {

reader = new BufferedReader(new FileReader(fileName));

StringBuilder sb = new StringBuilder();

String line;

while ((line=reader.readLine()) != null){

sb.append(line);

}

return sb.toString();

} catch (IOException e) {

e.printStackTrace();

return "";

}finally {

try {

Objects.requireNonNull(reader).close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

/**

* 字符串文本阅读

* @param str 要读的文字字符串

*/

public static void readStr(String str){

ActiveXComponent ax = new ActiveXComponent("Sapi.SpVoice");

//运行时输出语音内容

Dispatch spVoice = ax.getObject();

//设置音量 0 ~ 100

ax.setProperty("Volume",new Variant(100));

//设置朗读速度 -10 ~ +10

ax.setProperty("Rate",new Variant(1));

//执行朗读

Dispatch.call(spVoice,"Speak",new Variant(str));

}

}

2.方式二:百度AI在线语音合成

添加需要的依赖

com.baidu.aip

java-sdk

4.4.1

org.json

json

20160810

核心代码

package speechrecognition.demo.lianxi;

import com.baidu.aip.speech.AipSpeech;

import com.baidu.aip.speech.TtsResponse;

import com.baidu.aip.util.Util;

import org.json.JSONObject;

import org.springframework.util.StringUtils;

import java.io.BufferedReader;

import java.io.FileReader;

import java.io.IOException;

import java.text.SimpleDateFormat;

import java.util.Date;

import java.util.HashMap;

import java.util.Objects;

import java.util.UUID;

/**

* 百度AI 语音朗读练习

*/

public class BaiDuAIDemo {

//设置设置APPID/AK/SK

//自己注册一个百度AI账号,在语音技术中,创建一个文档,会有一下三个参数,填上即可

public static final String APP_ID = "";

public static final String API_KEY = "";

public static final String SECRET_KEY = "";

public static void main(String[] args) {

String text = textToStr("D:\\workspace3/2222.txt");

synthesis(text);

// synthesis("阳光正好,微风不燥,人间值得,未来可期!111");

}

/**

* 字符串文本转 wav 或者 mp3格式 语音文件

* @param str 要读的文字字符串

*/

public static void synthesis(String str){

//获取当前时间

SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmss");

Date date = new Date();

String fileName = sdf.format(date);

String path = "D:\\workspace3\\test/";

//随机uuid

String uuid = UUID.randomUUID().toString().trim().replaceAll("-", "");

String filePath =path + fileName + uuid + ".mp3";

AipSpeech client = new AipSpeech(APP_ID, API_KEY, SECRET_KEY);

// 可选:设置网络连接参数

client.setConnectionTimeoutInMillis(2000);

client.setSocketTimeoutInMillis(60000);

// 可选:设置代理服务器地址, http和socket二选一,或者均不设置

// client.setHttpProxy("proxy_host", proxy_port); // 设置http代理

// client.setSocketProxy("proxy_host", proxy_port); // 设置socket代理

// 可选:设置log4j日志输出格式,若不设置,则使用默认配置

// 也可以直接通过jvm启动参数设置此环境变量

System.setProperty("aip.log4j.conf", "path/to/your/log4j.properties");

// 设置可选参数

HashMap options = new HashMap();

options.put("spd", "5");//语速,取值0-9,默认为5中语速 非必选

options.put("pit", "5");//音调,取值0-9,默认为5中语调 非必选

options.put("per", "1");//发音人选择, 0为女声,1为男声,3为情感合成-度逍遥,4为情感合成-度丫丫,默认为普通女 非必选

TtsResponse res = client.synthesis(str, "zh", 1, options);

JSONObject result = res.getResult(); //服务器返回的内容,合成成功时为null,失败时包含error_no等信息

if (!StringUtils.isEmpty(result)) {

System.out.printf("error:" + result.toString());

return;

}

byte[] data = res.getData(); //生成的音频数据

JSONObject res1 = res.getResult();

if (data != null) {

try {

//如果转换成功,输出的地址

Util.writeBytesToFileSystem(data, filePath);

System.out.println("输出语音文件成功! ");

} catch (IOException e) {

e.printStackTrace();

}

}

if (res1 != null) {

System.out.println(res1.toString(2));

}

}

/**

* txt文件转字符串

* @param fileName txt文件所在位置

* @return txt文件中的字符串

*/

public static String textToStr(String fileName){

BufferedReader reader = null;

try {

reader = new BufferedReader(new FileReader(fileName));

StringBuilder sb = new StringBuilder();

String line;

while ((line=reader.readLine()) != null){

sb.append(line);

}

return sb.toString();

} catch (IOException e) {

e.printStackTrace();

return "";

}finally {

try {

Objects.requireNonNull(reader).close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

相关资讯

信用卡通过银行转账到微信
神器365软件下载

信用卡通过银行转账到微信

📅 08-28 🔧 admin
电视连上WIFI后速度慢怎么解决? , 电视机连接无线太卡怎么办
365娱乐app官方版下载106平台

电视连上WIFI后速度慢怎么解决? , 电视机连接无线太卡怎么办

📅 08-20 🔧 admin
【杈】的甲骨文象形文字金文篆文
365娱乐app官方版下载106平台

【杈】的甲骨文象形文字金文篆文

📅 08-08 🔧 admin