222 lines
4.9 KiB
JavaScript
222 lines
4.9 KiB
JavaScript
const speech = new SpeechSynthesisUtterance();
|
|
|
|
speech.lang = "en";
|
|
|
|
let voices = [];
|
|
let myAudio1 = document.getElementById('myAudio1')
|
|
let myAudio2 = document.getElementById('myAudio2')
|
|
let myAudio3 = document.getElementById('myAudio3')
|
|
let myAudio4 = document.getElementById('myAudio4')
|
|
let myAudio5 = document.getElementById('myAudio5')
|
|
let myAudio6 = document.getElementById('myAudio6')
|
|
let counts =0;
|
|
|
|
|
|
window.speechSynthesis.onvoiceschanged = () => {
|
|
voices = window.speechSynthesis.getVoices();
|
|
speech.voice = voices[3];
|
|
let voiceSelect = document.querySelector("#voices");
|
|
voices.forEach((voice, i) => (voiceSelect.options[i] = new Option(voice.name, i)));
|
|
};
|
|
|
|
document.querySelector("#rate").addEventListener("input", () => {
|
|
const rate = document.querySelector("#rate").value;
|
|
speech.rate = rate;
|
|
document.querySelector("#rate-label").innerHTML = rate;
|
|
});
|
|
|
|
document.querySelector("#volume").addEventListener("input", () => {
|
|
const volume = document.querySelector("#volume").value;
|
|
speech.volume = volume;
|
|
document.querySelector("#volume-label").innerHTML = volume;
|
|
});
|
|
|
|
|
|
|
|
document.querySelector("#voices").addEventListener("change", () => {
|
|
speech.voice = voices[document.querySelector("#voices").value];
|
|
});
|
|
|
|
$(document).ready(function(){
|
|
$('#start').click(function(){
|
|
|
|
|
|
});
|
|
});
|
|
// set time out 2 sec
|
|
setTimeout(function(){
|
|
$('#start').trigger('click');
|
|
}, 2000);
|
|
|
|
|
|
|
|
|
|
|
|
function announce(){
|
|
|
|
let table=document.getElementById('datatable')
|
|
var tx=table.rows[1].cells[1].innerText+',' + table.rows[1].cells[2].innerText.toLowerCase() +'...diharap menuju ke'+table.rows[1].cells[4].innerText;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
speech.text = tx;
|
|
|
|
speech.pitch = 1.4;
|
|
speech.rate = 0.7;
|
|
|
|
|
|
myAudio1.volume=0.1;
|
|
myAudio2.volume=0.7;
|
|
myAudio3.volume=0.3;
|
|
myAudio4.volume=0.7;
|
|
myAudio5.volume=0.1;
|
|
|
|
|
|
|
|
myAudio1.play();
|
|
// intro music
|
|
if( myAudio1.addEventListener('ended',()=>{myAudio2.play();}));
|
|
// begining
|
|
if(myAudio2.addEventListener('ended',()=>{window.speechSynthesis.speak(speech);}) );
|
|
|
|
// closing
|
|
if( speech.addEventListener('end',()=>{window.speechSynthesis.cancel();myAudio4.play();}));
|
|
|
|
|
|
if(myAudio4.addEventListener('ended',()=>{ myAudio5.play();}));
|
|
if(myAudio5.addEventListener('ended',()=>{ speech.text="";loop(); countset(); }));
|
|
|
|
};
|
|
|
|
function countset(){
|
|
let table=document.getElementById('datatable');
|
|
var canceltxt= document.getElementById('canceltxt');
|
|
counts ++;
|
|
|
|
if(counts == 2){
|
|
canceltxt.innerHTML=table.rows[1].cells[6].innerHTML;
|
|
|
|
$("#submit").trigger('click');
|
|
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function loop(){
|
|
|
|
var table= $("#datatable").dataTable();
|
|
|
|
var tableCount=table.fnGetData().length;
|
|
|
|
|
|
if(tableCount>0){
|
|
announce();
|
|
}else{
|
|
|
|
myAudio6.volume=0.1;
|
|
myAudio6.play();
|
|
|
|
$(document).ready(function (){
|
|
|
|
|
|
|
|
$('#start').click(function(){
|
|
|
|
|
|
});
|
|
// set time out 2 sec
|
|
setTimeout(function(){
|
|
$('#start').trigger('click');
|
|
}, 2000);
|
|
});
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
document.querySelector("#start").addEventListener("click",()=> {
|
|
|
|
loop()
|
|
|
|
});
|
|
|
|
document.querySelector("#pause").addEventListener("click", () => {
|
|
window.speechSynthesis.pause();
|
|
});
|
|
|
|
document.querySelector("#resume").addEventListener("click", () => {
|
|
window.speechSynthesis.resume();
|
|
});
|
|
|
|
document.querySelector("#cancel").addEventListener("click", () => {
|
|
window.speechSynthesis.cancel();
|
|
});
|
|
|
|
|
|
|
|
function timerFunction(){
|
|
var sec = 0;
|
|
|
|
function pad ( val ) { return val > 9 ? val : "0" + val; }
|
|
|
|
setInterval( function(){
|
|
var hour= pad(parseInt(sec/360,10));
|
|
var minute= pad(parseInt(sec/60,10));
|
|
var second= pad(++sec%60);
|
|
document.getElementById('timer').innerHTML= hour +':'+minute+':'+ second;
|
|
if(hour == 1){
|
|
location.reload();
|
|
}
|
|
|
|
}, 1000);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
const pauseIconClassName = document.getElementById('pause')
|
|
const playIconClassName = document.getElementById('start')
|
|
const stopIconClassName= document.getElementById('submit');
|
|
const btns = document.querySelectorAll('.btn')
|
|
|
|
function onChange (event) {
|
|
// get the button elememt from the event
|
|
const buttonElement = event.currentTarget
|
|
|
|
// check if play button class is present on our button
|
|
const isPlayButton = buttonElement.contains(playIconClassName)
|
|
const isStopPlay=buttonElement.contains(stopIconClassName)
|
|
|
|
// if a play button, remove the play button class and add pause button class
|
|
if (isPlayButton) {
|
|
pauseIconClassName.hidden=false;
|
|
playIconClassName.hidden=true;
|
|
|
|
// if a pause button, remove pause button class and add play button class
|
|
} else {
|
|
playIconClassName.hidden=false;
|
|
pauseIconClassName.hidden=true;
|
|
}
|
|
|
|
|
|
// You can also use .toggle function on classList as mentioned by the person in other answer
|
|
}
|
|
|
|
// query selector all returns a list of nodes, therefore we need to iterate over it and attach an event listener to each button seperatly
|
|
btns.forEach(btn => {
|
|
btn.addEventListener('click', onChange)
|
|
}) |