1 문자 음성 변환기12

네이버나 카카오 같은 한국 기업들도 TTS가 있지만, 글로벌 클라우드 업체가 TTS를 한국어도 제공하고 있다는 점이 클라우드 시대를 맞아 데이터 과학자들이 관심을 갖아야 되는 내용이다. 최근 나온 text2speech 팩키지에 Amazon, Google, Microsoft TTS 소프트웨어를 한데 모아 사용하기 쉽게 개발해놨다.

2 한국어 TTS

AWS, Google, Microsoft 클라우드 API에서 한국어 관련 TTS 관련 내용을 추출해보자.

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”

2.1 AWS 폴리

AWS TTS엔진 AWS POLLY를 통해 가능한 한국어 기능을 살펴본다.

library(tidyverse)
library(text2speech)

readRenviron("~/.Renviron")

## AWS -------------------------------------
library(aws.polly)

tts_auth("amazon")
[1] TRUE
aws_df  <- tts_voices(service = "amazon") %>% 
  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 

2.2 구글 클라우드 TTS

구글 TTS엔진 Google Cloud TTS 를 통해 가능한 한국어 기능을 살펴본다.

## Google -------------------------------------
library(googleLanguageR)

tts_google_auth()
[1] TRUE
google_df <- tts_voices(service = "google") %>% 
  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 

2.3 마이크로소프트 TTS

3 AWS 폴리 헬로월드3

AWS POLLY를 호출하여 한국어 목소리로 텍스트를 소리로 바꿀 수 있다. tuneR 팩키지로 바로 합성한 목소리를 들어볼 수도 있다. tuneR 팩키지는 “Wave” 객체를 틀어볼 수 있으나 맥이나 리눅스에서는 setWavPlayer()를 지정해야만 된다.

korean_synthesis <- synthesize("데이터 과학자 이광춘님 환영합니다.", voice = "Seoyeon")

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)

tuneR::writeWave(korean_synthesis, "data/hello_world.wav")

3.1 오디오 임베딩

Audio files in R markdown 내용을 참고하여 R마크다운 파일에 .wav 오디오 파일을 넣는다.

html_tag_audio <- function(file, type = c("wav")) {
  type <- match.arg(type)
  htmltools::tags$audio(
    controls = NA,
    htmltools::tags$source(
      src = file,
      type = glue::glue("audio/{type}", type = type)
    )
  )
}

html_tag_audio("data/hello_world.wav", type = "wav")

4 MP3 파일 변환45

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")
 

데이터 과학자 이광춘 저작

kwangchun.lee.7@gmail.com