http://bit.ly/naver_android_tts_engine
이전에 안드로이드의 TTS엔진을 네이버의 음성 합성 Api를 사용해서 만든 적이 있었는데
얼마전에 AWS의 Polly에서 한국어를 지원한다고 해서 Polly버젼을 만들어 봄
https://android.googlesource.com/platform/development/+/master/samples/TtsEngine/src/com/example/android/ttsengine/RobotSpeakTtsService.java
코드는 전과 마찬가디로 구글의 샘플코드를 기반으로 Polly를 더할 예정
https://github.com/awslabs/aws-sdk-android-samples/tree/master/PollyDemo
aws의 샘플 앱도 있고 구조도 간단해서 이해하기 편함
간단히 구현에 대해 정리하자면
1. aws Cognito에서 자격 증명 풀을 만들고(자격 증명 풀 ID 메모)
2. 그 풀의 IAM 룰에서 Polly관련 정책을 넣어주고
3. gradle에 polly를 넣어주고
4. Demo앱에 있던 코드를 그대로 가져와서 풀 ID와 리전을 설정해주고
5. onCreate에서 인증을 해 두면 기본 준비는 끝
6. 사용할 수 있는 음성은 동적으로 호출이 가능
JSON형태로 리턴되는데 나중에 필요한건 Id값만(이름)
7. getPresignedSynthesizeSpeechUrl로 합성된 음성의 Url주소를 받아 오는 것으로 끝
(한국어 테스트를 위해 서연을 하드코딩중...)
8. 네이버 TTS Engine만들기에서는 mp3로만 출력이 되어서 안드로이드 안에서 디코딩을 하는 작업이 필요했는데
aws polly는 PCM으로 바로 출력이 가능함
하지만 16000Hz만 지원해서 음질이 조금 나빠지고
mp3 22050과 pcm의 16000의 용량 차이를 비교해 보진 않았지만
스마트폰의 데이터 용량에 미치는 영향도 생각해 봐야 할듯
(사실 네이버 엔진 만들때 이미 디코딩을 구현해놔서 사실 PCM으로 받을 필요는 없음...)
Polly의 음성
(web에서 테스트 출력한 파일)
안녕하세요. 만나서 반가워요. 감사합니다.
왠지 다 '~'가 붙는 느낌...
개인적으로 목소리 톤은 참 마음에 들음
하지만 문제점
(2017-11-26일 기준)
500m 부분이 그냥 생략 되어 버림...
영어를 못함...
하지만 장점
어휘나 SSML태그를 사용해서 커스텀 마이징이 가능
예를 들어 음성 합성을 하는 일본인 캐릭터가 있는데 정작 자기의 한자 이름을 못말한다던지의 문제점이 발생할때
저런 어휘를 지정하는 기능은 필수적일듯
SSML태그는 문장 중간중간에 속도를 조정한다던지의 커스텀이 가능한데
노력이 좀 필요해 보이지만 E-Book같은곳에서 사용되면 정말 좋아 보임
엄청나게 많은(상대적으로) 무료 제공량...
(물론 넘어가면 바로 결제되는 aws시스템... CloudWatch로 그나마 과금을 최소화 한다던지...)
결론
무료 글자수 제한도 넉넉하고
실제로 이용하려고 할때 제휴신청보다 그냥 결제하면 되니 편하고
네이버는 규리의 음성은 비공개 중이니
음성이 가장 좋다고 할 수 있는데
영단어만 좀...