Speech Synthesis

const msg = new SpeechSynthesisUtterance();// ๊ฐ์ฒด ์„ ์–ธ (๋ธŒ๋ผ์šฐ์ €์— ๋‚ด์žฅ ๋˜์–ด์žˆ๋Š” ์ฃผ์–ด์ง„ ํ…์ŠคํŠธ๋ฅผ ์†Œ๋ฆฌ๋กœ ๋ฐ”๊ฟ”์ฃผ๋Š” TTS API)
let voices = [];
const voicesDropdown = document.querySelector('[name="voice"]');
const options = document.querySelectorAll('[type="range"], [name="text"]');
const speakButton = document.querySelector('#speak');
const stopButton = document.querySelector('#stop');
msg.text = document.querySelector('[name="text"]').value;

function populateVoices() {
    voices = this.getVoices();
    voicesDropdown.innerHTML = voices
        .filter(voice => voice.lang.includes('ko'))
        .map(voice => `<option value="${voice.name}">${voice.name} (${voice.lang})</option>`)
        .join(''); // ์˜ต์…˜ ์ƒ์„ฑ 
}

function setVoice() {
    msg.voice - voices.find(voice => voice.name === this.valye);
    toggle();
}
/*์†Œ๋ฆฌ๋ฅผ ์„ค์ • ์ด๋ฒคํŠธ๋ฅผ ๋ชฉ์†Œ๋ฆฌ๋ฅผ ์„ค์ •ํ•˜๋Š” ํ•จ์ˆ˜ 
TTS ์ •๋ณด๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” msg ๊ฐ์ฒด์˜ voice ๊ฐ’์„ ๋ฐ”๊ฟ”์ค€ ํ›„ ์ง์ ‘ ์ž‘์„ฑํ•œ toggle() ํ•จ์ˆ˜๋กœ ๋ชฉ์†Œ๋ฆฌ๋ฅผ ๋‹ค์‹œ ์žฌ์ƒํ•œ๋‹ค. */


function toggle(startOver = true) {
    speechSynthesis.cancel();
    if(startOver){
        speechSynthesis.speak(msg);
    }
}
/* ์Œ์„ฑ์„ ์žฌ์ƒํ•˜๋Š” toggle() ์ž‘์„ฑ ์ธ์ž๋กœ startOver๋ฅผ ๋„˜๊ธฐ๊ณ , ๊ธฐ๋ณธ ์„ค์ • ์ธ์ž์ธ true์ธ ๊ฒฝ์šฐ 
  ์ด์ „ ์Œ์„ฑ์„ ์ทจ์†Œํ•˜๊ณ  ์ƒˆ๋กœ์šด ์Œ์„ฑ์„ ์žฌ์ƒํ•˜๋ฉฐ, false๋ฅผ ์ธ์ž๋กœ ์ฃผ๋ฉด ์Œ์„ฑ๋งŒ ์ทจ์†Œํ•œ๋‹ค. */
  
  
function setOption(){
    console.log(this.name, this.value);
    msg[this.name] = this.value;
    toggle();
}
/* ๋‹ค๋ฅธ ์„ค์ •์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋Š” setOption() ์ž‘์„ฑํ•˜๊ธฐ
   input ๊ฐ์ฒด์˜ name์„ ๋ณ€๊ฒฝํ•  ์†์„ฑ์˜ ์ด๋ฆ„๊ณผ ์ผ์น˜์‹œํ‚ค๋ฉด input ๊ฐ์ฒด์˜ value๋กœ ๋ณ„๋„๋กœ ์˜ต์…˜์„ ๊ตฌ๋ณ„ํ•˜์—ฌ ์ž‘์„ฑํ•  ํ•„์š”์—†์ด ํ•œ๋ฒˆ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.*/

// ->  ํ•จ์ˆ˜๋“ค์„ ์ด๋ฒคํŠธ๋กœ ๊ฑธ์–ด์ค€๋‹ค.
speechSynthesis.addEventListener('voiceschanged', populateVoices);
voicesDropdown.addEventListener('change', setVoice);
options.forEach(option => option.addEventListener('change', setOption)); // ์˜ต์…˜์ด ๋ณ€๊ฒฝ๋ ๋•Œ ๋งˆ๋‹ค ์‹คํ–‰ 
speakButton.addEventListener('click', toggle);
stopButton.addEventListener('click', ()=> toggle(false));

Last updated