본문 바로가기

GameDevelopmentDiary/UnrealDiary

언리얼4 립싱크(Text To Speech) 구현 방법 Part2

1. 텍스트를 소리로 변환해보자.

1.1. AzureTTS Sample Project.

"뚜둔!"

  • 블루프린트도 열어보면,

<AzrueTTS 플러그인 사용 예제 github.com/breakstring>

  • 예제 노드들이 촤악 펼쳐져있다. 모두 알아두는게 좋다만, 당장 우리가 사용할 그룹은 딱 두 그룹이다.

<Text to speech>
<SSM 예제>

1.2. AzureCognitiveService

 

  • 가입과 TextToSpeech service 구독을 마치면 포털 페이지 최신 서비스에 뜬다. https://portal.azure.com/#home 
    그리고 해당 서비스를 누르면 이런 페이지가 나타난다. TTSEndPoint 먼저 확인 가능하다. 하지만 여기 보이는 엔드포인트는 토큰용 엔드포인트기 때문에 조금 수정이 필요하다. 

    엔드포인트 형식 참고: https://docs.microsoft.com/ko-kr/azure/cognitive-services/speech-service/regions
    TTS EndPoint = https://koreacentral.api.cognitive.microsoft.com/cognitiveservices/v1

<Azure SpeechService 페이지>

  • SubscriptionKey 경우는 우측하단에 있는 키를 관리하려면 여기를 클릭 링크를 클릭하면 나타나는 Key1을 사용하자.  두 변수를 모두 잘 적었다면 Play 버튼을 눌렀을 때, 목소리를 들을 수 없다.
    ... 죄송합니다.
    TextToSpeech 노드는 데이터를 가져오기만할 뿐 소리를 들려주지는 않는다. 때문에 이 데이터를 가공해서 우리 귀에 속삭여줄 노드가 필요하다.

1.3. 데이터 형변환(TArray<uint8> to USoundWave)과 Runtime Audio Importer

  • 일단은 단순히 소리가 잘 들리는지 확인이 목표이기에 플러그인을 이용해보겠다.
    Runtime Audio Importer!
    Runtime Audio Importer 객체는 목표 타입으로 오디오정보를 불러올 때 마다 특정 이벤트를 호출한다.
    AzureTTS 경우, raw-*-*-mono-pcm 결과는 불러와지지 않았다.
    audio-*-*-mono-mp3 타입의 경우 mp3, riff-*-*-mono-pcm 타입의 경우 wav 포멧으로 잘 불러와졌다.

<Runtime Audio Import 예시>

  • 자, 이제 진짜로 플레이 버튼을 누르면 목소리가 들려올것이다.
    흠, 하지만 뭔가 찜찜하다.
    변수로 입력한 텍스트도 목소리도 영어다. 주관적이지만 듣기평가 PTSD가 올 것 같아 심히 불편할 수 있다.

<SSM 예시문 중 일부>

  • 그러니 자랑스러운 한글을 사용해보자. '나랏말싸미 듕귁에 달아..'.
    그리고 플레이를 누르면, 당당한 한국어는 물론이며 아예 아무 소리도 나오지 않을 것이다.
    뭔가 또 다른 변수들을 건드려야한다.


1.4. SSML(Speech Synthesis Markup Language) 수정​

  • 먼저 SSML 생성부를 보면 'Xml:lang' 속성이 있다. 이걸 한국어로 바꿔주자. 

<SSM 생성 노드>

  • 그리고 VoiceName** 이라는 변수들은 성우 목소리인데, 한국성우로 바꿔주자.
    한국어 남,녀 목소리를 기본으로 제공해준다. (영어는 많던데 조금, 아주 조금 치사하다.)

<목소리 정보: https://docs.microsoft.com/ko-kr/azure/cognitive-services/speech-service/language-support>
<영어 목소리>
<한국어 목소리>

 

  • 이제 Play 버튼을 누르면 반가운 한국어가 들려올 것이다!
    이 다음에는 목소리에서 Viseme 값을 추출해보겠다.