自己写代码,通过阅读文字。由于很多文章不必在即眼睛看文字,只听就可以了。
<html>
<head>
<meta charset="UTF-8">
<title>语音测试</title>
<script>
var speaker = new window.SpeechSynthesisUtterance();
var speakTimer,
stopTimer;
// 开始朗读
function speakText() {
var context = document.getElementById('ttsText');
clearTimeout(speakTimer);
window.speechSynthesis.cancel();
speakTimer = setTimeout(function () {
speaker.volume = 0.9
speaker.text = context.innerHTML;
window.speechSynthesis.speak(speaker);
}, 200);
}
// 停止朗读
function stopSpeak() {
clearTimeout(stopTimer);
clearTimeout(speakTimer);
stopTimer = setTimeout(function () {
window.speechSynthesis.cancel();
}, 20);
}
</script>
</head>
<body>
<p id="ttsText">2020年的“五一”,注定是一个不平凡的节日。<br>新冠肺炎疫情突如其来,14亿人守望相助,交出全球战“疫”的“中国答卷”。<br>此时,春回大地,万物复苏。疫情的阴霾逐渐散去,田间地头、工厂车间,复工复产正在不断推进……<br>“五一”国际劳动节到来之际,让我们在这个春天,追寻奋斗者的脚步,聆听奋斗者的声音。</p>
<div>
<input type="button" id="start_btn" onclick="speakText()" value="播放">
<input type="button" id="cancel_btn" onclick="stopSpeak()" value="取消">
</div>
</body>
</html>
如果想在java端实现文字阅读呢?
可以使用jacob工具。
下载后需要将jacob-1.18-M2-x64.dll或者jacob-1.18-M2-x86.dll文件放在jdk的bin路径下。
在工程中引用jar包
<dependency>
<groupId>com.hynnet</groupId>
<artifactId>jacob</artifactId>
<version>1.18</version><!--版本根据dll的版本来-->
</dependency>
测试类如下
public class Test {
@org.junit.Test
public void test01() throws InterruptedException {
while (true) {
SoundUtils.textToSound("岳阳楼,位于湖南省岳阳市岳阳楼区洞庭北路,地处岳阳古城西门城墙之上,紧靠洞庭湖畔,下瞰洞庭,前望君山;始建于东汉建安二十年(215年),历代屡加重修,现存建筑沿袭清光绪六年(1880年)重建时的形制与格局", 100,3);
}
}
}
public class SoundUtils {
/**
* 文字转语音
*
* @param text 输入文字转为语音
*/
public static Boolean textToSound(String text) {
return textToSound(text, 100, 0);
}
/**
* 文字转语音
*
* @param text 输入文字转为语音
*/
public static Boolean textToSound(String text, int volume, int voiceRate) {
if (volume < 0 || volume > 100) {
volume = 100;
}
try {
ActiveXComponent ax = new ActiveXComponent("Sapi.SpVoice");
// 音量 0-100
ax.setProperty("Volume", new Variant(volume));
// 语音朗读速度没有限制
ax.setProperty("Rate", new Variant(voiceRate));
// 运行时输出语音内容
Dispatch spVoice = ax.getObject();
// 执行朗读
Dispatch.call(spVoice, "Speak", new Variant(text));
spVoice.safeRelease();
ax.safeRelease();
return true;
} catch (Exception e) {
e.printStackTrace();
System.out.println(e);
}
return false;
}
}