Toggling Voice On/Off in SUSI Chromebot
SUSI Chromebot has a lot of features that make it one of the best projects of FOSSASIA.
Recently Voice/Speech was added to SUSI Chromebot. But there was no option that controlled the fact that whether speech output is needed or not.
The latest addition to SUSI Chromebot is Toggling the Voice of SUSI On or Off.
How was it achieved?
Toggling Voice for SUSI required adding a button and a snippet of Javascript code to the main JS file. The code will take care of the fact whether the voice is to be toggled on or off.
I started off by adding a button to the main HTML file.
<a href=”javascript: void(0)” id=”speak” style=”color: white”><i class=”material-icons” id=”speak-icon”>volume_up</i></a>
|
The above snippet of HTML code adds a voice button to the top bar of chromebot.
Then there was the major part where the javascript code was to be added to add the functionality to the button.
var shouldSpeak = true;
|
I started off by creating a variable called as “shouldSpeak” which will determine whether or not SUSI should use the Chrome’s API to speak.
Then I changed the “speakOut()” function and added another parameter to it.
function speakOut(msg,speak=false){ if(speak){ var voiceMsg = new SpeechSynthesisUtterance(msg); window.speechSynthesis.speak(voiceMsg); } } |
The above code made sure that susi was only allowed to speak when and only “speak” variable was set to true.
Then “eventListeners” were added to buttons and other things to link the functionality.
document.getElementById(‘speak’).addEventListener(‘click’,changeSpeak);
|
It adds the events of click to “speak” and associates it with the function “changeSpeak”.
Now the function “changeSpeak” is created as follows. It toggles the on/off mechanism of voice in SUSI Chromebot.
function changeSpeak(){ shouldSpeak = !shouldSpeak; var SpeakIcon = document.getElementById(‘speak-icon’); if(!shouldSpeak){ SpeakIcon.innerText = “volume_off”; } else{ SpeakIcon.innerText = “volume_up”; } console.log(‘Should be speaking? ’ + shouldSpeak); } |
Everytime the user clicks on the icon to toggle on/off voice the icon must also change and this functionality was taken care of by the above piece of code.
Resources
- SUSI Chromebot Repository : https://github.com/fossasia/susi_chromebot
- Pull Request for the same : https://github.com/fossasia/susi_chromebot/pull/113
- Issue for the same : https://github.com/fossasia/susi_chromebot/issues/110
- Read about Speech Synthesis : https://developer.mozilla.org/en-US/docs/Web/API/SpeechSynthesis
- Learn How to add Event Listeners to Objects : https://www.w3schools.com/jsref/met_document_addeventlistener.asp
- What is “javascript : void(0)” : https://stackoverflow.com/questions/1291942/what-does-javascriptvoid0-mean
- Read about Material Icons : http://materializecss.com/icons.html
You must be logged in to post a comment.