给博客添加TTS语音朗读 简单快速版
很多人不解为什么要加这个功能,我说我自己会用你可能不相信,哈哈。。我自己有收藏文章,有时候会听一下。
另外,我发现很多人没办法看完整篇文章,有的只是看看标题就马上去评论,有这个现象吧?那这个朗读完全可以让你边做其他事情,边听完文章。
至少我经常这样,曾经还特意用具有tts朗读功能的rss订阅器,一边做事情,一边听完文章,效果还是不错的,刚听可能会感觉声音比较机器,但现在的语音效果比微软的好太多了,很多机器人都用这个语音。
为了加上这个功能,在这方面花了不少心思,上次的方法代码太多,影响文章页加载时间,为了提高速度,我突然想用ajax方式,当我传递参数到function一切准备就绪的时候,JavaScript代码无法在function里面运行。
当然还有其他更专业的方法,我不是专业,折腾不来,不过,要说精简代码,及时是最简单的js播放器也要117行代码,我发现在我能折腾的范围内,还是最初研究的那个方法最简单。
后来还发现,可以不用官方的那些复杂代码,直接用之前的方式,不是百度语音不稳定,是之前没有对文章进行去除特殊代码造成的某些文章无法播放,js获取文章内容也行的,甚至分割去除特殊字符等等,但在这里还是选择php处理。
http://tts.baidu.com/text2audio?cuid=baiduid&lan=zh&ctp=1&pdt=311&tex=后面加上900字以内的内容就可以正常朗读
这回声音也是女的,直接点击上面就可以听。
好吧,废话完了,代码很少,你几乎直接粘贴在content前面就OK ,这回加载速度很快,几乎没影响。
以下代码加在single.php页面的任何你想插入的地方:
<?php
function mbStrSplit ($string, $len = 1) { //对内容进行分割
$start = 0;
$strlen = mb_strlen($string);
while ($strlen) {
$array[] = mb_substr($string,$start,$len,"utf8");
$string = mb_substr($string, $len, $strlen,"utf8");
$strlen = mb_strlen($string);
}
return $array;
}function match_chinese($chars,$encoding = 'utf8') //过滤特殊字符串
{
$pattern = ($encoding == 'utf8')?'/[\x{4e00}-\x{9fa5}a-zA-Z0-9,,。 ]/u':'/[\x80-\xFF]/';
preg_match_all($pattern,$chars,$result);
$temp = join('',$result[0]);
return $temp;
}
$str=$post->post_content;
$str = strip_tags($str);
$str = str_replace("、",",",$str); //保留顿号
$str = match_chinese($str);
$zishu = mb_strlen(preg_replace('/\s/','',html_entity_decode(strip_tags($str))),'UTF-8');
$r = mbStrSplit($str, 900);
$qian = "http://tts.baidu.com/text2audio?cuid=baiduid&lan=zh&ctp=1&pdt=311&tex=";
?>
<?php if ($zishu <= 2700): ?>
<video id="langdu" style="display:none">
<source id="source" src="<?php echo $qian.$r[0]; ?>" type="video/mp4">
</video>
<script type="text/javascript">
function playPause() {
var music = document.getElementById('langdu');
var music_btn = document.getElementById('music_btn01');if (music.paused) {
music.play();
music_btn.src = '<?php bloginfo('template_url'); ?>/images/zanting.png'; //播放图片
var aud = document.getElementById("langdu");
aud.onended = function() {
aud.src = "<?php echo $qian.$r[1]; ?>"
aud.play();
aud.addEventListener("ended", function() {
aud.src = "<?php echo $qian.$r[2]; ?>"
aud.play();
aud.addEventListener("ended", function() {
aud.pause();
}, false);
}, false);
};} else {
music.pause();
music_btn.src = '<?php bloginfo('template_url'); ?>/images/bofang.png'; //暂停图片
}
}</script>
<span style="float: left;
margin-right: 10px;
cursor: pointer;">
<a href="javascript:playPause();"><img src="<?php bloginfo('template_url');
?>/images/bofang.png" width="25" height="25" id="music_btn01" border="0"></a>
</span><?php endif; ?>
按钮图片自己下载本站的,按钮的位置css调整。
最后,写代码确实得心细和逻辑思考,否则会有很多不必要的服务器请求,那么就造成运行速度上的差别。
嘿嘿,真不错…读到代码部分就懵逼了…有意思。对于太长文章很实用
@旧日的足迹 是的,长文章有时候没办法去细读,这个开着听至少还可以忙其他事情。
读英文和代码我是懵圈的……
@灰常记忆 必须懵圈,哈哈,不过平时很少发代码,就最近油开始折腾。
体验比较差,没什么情感,还是读的好。
@西城杨柳弄春柔 你这么一说,我还真想到微信的那种发文方式,自己录音读的。哈哈
@西城杨柳弄春柔 你的站不能访问了啊?
@西城杨柳弄春柔 果然,更专业的是这样:https://36kr.com/p/5128518.html 自己录制语音,哈哈。
读到代码或者网址的时候就很魔性了,哈哈哈
@黑桃三 下次看看能否直接过滤掉,哈哈。。。怕过滤正常英文部分,不过也很少发英文。
我用了你的css代码,播放器位置还是在评论最下面,咋弄呢
@青山 css调整一下就解决,你代码继续放着,我去看看。
@青山 把span du 那段放到你文章页面的
后面就OK,又因为你的文章前面有广告,代码里的style里面的css可以自行调整,如果你想在手机里面看着也是对其的,你最好弄掉广告放其他地方,或则把播放按钮放在侧边跟随都可以,去掉style里面的代码也可以,随意。
@郑永 还是没折腾会,不过我倒是想在这个位置加 但是不知道怎么弄
@青山 嗯,刚睡醒,一会空了告诉你哈。
@青山 打得代码都没显示出来,难怪你没看懂。
@青山 效果:https://i.screenshot.net/6xj29hg
@青山 你博客访问不了,ip段允许。
@郑永 现在再试试?
@青山 tts朗读有新方法,博客新文章,注意查收。。
哇,这个厉害。zblog的asp代码怎么添加这个功能呢?
@响石潭 直接asp套用,js部分一样。
厉害,我也想弄个看看试试
@励志语录网 tts朗读有新方法,博客新文章,注意查收。。。。
话说博主大大,typecho可以用吗,挺好的功能的,唉
@Jdeal 可以用啊,按部就班,关键地方改一下就OK。
@Jdeal 把上面代码里面的图片地址改成你的,记得下载图片上传的你的站。 最后关键一步:把代码里面的$str=$post->post_content;改成 $str=$this->excerpt 完工,演示地址:demo.xptt.com
@郑永 谢谢博主大大,已可用!感谢!
博主大大,我看你demo的那个站是typecho的,两个站的内容是一样的,typecho上的是怎么同步你这个站的文章的额,我也是两个站,但是每次写完wordpress的后都要再重新复制一遍到typecho上面。还是您有typecho采集工具额
@Jdeal 直接wordpress转type插件就ok,如果你要经常同步,设置定时执行同步。
tts语音最大的痛点…播放时SSL会变成锁 我的博客网站也有这个功能
@胡家小子 你这个好像麦田一根葱那个主题效果,高手完全可以做得更好更专业。
@胡家小子 tts朗读有新方法,博客新文章,注意查收。。。。。
@郑永 大佬,我的也是typecho的博客,请问新的TTS朗读方法
右下角top是怎么弄得
@一起微笑 https://www.macrr.com/canvas-back-top.html 教程地址
这模板挺简洁的 能分享么?大佬?
这模板 真好看 特别喜欢!!
@Www.Last.City 谢谢,不好意思,这模板目前还不适合他人使用,因为太多代码需要修改,不适合折腾。
求楼主给个js或jquery代码!本人草根站长不支持php语言哦!
拿走了 谢谢!!https://guanwang.qian.lu/438.html 测试地址
@格子老师 tts朗读有新方法,博客新文章,注意查收。。。。。。。。。