본문 바로가기

Daum Developers

서비스

뉴톤톡(Newtone Talk) - 모바일(iOS) sdk

목차

소개

아이폰 앱 개발시 Daum Developers에서 제공하는 뉴톤톡 SDK를 활용하여 텍스트를 음성으로 합성하는 기능을 추가할 수 있습니다.

요구 사항

  • Xcode 7.0 이상
  • iOS Deployment Target : iOS 7.0 이상

APIKey 발급

이 API를 사용하기 위해서는 App을 생성하고 APIKey를 발급받아야 합니다. (콘솔)

콘솔에서 App 생성 후 플랫폼(android, iOS 등)마다 APIKey를 추가할 수 있습니다.

앱의 Bundle ID는 Info.plist 파일의 Bundle Identifier 프로퍼티에 설정됩니다. [[NSBundle mainBundle] bundleIdentifier] 메소드를 이용해도 Bundle ID 를 확인할 수 있습니다.

뉴톤톡 SDK 설치 및 framework 추가

  1. iOS용 뉴톤 API SDK는 라이브러리 버전별로 받을 수 있습니다.
    압축해제 하시면 라이브러리(lib)뿐만 아니라, 레퍼런스(doc), 샘플코드도 포함되어 있습니다.
    
  2. iOS용 라이브러리를 다운 받아서 압축을 풀고 DaumSpeech.embeddedframework를 애플리케이션 프로젝트로 복사합니다.
  3. 프로젝트 Build Phases의 Link Binary With Libraries에 +버튼을 누르고 DaumSpeech framework를 추가합니다.
  4. DaumSpeech Framework 사용을 위해서는 iOS에서 제공하는 아래 framework들을 추가해야 합니다. 해당 framework 들은 오디오 세션과 관련된 부분의 상태를 확인하고 제어하기 위해 필요합니다.
iOS framework
AudioToolbox
SystemConfiguration
AVFoundation
MediaPlayer

MediaPlayer를 추가하게 되면 뉴톤 API에서는 MPMusicPlayerController로 iPod이 재생여부를 확인하여 뉴톤톡 실행 전에 iPod을 pause 시킨 뒤, 음성합성이 종료된 후 다시 play 합니다. 추가하지 않으면 음성합성에는 영향이 없으나 뉴톤톡 종료 후 앱에서 별도의 AudioSession Category를 설정하지 않았을 경우 SoloAmbientSound로 설정합니다.

추가하고자 하는 Target의 설정에서 “Build Phases” 탭의 “Link Binary With Libraries” 항목 하단에 나타나는 + 버튼을 사용하여 추가할 수 있습니다. libstdc++6.tbd, libiconv.tbd 도 추가합니다.

Resize icon

추가하고자 하는 Framework의 이름을 검색하고 Add 버튼을 눌러 framework를 Target에 추가합니다.

Resize icon

위 과정을 반복하여 DaumSpeech framework이 사용하는 모든 framework들을 Target에 추가합니다. 아래 이미지는 모든 framework들이 추가된 후의 상태입니다.

Resize icon

라이브러리 import


뉴톤톡 라이브러리의 모든 API는 DaumSpeechTextToSpeech.h를 import함으로써 접근이 가능합니다.

#import <DaumSpeech/DaumTextToSpeech.h>

iOS용 뉴톤 API에서는 클래스명 앞에 모두 MT라는 prefix가 붙습니다.
여기서 MT는 Mobile Toolkit를 의미하고, Daum Developers의 모바일 API의 표준 prefix입니다.

뉴톤 기능 Client 인스턴스 생성하기


음성합성을 사용하기 위해서는 뉴톤톡 클래스의 인스턴스 생성 및 발급받은 apikey, 서비스 모드 등을 설정해야 합니다. apikey, 서비스 모드 등의 정보는 NSDictionary의 key/value 형태로 생성하며, TextToSpeechConfigKeyApiKey 는 반드시 지정해야 합니다. 이렇게 생성한 Dictionary 정보를 가지고 MTTextToSpeechClient 인스턴스를 생성합니다.

뉴톤톡 기능의 설정과 실행은 MTTextToSpeechClient를 통해 이용할 수 있습니다.

