1

const btn = document.querySelector('.talk');
const content = document.querySelector('.content');
const greetings = [
    'If you are good im good to ', 
    'Im doin alright', 
    'Im tired '
];
const weather = [
    'Ask the weatherman!', 
    'I recommend checking your phone or the news ' 
    
];
const name = [
 'My name is techwaala', 
 'its techwaala, because I love to code!'
];
const hello = [
 'Why hello! How are you doing today?', 
 'Hey there How are you?'
]
const hru = [
 'thats great!', 
 'Im so sorry to hear that', 
 'Feel better soon!'
]
const SpeechRecognition = 
 window.SpeechRecognition || window.webkitSpeechRecognition;
const recognition = new SpeechRecognition();

recognition.onstart = function() {
 console.log('voice is activated speak into the mic');
};
recognition.onresult = function(event) {
 const current = event.resultIndex;
 
 const transcript = event.results[current][0].transcript;
 content.textContent = transcript;
 readOutLoud(transcript);
}

btn.addEventListener('click', () => {
 recognition.start();
});

function readOutLoud(message) {
 
 const speech = new SpeechSynthesisUtterance();
 speech.text = 'I dont know what you said';
 if(message.includes('how are you')) {
   const finalText = 
   greetings[Math.floor(Math.random() * greetings.length)];
   speech.text = finalText;
  
 } 
 if(['hey', 'hi', 'hello', 'hi there', 'hey there', 'hi techwala', 'hey techwala','hello techwala']
 .some(word => message.includes(word))) {
    const finalText = hello[Math.floor(Math.random() * hello.length)];
    speech.text = finalText;
 
}
 if(['whats your name', 'your name']
 .some(word => message.includes(word))) {
    const finalText = name[Math.floor(Math.random() * name.length)];
    speech.text = finalText;
}
if(['how\'s the weather', 'what\'s the weather like', 'is it sunny', 'is it raining', 'is it cloudy', 'is it snowing']
 .some(word => message.includes(word))) {
    const finalText = weather[Math.floor(Math.random() * weather.length)];
    speech.text = finalText;
}
 
 speech.volume = 1;
 speech.rate = 1;
 speech.pitch = 1;
 window.speechSynthesis.speak(speech);
  
 } 

I'm working on a webpage which talks when you say something. Its default is speaking in US Male but what if I wanted to change the accent to let's say UK Female or French Male? I tried using responsive voice.org but that isn't working for me. How would I do this? Also, I didn't insert the HTML into this snippet because I thought that the JavaScript would be the only necessary thing to look at.

Love2Code
  • 440
  • 6
  • 19
  • 2
    Have you tried the SpeechSynthesis voice documentation? https://developer.mozilla.org/en-US/docs/Web/API/SpeechSynthesisUtterance/voice As for getting voices to load: https://stackoverflow.com/questions/21513706/getting-the-list-of-voices-in-speechsynthesis-of-chrome-web-speech-api – MBer Jun 20 '19 at 20:51

1 Answers1

2

Use speechSynthesis

There is a nice example in the docs, but essentially something like this if you were to hardcode the voice:

var synth = window.speechSynthesis;

// get voices
var voices = synth.getVoices();

// when voices have finished loading
synth.onvoiceschanged = function() {

  var sayThis = new SpeechSynthesisUtterance('Hi how are you?');
  sayThis.onend = function(event) {
    console.log('SpeechSynthesisUtterance.onend');
  }

  sayThis.onerror = function(event) {
    console.error('SpeechSynthesisUtterance.onerror');
  }

  var selectedVoice = 'Google UK English Female';
  for (var i = 0; i < voices.length; i++) {
    if (voices[i].name === selectedVoice) {
      sayThis.voice = voices[i];
      break;
    }
  }
  sayThis.pitch = 1;
  sayThis.rate = 1;

  synth.speak(sayThis);
}
Lawrence Cherone
  • 46,049
  • 7
  • 62
  • 106
  • In my readOutLoud function I used speechSynthesis, Could you please show me an example of how to input my selected voice into the JS I've put above? Thank you! – Love2Code Jun 20 '19 at 21:13
  • Here is another example, https://developer.mozilla.org/en-US/docs/Web/API/SpeechSynthesisUtterance/voice – Lawrence Cherone Jun 20 '19 at 21:20