jQuery Text-to-Speech 谷歌在线语音

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<!DOCTYPE html>
<html>
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<title>jQuery  Text-to-Speech 谷歌在线语音</title>
<script type='text/javascript' src='jquery-1.9.1.min.js'></script>
<script type="text/javascript">
function html5_audio(){
    var a = document.createElement('audio');
    return !!(a.canPlayType && a.canPlayType('audio/mpeg;').replace(/no/, ''));
}
  
var play_html5_audio = false;
if(html5_audio()) play_html5_audio = true;
  
function play_sound(url){
    if(play_html5_audio){
        var snd = new Audio(url);
        snd.load();
        snd.play();
    }else{
        $("#sound").remove();
        var sound = $("<embed id='sound' type='audio/mpeg' />");
        sound.attr('src', url);
        sound.attr('loop', false);
        sound.attr('hidden', true);
        sound.attr('autostart', true);
        $('body').append(sound);
    }
}
function readme(txt){
    play_sound("http://translate.google.com/translate_tts?ie=UTF-8&q="+encodeURIComponent(txt)+"&tl=zh-cn&total=1&idx=0prev=input");    //英文  en //中文    
}
readme('hello world');
$(function(){
    $('#btnread').click(function(){
        readme($('#inp').val());
    });
});
</script>
</head>
 
<body>
<input type="text" id="inp"  value="涂聚文"/> <input type="button" id="btnread" value="Klick me"/>
</body>
 
</html>

 http://code.google.com/p/jqtts/source/checkout

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
/*!
   jQuery Text-to-Speech plugin
   --------------------------------------------
   http://code.google.com/p/jqtts/
 
   Copyright (c) 2010, Kevin Hoang Le. All rights reserved.
   Code provided under the MIT License:
   http://www.opensource.org/licenses/mit-license.html
 
   v0.1
*/
 
(function($) {
    $.fn.extend({
        jtts: function(options) {
            var defaults = {
                lang: 'en',
                msPerWord: 900
            };
            
            var options = $.extend(defaults, options);           
            //passed-in
            var sentences = [];
            var lang;
            var msPerWord;
            var elem;
            //internal
            var plugin;
            var ttsUrl = 'http://translate.google.com/translate_tts';         
            var inProgress = false;
            var currentPlaying = 0;           
            var total = 0;
            var isIE;           
            var jPlayer = null;           
 
            var talkNonIE = function() {
                var url = ttsUrl + '?tl=' + lang + '&q=' + sentences[currentPlaying++];
                jPlayer.jPlayer('setFile', url).jPlayer('play').jPlayer('onSoundComplete', onSoundComplete);
            };
        
            var talkIE = function() {
                if (currentPlaying < total) {
                    var re = /\w+/g;
                    var words = sentences[currentPlaying].match(re);       
                    
                    var url = ttsUrl + '?tl=' + lang + '&q=' + sentences[currentPlaying++];   
                    setTimeout(talkIE, words.length * msPerWord);
                    
                    if (jPlayer != null) {
                        jPlayer.remove();
                    }
                    
                    jPlayer = $('<embed>', {src: url, hidden: true}).appendTo($(elem));
                } else {
                    inProgress = false;
                    plugin.trigger('onComplete', []);
                }
            };
        
            var onSoundComplete = function() {
                if (currentPlaying < total) {
                    talkNonIE();                   
                } else {
                    inProgress = false;
                    plugin.trigger('onComplete', []);
                }
            };           
 
            return this.each(function() {
                plugin = $(this);
                elem = $(options.elem);
 
                if ($.browser.msie) {
                    isIE = true;                   
                } else {
                    isIE = false;
                    jPlayer = $(elem);                 
                    jPlayer.jPlayer(options.jPlayer);
                }               
                
                lang = options.lang;               
                msPerWord = options.msPerWord;
            }).bind('playing', function(e, lines) {
                currentPlaying = 0;
                sentences = lines;
                total = sentences.length;
                if (isIE) {
                    talkIE();
                } else {
                    talkNonIE();
                }               
            }).bind('pause', function() {
            }).bind('stop', function() {               
            }).bind('resume', function() {               
            }); 
        },
        play: function(sentences) {
            return this.trigger('playing', [sentences]);
        },
        pause: function() {
            return this.trigger('pause');
        },
        abort: function() {
            return this.trigger('abort');
        },
        resume: function() {
            return this.trigger('resume');
        }
    });
})(jQuery);

 

posted @   ®Geovin Du Dream Park™  阅读(1279)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示