NSDictionary *config = @{TextToSpeechConfigKeyApiKey : @"발급받은 api Key",
  TextToSpeechConfigKeyVoiceType : self.voiceType,     //TTS 음색 모드 설정(TextToSpeechVoiceTypeWoman)
  TextToSpeechConfigServiceMode : self.serviceMode,    //TTS 서비스 모드 설정(NewtoneTalk_1)
  TextToSpeechConfigKeySpeechSpeed : [NSNumber numberWithFloat:[self.speechSpeed.text floatValue]]};  //발음 속도(0.5~4.0)

MTTextToSpeechClient *textToSpeechClient = [[MTTextToSpeechClient alloc] initWithConfig:config];
설정 Key 설명
TextToSpeechConfigKeyApiKey [required] 발급받은 Api Key.
TextToSpeechConfigKeySpeechSpeed 발음속도 0.5 ~ 4.0 (1이 보통속도, 크면 빠르게, 작으면 느리게)
TextToSpeechConfigKeyVoiceType TextToSpeechVoiceTypeWoman : 여성 차분한 낭독체
TextToSpeechVoiceTypeMan : 남성 차분한 낭독체
TextToSpeechVoiceTypeWomanDialog : 여성 밝은 대화체
TextToSpeechVoiceTypeManDialog : 남성 밝은 대화체
TextToSpeechConfigServiceMode NewtoneTalk_1 : 통계적 합성 방식. 기존에 뉴톤톡 API로 제공되던 통계적 합성 방식은 음성의 통계적 특성을 분석하여 모델을 만들고 이를 이용하여 합성하는 방식으로, 녹음된 데이터에 없는 합성음을 안정적으로 합성해 낼 수 있어서 다양한 분야에 적용되어도 일관된 품질의 합성음을 생성해 낼 수 있고 음색 변환 등 다양한 응용에 적용할 수 있습니다. 일반적으로 편집 합성 방식에 비해 음질이 떨어집니다.
NewtoneTalk_2 : 편집 합성 방식. 새롭게 추가된 편집 합성 방식은 통계적 특성을 이용하는 것이 아니라 녹음된 음성 데이터 자체를 이용하여 필요한 음소들을 발췌하여 합성하는 방식입니다. 장점으로는 데이터 자체를 이용하므로 녹음에 사용된 문장과 동일한 영역의 문장들에 대해서는 통계적 합성 방식보다 자연스러운 음성을 만들어 낼 수 있습니다. 단점으로는 녹음 데이터에 없는 영역의 문장에서는 음질이 저하되는 단점이 있습니다. (예를 들어 대화체 음색을 이용하여 낭독체 문장을 합성하는 경우). 편집 합성 방식에서는 통계적 합성 방식과 달리 합성 속도 변경 기능은 제공하지 않습니다.

뉴톤톡 delegate 설정하기

음성합성의 종료 및 에러에 대한 이벤트를 callback 메서드를 구현하여 처리할 수 있습니다. callback 메서드를 받기 위해서는 MTTextToSpeechDelegate 프로토콜의 delegate 메서드들을 구현하면 됩니다. delegate 를 지정하는 방법은 TextToSpeechClient의 delegate 속성을 이용하면 됩니다.

TextToSpeechViewController.h

// 아래와 같이 delegate를 받을 header 파일에
<MTTextToSpeechDelegate>를 선언합니다.
@interface TextToSpeechSampleViewController ()
<UITextFieldDelegate, MTTextToSpeechDelegate>

TextToSpeechViewController.m

// 앞서 생성한 뉴톤톡 Client에 delegate를 설정합니다.
textToSpeechClient.delegate = self;    

뉴톤톡 실행하기

음성합성을 위한 텍스트를 [MTTextToSpeechClient play:(NSString *)targetText] 메서드의 파라미터로 전달하여 호출하면 동작됩니다.

[textToSpeechClient play:self.textField.text];

합성된 음성이 재생되는 것을 중지시키려면 [MTTextToSpeechClient stop] 메서드를 호출합니다.

[textToSpeechClient stop];

뉴톤톡 오류 처리 및 기타 이벤트 처리

onError:message:

onErrorOccured 메서드는 이름에서 알 수 있듯이 에러가 발생했을 때 호출됩니다. TextToSpeechClient 에서 다양한 에러 코드에 대응하는 MTTextToSpeechError enum 값을 알려줍니다.

- (  void  ) onError: (MTTextToSpeechError)
    errorCode message:(NSString *) errorMsg {
    // 뉴톤톡 중 에러가 발생했을 때 호출됩니다.
    }

