2015-01-11 3 views
1

Существует не так много информации о http://responsivevoice.org о isPlaying().Невозможно обнаружить, если реагироватьVoice isPlaying()

Вот что я пробовал, который не работает. Я не получаю console.log().

setInterval(function(){ // continuously check if the audio is being played 
 
    if(responsiveVoice.isPlaying()){ 
 
    console.log('playing..'); 
 
    }, 
 
    100 
 
);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script src="http://responsivevoice.org/responsivevoice/responsivevoice.js"></script> 
 

 
<textarea id="text" cols="45" rows="3">Hello, world!</textarea> 
 
    
 
<input 
 
    onclick="responsiveVoice.speak($('#text').val(),'US English Female');" 
 
    type="button" 
 
    value="Play" 
 
/>

Как обнаружить, если аудио играет? Кроме того, есть ли способ получить обратный вызов после воспроизведения звука?

ответ

1

Спасибо за использование ResponsiveVoice!

Мы добавили функцию isPlaying() в ResponsiveVoice с версии 1.3.4 и обновили документацию API.

Теперь вы можете использовать:

responsiveVoice.isPlaying() 

, который работает как родную SpeechSynthesis и резервный аудио TTS.

Вы можете получить его здесь:

http://code.responsivevoice.org/develop/1.3/responsivevoice.js (указывает на последний выпуск в 1.3.x цикла)

также получить конкретную версию:

http://code.responsivevoice.org/develop/1.3.4/responsivevoice.js

0

Аудиокассета имеет свойство paused. Если он не приостановлен, значит, он играет. Итак:

function isPlaying(audelem) { 
     return !audelem.paused; 
} 

$('audio').on('play ended',function() { 
    setInterval(function(){ 
     if(isPlaying(this)){ 
      console.log('playing...'); 
     } 
    }, 100); 
}); 
+0

К сожалению, я не могу получить ваш код, работающий в этой скрипке: http://jsfiddle.net/5n8ekvcq/. Что мне не хватает? –

+0

После проверки, кажется, что '

0

Метод isPlaying фактически не существует. Я смог создать решение, используя hookiveVoice.OnFinishedPlaying hook. Это функция, которую вы можете установить, которая будет вызываться всякий раз, когда разговор завершен. Это немного kludgy, но может быть завернуто, как показано ниже, чтобы вызвать обратный вызов, когда текст будет завершен. Конечно, это ломается, если вы попытаетесь начать говорить снова до завершения предыдущего текста.

function speak(text, voice, callback) { 
    if (callback) { 
      responsiveVoice.OnFinishedPlaying = function() { 
       responsiveVoice.OnFinishedPlaying = null; 
       callback(); 
      }; 
    }     
    responsiveVoice.speak(text, voice); 
} 
2

На самом деле они используют объект window.speechSynthesis Object of speech API. Итак, вы можете проверить его playing boolean.

//Their code 
 
    var voicelist = responsiveVoice.getVoices(); 
 

 
    var vselect = $("#voiceselection"); 
 

 
    $.each(voicelist, function() { 
 
    vselect.append($("<option />").val(this.name).text(this.name)); 
 
    }); 
 

 
// Yours 
 
    $('#isPlaying').on('click', function() { 
 
    $('#r').text(window.speechSynthesis.speaking) 
 
    })
<script src="http://responsivevoice.org/responsivevoice/responsivevoice.js"></script> 
 
<script src="http://code.jquery.com/jquery-git2.js"></script> 
 

 
<textarea id="text" cols="45" rows="3">Hello world this is some text to say</textarea> 
 

 
<select id="voiceselection"></select> 
 

 
<input onclick="responsiveVoice.speak($('#text').val(),$('#voiceselection').val());" type="button" value="Play" /> 
 
<br> 
 
<button id="isPlaying">Playing:</button> 
 
<p id="r">?</p>

0

"есть способ, чтобы получить обратный вызов, как только звук делается играть?"

ДА !! Вот решение, которое работает для меня, после просмотра в responsiveVoice код:

responsiveVoice.speak(text, voice, {"onend": function() { msgonend(text); }}); 

когда:

function msgonend(text) { 
    console.log("'" + text + "' ended."); 
...  } 
}; 
Смежные вопросы