Javascript 如何确保来自Google tts的传入语音已完全加载?
在低网络速度下测试,为了正确使用JavaScript中的Google tts API,情况是有时它读取,有时不读取,它可能读取非常短的文本,如“hi”,如何确保请求的音频已加载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>
<!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,尝试更改文本,它将不再像我所做的那样工作。