반응형
speech Synthesis
Code
<script>
const msg = new SpeechSynthesisUtterance();
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;
const populateVoices = (e) => {
voices = e.target.getVoices();
voicesDropdown.innerHTML = voices.filter(voice => voice.lang.includes("ko"))
.map(voice => `<option value="${voice.name}">${voice.name} (${voice.lang})</option>`)
.join("");
}
const toggle = (startOver = true) => {
speechSynthesis.cancel();
if (startOver) speechSynthesis.speak(msg);
}
const setVoice = (e) => {
msg.voice = voices.find(voice => voice.name === e.target.value);
toggle();
}
const setOption = (e) => {
msg[e.target.name] = e.target.value;
toggle();
}
speechSynthesis.addEventListener('voiceschanged', populateVoices);
voicesDropdown.addEventListener('change', setVoice);
options.forEach(option => option.addEventListener('change', setOption));
speakButton.addEventListener('click', toggle);
stopButton.addEventListener('click', () => toggle(false));
</script>
배운 점 & 느낀 점
SpeechSynthesisUtterance라는 webApi를 이용해서 text를 읽어주는 과제였습니다.
속도나, 억양을 선택할 수 있었습니다.
재밌는 과제였고, 언젠간 쓸날이 있지않을까 ? 하는 생각이 들었습니다..
반응형
'공부 정리 > jsChallenge' 카테고리의 다른 글
js challenge day 25 (0) | 2023.02.27 |
---|---|
js challenge day 24 (0) | 2023.02.24 |
js challenge day 22 (0) | 2023.02.22 |
js challenge day 21 (0) | 2023.02.21 |
js challenge day 19 (0) | 2023.02.16 |
댓글