뉴톤톡 에러코드

뉴톤톡 API는 아래와 같은 에러코드를 전달합니다. MTTextToSpeechError enum값입니다.

Error Code 설명
MTTextToSpeechErrorUnknown 알 수 없는 에러.
MTTextToSpeechErrorInitialize 초기화 실패.
MTTextToSpeechErrorNetwork 네트워크 오류가 발생한 경우. (클라이언트에서 SOCKET READ TIMEOUT 5초 초과)
MTTextToSpeechErrorClientInternal 클라이언트 내부 오류가 발생한 경우.
MTTextToSpeechErrorServerInternal 서버에서 오류가 발생한 경우.
MTTextToSpeechErrorServerTimeout 서버 최대 접속시간 초과.(세션 30초 초과 또는 SOCKET READ TIMEOUT 5초 초과)
MTTextToSpeechErrorAuthentication APPID 또는 APPKEY가 틀려서 인증이 실패한 경우.
MTTextToSpeechErrorTextBad 뉴톤톡 텍스트 오류. (처리과정을 거친 후 문자열의 길이가 0 또는 문자열의 길이가 0이상이지만 발음할 수 없는 문자로 구성된 경우. (^^, ----, (), [], !!!!! ) 등.)
MTTextToSpeechErrorTextExcess 뉴톤톡 최대 허용 길이 초과. (합성 길이가 30초 이상이거나 100byte이상 길이의 단어가 포함되어 있는 경우.)
MTTextToSpeechErrorRequestTextForbidden 뉴톤톡 금칙어 오류.
MTTextToSpeechErrorRequestExcess 뉴톤톡 서비스 최대 허용 횟수 초과.
MTTextToSpeechErrorUnsupportService 음성합성 서비스 모드 오류.

기타 이벤트

onFinished 메서드는 MTTextToSpeechClient의 합성이 수행된 후에 합성음이 플레이되고 종료된 이후에 호출됩니다. 여러가지 합성음 작업을 성공적으로 마치고 나면 가장 마지막에 호출되는 delegate 메서드입니다.

- (  void  ) onFinished {
    // 음성 합성의 모든 동작이 종료되었을 때 호출됩니다.
}

뉴톤톡 기본 내부 규칙

1. 표준어 및 한글 사용

  • "다음 음성 합성 엔진"은 한국어 문장 합성기로, 영어 문장은 합성이 불가능합니다.
    • 다만 흔히 사용하는 영어 단어, 약어, 유명인 이름, 기업명 등은 예외적으로 한국식 발음으로 읽습니다.
  • 사투리나 은어, 비속어, 오타등은 합성음이 부자연스러울 수 있습니다.
  • URL -> "링크", 이메일 주소->"이메일 주소" 라는 발음으로 변환됩니다.
  • 미리 정의된 "ㅋㅋ", "ㅎㅎ" 등의 대화체 단어는 아래와 같이 합성됩니다.
  • Newtone Talk 2 에서는 속도 설정 변경이 적용되지 않고 항상 일정합니다.
단어 합성음
ㅎㅎ 흐흐 (3개 이상부터 "흐흐흐"로 통일)
ㅋㅋ 크크 (3개 이상부터 "크크크"로 통일)
ㅇㅋ 오케이
ㅇㅇ
ㄴㄴ
ㅃㅇ 빠이
ㅎㅇ 하이

2. 적절한 문장 부호 사용

  • 쉼표, 마침표, 느낌표, 물음표 등의 문장부호를 적절하게 사용합니다.
  • 특히 쉼표를 이용하여, 합성음에서의 인위적인 끊어읽기를 유도할 수 있습니다.

3. 특수기호

  • 흔히 쓰이는 특수기호를 제외하고는, 합성시 무시됩니다.
  • 마침표(.), 물음표(?), 탭(\t). 뉴라인(\n)을 기준으로 문장을 분리합니다.
  • 한글 자소, 한자 및 외래어등은 합성시 무시됩니다.
  • 흔히 사용되는 특수기호는 다음과 같습니다.
특수기호 합성음
$ 달러
¥
£ 파운드
유로
°
섭씨
화씨

4. 허용하지 않는 문장

  • 피싱에 사용될 가능성이 높은 문장
  • 음란성 문장