본문 바로가기

Autohotkey강좌

Autohotkey 19. 간단한 한글TTS(Text To Speech) 프로그램 만들기

반응형

https://youtu.be/zsHo-TphzHM

ttsimple.ahk
0.00MB
ttsimple.exe
1.22MB

문자를 사람의 언어로 읽어 주는 기술은 지속적으로 발전해 가고 있다. 특히나 요즘처럼 인공지능의 시대를 논하지 않더라도 일상에서 사용하는 네비게이션 서비스에서 쉽게 만날 수 있다. 물론 각 개발사들마다 서비스 수준은 천차만별이긴 하지만, 기본적으로 PC에서는 어떻게 하면 사용할 수 있을지를 오늘 알아보자. PC운영체제는 아무리 미워도 Microsoft를 빼고 말할 수는 없다. 특히 Autohotkey가 Windows 기반에서 동작하므로 더더욱 Microsoft에서 제공하는 기능을 먼저 파악해야 한다.
Microsoft에서 제공하는 Text To Speech의 기능을 이용하려면 Speech API를 사용해야 한다. 줄여서 SAPI라고 부른다. 이걸 사용하려면 어떻게 해야 할까? 어렵지 않다. 그냥 SAPI를 사용하겠다고 호출하고 바로 사용하면 된다. 그게 말이 되는 소리냐고 반문하신다면 바로 그렇습니다라는 대답이 나간다. 실제 사용예를 보자. 아래는 Autohotkey로 구성한 핵심 코드로써 단 3줄이다.

SAPI := ComObjCreate("SAPI.SpVoice")
text = "지금부터 얘기를 시작합니다."
SAPI.speak(text)

동작을 살펴보자. 우선 SAPI.SpVoice라는 이름을 가진 ComObj를 생성했다. 그것의 이름은 SAPI로 주었다.
이후에 필요한 시점에 말할 내용을 text로 저장해 주고 나서, text를 인자로 SAPI의 speak 메소드를 호출하였다.
너무나 심플한 3줄의 코딩으로 Text To Speech기능이 완성되었다. 실제로 쓸만하게 만들기 위해서는 UI도 구성해 보자.
먼저 사용자가 원하는 입력을 받을 수 있도록 "내용"이라는 Label을 가진 Text GUI를 만들고 실제 내용은 Edit항목으로 저장하는 구성을 해 보자.

Gui, ShowGui, Add, Text, x30 y35 w30 h20, 내용 ;
Gui, Add, Edit, x70 y30 w700 h500 vtext, 말할 내용을 입력하세요 ;

Gui, Add, Button, x350 y550 w100 h20, Speech ;
Gui, Show , w800 h600, Simple Text To Speech ver 1.0


위 두줄은 내용을 입력하기 위한 항목이고 3번째 줄은 시작하기 위해서 만들어준 버튼이 되며 마지막 Gui, Show라인을 실행하면 해당 메뉴가 보이게 된다. 사용자가 Confirm버튼을 누르면 ButtonConfirm으로 이동하여 시작하므로 위에서 작성한 3줄을 넣어 주면 되겠다. 사용자가 입력한 내용으로 읽기 위해서는 Gui, Submit을 실행해야 한다. 이후 사용자가 어떤 내용도 입력하지 않았을 때를 대비하여 에러 메시지를 띄우게 하면 된다.

추가로 종료할 수 있도록 ESC키에 App을 종료하도록 한다. 또한 우상단의 x표시로 프로그램을 종료했을 경우 처리할 수 있도록 Guiclose를 추가했다. 

 

아래는 전체 코드이다.
#SingleInstance Force
#NoEnv

Gui, ShowGui, Add, Text, x30 y35 w30 h20, 내용 ;
Gui, Add, Edit, x70 y30 w700 h500 vtext, 말할 내용을 입력하세요 ;

Gui, Add, Button, x350 y550 w100 h20, Speech ;
Gui, Show , w800 h600, Simple Text To Speech ver 1.0


CoordMode, Pixel
CoordMode, Mouse
SAPI := ComObjCreate("SAPI.SpVoice")

return

ButtonConfirm:
{
    Gui, Submit, nohide
    if ( text = "" or text = "말할 내용을 입력하세요")
    {
        Msgbox, "Please input your text to speech"
    } else {
        SAPI.speak(text)
    }
}
return

 

ESC::ExitApp
return

 

GUIClose:
ExitApp
return


본 예제는 유치원생이나 초등학생들을 상대로 가르치는 선생님들에게는 유용하리라 생각된다.
사용하는 언어는 한국어를 기본으로 영어도 문제 없이 읽혀졌다.
도움이 되시기를.…

반응형