네이버나 카카오 같은 한국 기업들도 TTS가 있지만, 글로벌 클라우드 업체가 TTS를 한국어도 제공하고 있다는 점이 클라우드 시대를 맞아 데이터 과학자들이 관심을 갖아야 되는 내용이다. 최근 나온 text2speech 팩키지에 Amazon, Google, Microsoft TTS 소프트웨어를 한데 모아 사용하기 쉽게 개발해놨다.
aws.polly
googleLanguageR
mscstts
AWS, Google, Microsoft 클라우드 API에서 한국어 관련 TTS 관련 내용을 추출해보자.
aws.polly
googleLanguageR
usethis::edit_r_environ()
명령어로 ~/.Renviron
파일에 다음과 같이 각 클라우드 콘솔을 통해 생성시킨 Key값을 저장하거나 파일 위치를 특정한다.
AWS Text to Speech
AWS_ACCESS_KEY_ID = “AKI****************”
AWS_SECRET_ACCESS_KEY = “a09*************************”
AWS_DEFAULT_REGION = “ap-northeast-2”
AWS_SESSION_TOKEN = ""Google Text to Speech
GL_AUTH=“~/youtube-*************.json”
AWS TTS엔진 AWS POLLY를 통해 가능한 한국어 기능을 살펴본다.
library(tidyverse)
library(text2speech)
readRenviron("~/.Renviron")
## AWS -------------------------------------
library(aws.polly)
tts_auth("amazon")
[1] TRUE
tts_voices(service = "amazon") %>%
aws_df <- as_tibble
%>%
aws_df filter(str_detect(language, "Korean"))
# A tibble: 1 x 5
voice language language_code gender service
<chr> <chr> <chr> <chr> <chr>
1 Seoyeon Korean ko-KR Female amazon
구글 TTS엔진 Google Cloud TTS 를 통해 가능한 한국어 기능을 살펴본다.
## Google -------------------------------------
library(googleLanguageR)
tts_google_auth()
[1] TRUE
tts_voices(service = "google") %>%
google_df <- as_tibble()
%>%
google_df mutate(language = str_to_lower(language)) %>%
filter(str_detect(language, "korean"))
# A tibble: 8 x 5
voice language language_code gender service
<chr> <chr> <chr> <chr> <chr>
1 ko-KR-Standard-B korean ko-KR FEMALE google
2 ko-KR-Wavenet-B korean ko-KR FEMALE google
3 ko-KR-Standard-D korean ko-KR MALE google
4 ko-KR-Standard-A korean ko-KR FEMALE google
5 ko-KR-Standard-C korean ko-KR MALE google
6 ko-KR-Wavenet-A korean ko-KR FEMALE google
7 ko-KR-Wavenet-D korean ko-KR MALE google
8 ko-KR-Wavenet-C korean ko-KR MALE google
…
AWS POLLY를 호출하여 한국어 목소리로 텍스트를 소리로 바꿀 수 있다. tuneR
팩키지로 바로 합성한 목소리를 들어볼 수도 있다. tuneR
팩키지는 “Wave” 객체를 틀어볼 수 있으나 맥이나 리눅스에서는 setWavPlayer()
를 지정해야만 된다.
synthesize("데이터 과학자 이광춘님 환영합니다.", voice = "Seoyeon")
korean_synthesis <-
library("tuneR")
# On Mac OSX: setWavPlayer("/usr/bin/afplay")
# On Linux systems, try: setWavPlayer("/usr/bin/aplay")
# setWavPlayer("C:/Program Files/Window Media Player/wmplayer.exe")
# play(korean_synthesis)
::writeWave(korean_synthesis, "data/hello_world.wav") tuneR
Audio files in R markdown 내용을 참고하여 R마크다운 파일에 .wav
오디오 파일을 넣는다.
function(file, type = c("wav")) {
html_tag_audio <- match.arg(type)
type <-::tags$audio(
htmltoolscontrols = NA,
::tags$source(
htmltoolssrc = file,
type = glue::glue("audio/{type}", type = type)
)
)
}
html_tag_audio("data/hello_world.wav", type = "wav")
system()
함수를 사용해서 ffmepg
프로그램을 호출해서 .wav
파일을 .mp3
파일로 변환시킨다.
system("ffmpeg -i data/hello_world.wav -vn -ar 44100 -ac 2 -b:a 192k data/hello_world.mp3")
변환된 .mp3
파일을 R마크다운에서 불러와서 문서에 포함시킨다.
library(embedr)
embed_audio("data/hello_world.mp3")
Shirin Elsinghorst (June 27, 2018), “Text-to-speech with R”, Shirin’s playgRound↩︎
Shirin Elsinghorst (June 29, 2018), “Addendum:Text-to-Speech with the googleLanguageR package”, Shirin’s playgRound↩︎
Jarabek Gergely (Nov 20, 2018), “How to Use AWS Polly in R — basic tutorial”, Medium.com↩︎
Michael McCarthy (Jul 2, 2020), “Embedding multimedia files in R Markdown HTML documents”↩︎
데이터 과학자 이광춘 저작
kwangchun.lee.7@gmail.com