json loading directly
parent
2612aab009
commit
c0a8fe42b8
@ -0,0 +1,85 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title></title>
|
||||
<meta charset="utf-8">
|
||||
<style type="text/css">
|
||||
#wrapper {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
position: absolute;
|
||||
left: 5%; top: 5%; right: 5%; bottom: 5%;
|
||||
}
|
||||
#textinput {
|
||||
width: 100%;
|
||||
border: none;
|
||||
background: none;
|
||||
}
|
||||
#input {
|
||||
padding: 2%;
|
||||
flex: 0 1 auto;
|
||||
background: aqua;
|
||||
}
|
||||
#display {
|
||||
flex: 1 1 auto;
|
||||
background: pink;
|
||||
padding: 2%;
|
||||
overflow: auto;
|
||||
}
|
||||
#display div.msg {
|
||||
padding-bottom: 0.5em;
|
||||
}
|
||||
#display div.human {
|
||||
color: black;
|
||||
}
|
||||
#display div.bot {
|
||||
color: black;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
#display div.debug {
|
||||
color: red;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div id="wrapper">
|
||||
<div id="display">
|
||||
</div>
|
||||
<div id="input">
|
||||
<input type="text" id="textinput" autofocus />
|
||||
</div>
|
||||
</div>
|
||||
<script src="eliza.js"></script>
|
||||
<script>
|
||||
function eliza (rules) {
|
||||
var input = document.getElementById("textinput"),
|
||||
output = document.getElementById("display"),
|
||||
bot = chatbot(rules, true);
|
||||
|
||||
function log (msg, kls) {
|
||||
var d = document.createElement("div");
|
||||
d.setAttribute("class", "msg " + kls);
|
||||
d.innerHTML = msg;
|
||||
display.appendChild(d);
|
||||
}
|
||||
|
||||
function say (msg) {
|
||||
log(msg, "bot");
|
||||
display.scrollTop = display.scrollTopMax;
|
||||
}
|
||||
|
||||
input.addEventListener("keypress", function (event) {
|
||||
if (event.keyCode == 13) {
|
||||
var text = input.value;
|
||||
log(text, "user");
|
||||
say(bot(text), "bot");
|
||||
input.value = "";
|
||||
input.focus();
|
||||
}
|
||||
});
|
||||
say(rules.initial);
|
||||
}
|
||||
</script>
|
||||
<script src="doctor.js"></script>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,106 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title></title>
|
||||
<meta charset="utf-8">
|
||||
<style type="text/css">
|
||||
#wrapper {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
position: absolute;
|
||||
left: 5%; top: 5%; right: 5%; bottom: 5%;
|
||||
}
|
||||
#textinput {
|
||||
width: 100%;
|
||||
border: none;
|
||||
background: none;
|
||||
}
|
||||
#input {
|
||||
padding: 2%;
|
||||
flex: 0 1 auto;
|
||||
background: aqua;
|
||||
}
|
||||
#display {
|
||||
flex: 1 1 auto;
|
||||
background: pink;
|
||||
padding: 2%;
|
||||
overflow: auto;
|
||||
}
|
||||
#display div.msg {
|
||||
padding-bottom: 0.5em;
|
||||
}
|
||||
#display div.human {
|
||||
color: black;
|
||||
}
|
||||
#display div.bot {
|
||||
color: black;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
#display div.debug {
|
||||
color: red;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div id="wrapper">
|
||||
<div id="display">
|
||||
</div>
|
||||
<div id="input">
|
||||
<input type="text" id="textinput" autofocus />
|
||||
</div>
|
||||
</div>
|
||||
<script src="eliza.js"></script>
|
||||
<script>
|
||||
function get_json (url, callback) {
|
||||
var request = new XMLHttpRequest();
|
||||
request.open('GET', url, true);
|
||||
request.onload = function() {
|
||||
if (request.status >= 200 && request.status < 400) {
|
||||
var data = JSON.parse(request.responseText);
|
||||
callback(data);
|
||||
} else { callback("server error"); }
|
||||
};
|
||||
request.onerror = function() { callback("connection error"); };
|
||||
request.send();
|
||||
}
|
||||
|
||||
get_json("doctor.json", function (rules) {
|
||||
var input = document.getElementById("textinput"),
|
||||
output = document.getElementById("display"),
|
||||
bot = chatbot(rules, true);
|
||||
|
||||
function log (msg, kls) {
|
||||
var d = document.createElement("div");
|
||||
d.setAttribute("class", "msg " + kls);
|
||||
d.innerHTML = msg;
|
||||
display.appendChild(d);
|
||||
}
|
||||
|
||||
function say (msg) {
|
||||
responsiveVoice.speak(msg)
|
||||
log(msg, "bot");
|
||||
// https://responsivevoice.org/api/
|
||||
display.scrollTop = display.scrollTopMax;
|
||||
// responsiveVoice.speak("hello world", "UK English Male", {onstart: StartCallback, onend: EndCallback});
|
||||
}
|
||||
|
||||
var voicelist = responsiveVoice.getVoices();
|
||||
console.log("voicelist", voicelist);
|
||||
responsiveVoice.setDefaultVoice("US English Female");
|
||||
|
||||
input.addEventListener("keypress", function (event) {
|
||||
if (event.keyCode == 13) {
|
||||
var text = input.value;
|
||||
log(text, "user");
|
||||
say(bot(text), "bot");
|
||||
input.value = "";
|
||||
input.focus();
|
||||
}
|
||||
});
|
||||
say(rules.initial);
|
||||
});
|
||||
|
||||
</script>
|
||||
<script src='https://code.responsivevoice.org/responsivevoice.js'></script>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,40 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
||||
<meta name="viewport" content="width=device-width">
|
||||
|
||||
<title>Speech synthesiser</title>
|
||||
|
||||
<link rel="stylesheet" href="style.css">
|
||||
<!--[if lt IE 9]>
|
||||
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
|
||||
<![endif]-->
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<h1>Speech synthesiser</h1>
|
||||
|
||||
<p>Enter some text in the input below and press return to hear it. change voices using the dropdown menu.</p>
|
||||
|
||||
<form>
|
||||
<input type="text" class="txt">
|
||||
<div>
|
||||
<label for="rate">Rate</label><input type="range" min="0.5" max="2" value="1" step="0.1" id="rate">
|
||||
<div class="rate-value">1</div>
|
||||
<div class="clearfix"></div>
|
||||
</div>
|
||||
<div>
|
||||
<label for="pitch">Pitch</label><input type="range" min="0" max="2" value="1" step="0.1" id="pitch">
|
||||
<div class="pitch-value">1</div>
|
||||
<div class="clearfix"></div>
|
||||
</div>
|
||||
<select>
|
||||
|
||||
</select>
|
||||
</form>
|
||||
|
||||
<script src="speech.js"></script>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,67 @@
|
||||
var synth = window.speechSynthesis;
|
||||
|
||||
var inputForm = document.querySelector('form');
|
||||
var inputTxt = document.querySelector('.txt');
|
||||
var voiceSelect = document.querySelector('select');
|
||||
|
||||
var pitch = document.querySelector('#pitch');
|
||||
var pitchValue = document.querySelector('.pitch-value');
|
||||
var rate = document.querySelector('#rate');
|
||||
var rateValue = document.querySelector('.rate-value');
|
||||
|
||||
var voices = [];
|
||||
|
||||
function populateVoiceList() {
|
||||
voices = synth.getVoices();
|
||||
var selectedIndex = voiceSelect.selectedIndex < 0 ? 0 : voiceSelect.selectedIndex;
|
||||
voiceSelect.innerHTML = '';
|
||||
for(i = 0; i < voices.length ; i++) {
|
||||
var option = document.createElement('option');
|
||||
option.textContent = voices[i].name + ' (' + voices[i].lang + ')';
|
||||
|
||||
if(voices[i].default) {
|
||||
option.textContent += ' -- DEFAULT';
|
||||
}
|
||||
|
||||
option.setAttribute('data-lang', voices[i].lang);
|
||||
option.setAttribute('data-name', voices[i].name);
|
||||
voiceSelect.appendChild(option);
|
||||
}
|
||||
voiceSelect.selectedIndex = selectedIndex;
|
||||
}
|
||||
|
||||
populateVoiceList();
|
||||
if (speechSynthesis.onvoiceschanged !== undefined) {
|
||||
speechSynthesis.onvoiceschanged = populateVoiceList;
|
||||
}
|
||||
|
||||
inputForm.onsubmit = function(event) {
|
||||
event.preventDefault();
|
||||
|
||||
var utterThis = new SpeechSynthesisUtterance(inputTxt.value);
|
||||
var selectedOption = voiceSelect.selectedOptions[0].getAttribute('data-name');
|
||||
for(i = 0; i < voices.length ; i++) {
|
||||
if(voices[i].name === selectedOption) {
|
||||
utterThis.voice = voices[i];
|
||||
}
|
||||
}
|
||||
utterThis.pitch = pitch.value;
|
||||
utterThis.rate = rate.value;
|
||||
synth.speak(utterThis);
|
||||
|
||||
utterThis.onpause = function(event) {
|
||||
var char = event.utterance.text.charAt(event.charIndex);
|
||||
console.log('Speech paused at character ' + event.charIndex + ' of "' +
|
||||
event.utterance.text + '", which is "' + char + '".');
|
||||
}
|
||||
|
||||
inputTxt.blur();
|
||||
}
|
||||
|
||||
pitch.onchange = function() {
|
||||
pitchValue.textContent = pitch.value;
|
||||
}
|
||||
|
||||
rate.onchange = function() {
|
||||
rateValue.textContent = rate.value;
|
||||
}
|
Loading…
Reference in New Issue