본문 바로가기
프로젝트

[toyproject] text to voice converter 만들기

by jyee 2023. 11. 21.
728x90
반응형

 

HTML5,CSS,JAVA SCRIPT,SPEECH API 

 

영상 소리 주의🔊🔊🔊

 

게임 토이프로젝트는 한번 도전하면 시간도 굉장히 오래 걸리고 머리가 꽤나 아프기때문에 

좀 더 재미있게 할 수 있는 프로젝트를 하고 싶어서 유튜브로 찾아봤다! 

자바스크립트로 speech api를 이용하여 텍스트 입력했을 때 입력한 텍스트를 음성으로 변환 시키는 건데 간단하게 만들어보았다. 

 

//index.html 파일
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Text to Speech Converter </title>
    <link rel="stylesheet" href="style.css">
</head>
<body>

<div class="hero">
    <h1>Text to Speech <span>Converter</span></h1>
    <textarea placeholder="Write anything here..."></textarea>
    <div class="row">
        <select></select>
        <button><img src="images/play.png">Listen</button>
    </div>
</div>
<script src="script.js"></script>
</body>
</html>

 

화면단을 간단하게 만들어 주고 나서 css를 통해 꾸며줬다. 기존 강의와 똑같이 하되 색깔만 내가 원하는 색으로 바꿨다. 

그리고 따로 추가하고 싶은 부분이 있었던 건 text to speech converter이라는 폰트의 테두리에 색을 넣고 싶어서 찾아보니 

 

 css  text-shadow를 사용하면 된다고 해서 추가로 꾸며줬다. 

백그라운드 색이 노랑색이 티가 안나는거 같긴 하지만 기존 밋밋한 느낌보다 이뻐서 노랑색으로 했다.

text-shadow: -1px 0px yellow, 0px 1px yellow, 1px 0px yellow, 0px -1px yellow;

 

다른 색상으로 바꿔봤는데 이게 더 이쁜거 같기도 하고.... 

 text-shadow: -1px 0px goldenrod, 0px 1px goldenrod, 1px 0px goldenrod, 0px -1px goldenrod;

 

대망의 자바스크립트! 

let speech = new SpeechSynthesisUtterance();

let voices = [];

let voiceSelect = document.querySelector("select");


window.speechSynthesis.onvoiceschanged = () => {
    voices = window.speechSynthesis.getVoices();
    speech.voice = voices[0]; 

    voices.forEach((voice, i) => (voiceSelect.options[i] = new Option(voice.name, i)));
};

//default 보이스 지정하기 
voiceSelect.addEventListener("change", () =>{
    speech.voice = voices[voiceSelect.value];
});

document.querySelector("button").addEventListener("click", () =>{
    speech.text = document.querySelector("textarea").value;
    window.speechSynthesis.speak(speech)
});

 

코드를 잘 몰라서 하나씩 자세하게 봤다. 

먼저 let speech = new SpeechSynthesisUtterance(); 

SpeechSynthesisUtterance 음성합성을 위한 API 중 하나이며, 음성 관련 설정과 텍스트 등을 담을 수 있게 객체로 생성했다.

 

let voices = [];
let voiceSelect = document.querySelector("select");

voices 배열은 음성 목록을 저장하기 위한 빈 배열이고 voiceSelect은 HTML에서 <select> 요소를 찾아 변수에 할당한 것이다.

window.speechSynthesis.onvoiceschanged = () => {
    voices = window.speechSynthesis.getVoices();
    speech.voice = voices[0]; 

    voices.forEach((voice, i) => (voiceSelect.options[i] = new Option(voice.name, i)));
};

음성 목록 업데이트하는 건데 onvoiceschanged가 음성 목록이 변경될 때 발생하며, 여기서는 이벤트가 발생하면 사용가능한 음성목록을 가져와 'voices'배열에 저장한다. 그리고  forEach로 각 음성에 select요소 옵션을 추가한다 이때 옵션 값은 음성의 인덱스이고 표시되는 텍스트는 음성의 이름이다, 

 

voiceSelect.addEventListener("change", () =>{
    speech.voice = voices[voiceSelect.value];
});

이 부분은 default 기본 음성을 설정하는 코드: 

voiceSelect 셀렉트박스에서 음성을 선택했을 때 이벤트가 발생하면 해당 음성을 speech.voice에  설정한다.

 

document.querySelector("button").addEventListener("click", () =>{
    speech.text = document.querySelector("textarea").value;
    window.speechSynthesis.speak(speech)
});

텍스트를 음성으로 변환하여 재생하는 코드:

Listen 버튼을 눌렀을 때 textarea에 입력된 텍스트가 speech.text에 설정되고   window.speechSynthesis.speak(speech)를 호출하여 해당 텍스트를 음성으로 변환하여 재생하는 것 

 

 

 

참고한 유튜브 

https://youtu.be/3oDNqHZ7UKY?si=4OthUdTxpRJvha6-

 

 

728x90
반응형

'프로젝트' 카테고리의 다른 글

[toyproject] Audio API  (0) 2023.11.25