文字转语音的方法及demo

文字转语音的方法及demo(亲测可行)

  在网上看了很多的语音合成方法即文字转语音,目前我总结了两种简单的方法,1.js的SpeechSynthesisUtterance,语音效果不错。2.百度免费测试语音接口,如果申请apikey语音效果较好,不申请也可以,不过语音低沉一点。很多语音合成接口需要申请apikey,科大讯飞还有每天限制3000次,如果想调用多次需要付费。所以提供以下两种方法供大家参考,demo可以直接运行使用,希望大家能对我的研究给予支持。

1.js的SpeechSynthesisUtterance方法

  以下是我写的demo,可以尝试运行,语音效果不错,参数可以自己再调节。代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>js将文字转化为语音并播放</title>

</head>
<body>
<div>
<input type="text" id="ttsText">
<input type="button" id="tts_btn" onclick="speak()" value="播放">
</div>
</body>
<script>
function speak() {
    var ttsText = document.getElementById('ttsText').value;
    var u = new SpeechSynthesisUtterance();
    u.text = ttsText;
    //汉语
    u.lang = 'zh';
    u.rate =0.5;       // 播放语速
    u.pitch = 10;    // 音调高低
    speechSynthesis.speak(u);
}
</script>
</html>

2.使用百度免费语音合成接口方法

  此处有两种情况,第一种情况如果不申请百度apiKey就是语音会低沉一点,如果项目不是要求那么高可以直接使用,免费无限制。代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>百度地图将文字转化为语音并播放</title>
<!-- 这里调用的是百度文字转语音开放API -->

</head>
<body>
<div>
<input type="text" id="ttsText">
<input type="button" id="tts_btn" onclick="doTTS()" value="播放">
</div>
<div id="bdtts_div_id">
<audio id="tts_autio_id" autoplay="autoplay">
<source id="tts_source_id" src="http://tsn.baidu.com/text2audio?lan=zh&amp;ie=UTF-8&amp;vol=10&amp;spd=4&amp;per=0&amp;pit=15&amp;text=请输入文字" type="audio/mpeg">
<embed id="tts_embed_id" height="0" width="0" src="">
</audio>
</div>
</body>
<!-- <script src="jquery-1.8.3.min.js"></script> -->
<script>
function doTTS() {
    console.log('start');
    var ttsDiv = document.getElementById('bdtts_div_id');
    var ttsAudio = document.getElementById('tts_autio_id');
    var ttsText = document.getElementById('ttsText').value;

    // 文字转语音
    ttsDiv.removeChild(ttsAudio);
    var au1 = '<audio id="tts_autio_id" autoplay="autoplay">';
    var sss = '<source id="tts_source_id" src="http://tsn.baidu.com/text2audio?lan=zh&ie=UTF-8&per=0&spd=4&vol=10&pit=15&text=' + ttsText + '" type="audio/mpeg">';
    var eee = '<embed id="tts_embed_id" height="0" width="0" src="">';
    var au2 = '</audio>';
    ttsDiv.innerHTML = au1 + sss + eee + au2;

    ttsAudio = document.getElementById('tts_autio_id');

    ttsAudio.play();
}

/*
代码中改变传参可更改配置:

lan=zh(语言zh:中文;en:英文;fr:法文;)
ie=UTF-8(字符集)
per=3(每3个字符停顿)
spd=5(语音播放速度,数字越大越快0-15)
pit 选填 音调,取值0-9,默认为5中语调
vol 选填 音量,取值0-15,默认为5中音量
per 选填 发音人选择, 0为普通女声,1为普通男生,3为情感合成-度逍遥,4为情感合成-度丫丫,默认为普通女声
text=“”(需要转换的文字)*/
</script>
</html>

  第二种情况自己可以申请一个apiSky,获取token,如何申请,链接: link.这样可以有很多语音的选择,目前是7种,也可以很好的控制语音,调节音调,声音,男音女音什么的,直接将下面的代码放到百度语音免费使用的第一种情况中就可以了,代码如下:

/* 代码中换成你自己的key和token */

var aid = "palmap";
var access_token = "24.a6952b9ac7512bc86f19f8ea77359b76.2592000.1495642079.282335-9565046";
var service_api = "http://tsn.baidu.com/text2audio?lan=zh&cuid=" + aid + "&ctp=1&tok=" + access_token;

总结

  因项目需求,自己也研究了些时间,找到了方法处理了文字转语音的方法。希望大家看到此文章有所收获并可以解决问题。也希望大家做技术都可以分享知识与踩过的无数的坑。

此文原创,转载的朋友希望注明转载地址。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

great1314

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值