Javascript 如何确保来自Google tts的传入语音已完全加载?

Javascript 如何确保来自Google tts的传入语音已完全加载?,javascript,html,html5-audio,Javascript,Html,Html5 Audio,在低网络速度下测试,为了正确使用JavaScript中的Google tts API,情况是有时它读取,有时不读取,它可能读取非常短的文本,如“hi”,如何确保请求的音频已加载 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <script>

在低网络速度下测试,为了正确使用JavaScript中的Google tts API,情况是有时它读取,有时不读取,它可能读取非常短的文本,如“hi”,如何确保请求的音频已加载

    <!DOCTYPE html>
    <html>
     <head>
       <meta charset="UTF-8">
       <title></title>
       <script>
        function playit() {
                var audio = new Audio();
                audio.src = 'http://translate.google.com/translate_tts?ie=UTF-8&tl=en&q=Okay i can read but not alwayes';
                //function(){testbeforplaying;}
                audio.play();
        }
      </script>
     </head>
     <body>
       <input type="button" value="say" onclick="playit()"/>
     </body>
    </html>

函数playit(){
var audio=新音频();
audio.src=http://translate.google.com/translate_tts?ie=UTF-8&tl=en&q=好的,我可以阅读,但不总是阅读;
//函数(){testbeformplaying;}
音频播放();
}
加载音频(或视频或图像)是一项异步操作,因此您需要收听并点击浏览器的回调机制,以了解文件何时可以使用

更新

在混音中添加了
类型
,并演示:

如果是音频(和视频),您可以收听
canplay
事件:

function playit() {
    var audio = new Audio();
    audio.addEventListener('canplay', function() {
        this.play();
    }, false);
    audio.type = 'audio/mpeg';
    audio.src = '...';
}
您也可以使用
canplaythrough
而不是
canplay

可以选择执行以下操作:

function playit() {
    var audio = new Audio();
    audio.preload = 'auto';
    audio.autoplay = true;
    audio.type = 'audio/mpeg';
    audio.src = '...';
}
但似乎有这样的情况——它完全取消了:


是的,这两个示例的加载都很好,但仅在IE10中加载,而不是Firefox甚至Chrome。@MuhammedTalha奇怪。。这似乎与媒体类型有关。它在FF中定义类型(
audio.type='media/mpeg';
)时工作,但对Chrome没有影响。可能是Chrome和源url的问题。我用fiddle.Isee更新了答案,但在Firefox中也是如此,如果我们尝试在服务器级别处理API-我是说PHP-它会很好地工作并播放mp3文件。@MuhammedTalha在我的FF(版本29)中工作。由于链接的格式化方式,两者都可能存在问题。PHP允许您加载字节流并直接读取mime类型。您是否尝试使用不同的音频源(非动态,即现有的mp3文件)来测试代码?好的,我正在寻找使用现有源,对于Firefox,尝试更改文本,它将不再像我所做的那样工作。