我的想法是创建一个 JS,它使用 Google“TTS Api”动态地将任何文本作为音频文件播放。这是我的 JS 代码的一部分,以及在 Chrome 中执行该文件时遇到的错误。不知何故,我无法在 for 循环中访问数组中的某些音频对象。
数组text_part
包含我想要使用的文本。
数组audioElementListe
包含不同的音频对象。
我得到的错误: 未捕获的类型错误:无法调用未定义的“play”方法
顺便说一句,英语不是我的母语,我是个 JS 初学者;)
audioElementListe = new Array(3);
function start()
{
text_part = new Array(3);
text_part[0]='Hallo';
text_part[1]='Florian';
text_part[2]='Haha';
for(var i = 0; i < text_part.length; i++)
{
audioElementListe[i] = new Audio("");
}
for(var i = 0; i < text_part.length; i++)
{
var help = 0;
var url = "http://translate.google.com/translate_tts?tl=de&q="+text_part[i];
audioElementListe[i] = new Audio("");
document.body.appendChild(audioElementListe[i]);
audioElementListe[i].src=url;
audioElementListe[i].addEventListener('canPlay', function()
{audioElementListe[i].play();}, false);
//Error seems to be right here
audioElementListe[i].addEventListener('ended', function()
{audioElementListe[i++].play();}, false);
}
audioElementListe[0].play();
}
编辑:通过不创建新的音频对象而是更改其来源来制定“解决方法”。
<html>
<head>
</head>
<body>
<script type="text/javascript">
var audioElement;
var i;
function start()
{
i=0;
text_part = new Array(3);
text_part[0]='Hallo';
text_part[1]='Florian';
text_part[2]='Haha';
var url = "http://translate.google.com/translate_tts?tl=de&q="+text_part[i];
audioElement = new Audio("");
document.body.appendChild(audioElement);
audioElement.src=url;
audioElement.addEventListener('canPlay', function() {audioElement.play();}, false);
audioElement.addEventListener('ended', function()
{
i++;
if(i<text_part.length)
{
var url = "http://translate.google.com/translate_tts?tl=de&q="+text_part[i];
audioElement.src=url;
audioElement.addEventListener('canPlay', function() {audioElement.play();}, false);
audioElement.play();
}
;}, false);
audioElement.play();
}
最佳答案
我们需要将要读取的字符串分成等长的大部分,并引入一个合适的js语句setTimeOut(string, dt)
关于javascript - TTS HTML5 音频事件监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14293274/