음성 (뉴톤)

카카오에서는 모바일 상에서 손쉽게 사용할 수 음성 API를 제공합니다. 사용자는 모바일 기기에 장착되어 있는 마이크와 스피커를 이용해 사람의 음성 언어를 인식하거나 합성할 수 있습니다.

  • 시작하기 전에
    카카오 음성 API를 연동하기 전에 필요한 앱 설정 항목과 특징을 설명합니다.

현재 카카오 SDK에서 제공하는 음성 API 기능은 다음과 같습니다.

  • 음성 인식 (뉴톤)
    사람이 말하는 음성 언어를 컴퓨터가 해석해 그 내용을 문자 데이터로 변환하는 음성-문자 변환 시스템(Speech-to-Text system)입니다.
  • 음성 합성 (뉴톤톡)
    문자 데이터를 사람이 이해할 수 있는 음성 언어로 변환하는 문자-음성 변환 시스템(Text-to-Speech system)입니다.

시작하기 전에

요구 사항
  • Xcode 7.0 이상
  • iOS Deployment Target : iOS 8.0 이상

SDK 다운로드 및 프로젝트 설정
  • 최신 버전의 iOS Speech SDK를 다운로드 합니다.

    다운로드한 파일을 압축해제 하시면 프레임워크(.framework)뿐만 아니라, 레퍼런스(doc), 샘플코드도 포함되어 있습니다.

  • 다운로드한 파일의 압축을 풀고 KakaoNewtoneSpeech.framework 폴더를 내 프로젝트에 추가합니다.
  • KakaoCommon.framework를 내 프로젝트에 추가합니다. KakaoCommon.frameworkiOS Speech SDK 또는 1.3.0 이상의 iOS Kakao SDK 내에 포함되어 있습니다.
  • 그 외 음성 SDK를 사용하기 위해 필요한 모듈을 Link Binary With Libraries에 추가합니다. 추가해야할 모듈은 다음과 같습니다.
    AudioToolbox.framework
    libiconv.tbd
    libstdc++.6.tbd
  • plist 파일에 음성 API에 필요한 리소스 접근 용도 설명을 추가합니다.
    <dict>
      <key>NSMicrophoneUsageDescription</key>
      <string>{Your Usage}</string>
    </dict>

앱 설정
  • 앱 생성 가이드를 참고하여 앱을 생성하고 plist 파일에 앱키(KAKAO_APP_KEY)를 설정합니다.
  • 내 애플리케이션 > [앱] > 설정 > 음성 메뉴로 들어가서 음성 사용을 활성화 합니다. enable_speech.png

음성 SDK import

음성 인식 기능을 사용하는 곳에서 다음과 같이 헤더파일을 불러옵니다.

#import <KakaoNewtoneSpeech/KakaoNewtoneSpeech.h>

카카오 이미지 표시 의무

개인 또는 법인이 상업적 용도로 사용시 아래 카카오(powered by kakao) 이미지를 음성 API를 사용하고 있을때 표시하여야 한다. 모바일 기기 화면 상에서 위치는 상하 좌우측 또는 중간에 표시한다. 이미지 사이즈는 최소 가로 102 픽셀, 세로 15 픽셀 이상이어야 한다. (더 크게 표시할 경우 가로 세로 배율 유지)

Kakao.png

음성 인식 (뉴톤)

사람이 말하는 음성 언어를 컴퓨터가 해석해 그 내용을 문자 데이터로 변환하는 음성-문자 변환 시스템(Speech-to-Text system)입니다. 아래 순서대로 음성 인식 기능을 사용하기 위한 절차를 설명합니다.

사용가능 여부 확인

다음과 같이 현재 사용하는 iOS 기기가 음성 인식이 가능한지 여부를 체크할 수 있습니다. 사용자에게 마이크 접근 허용 여부를 묻는 확인 창이 나타납니다.

BOOL available = [MTSpeechRecognizer isRecordingAvailable];

마이크 접근 허용이 승인되어 있는지를 확인합니다. isRecordingAvailable에서도 체크를 하지만 마이크 접근허용 거부에 대한 별도의 처리를 원한다면 아래 코드로 확인할 수 있습니다.

BOOL grantedPermission = [MTSpeechRecognizer isGrantedRecordingPermission];

클라이언트 인스턴스 생성하기

음성 인식을 위한 클라이언트 인스턴스를 생성하려면 먼저 설정 정보를 NSDictionary의 형태로 생성해야 합니다.

설정 가능한 옵션은 다음과 같습니다.

설정 이름 설명 타입 필수
SpeechRecognizerConfigKeyServiceType 음성 인식에서 지원하는 서비스 타입으로 웹검색/연속어/지도 검색을 제공 NSString X
SpeechRecognizerConfigKeyRecgTimeout 녹음에서 인식까지의 전체 세션 타임 아웃으로 default는 30초 NSNumber (integer) X
SpeechRecognizerConfigKeyServerRecgTimeout 음성 입력 후에 서버에서 결과를 인식하기까지의 타임아웃으로 default는 10초 NSNumber (integer) X

SpeechRecognizerConfigKeyServiceType키에 사용될 수 있는 값은 다음과 같습니다.

값 이름 설명
SpeechRecognizerServiceTypeWeb 웹 검색 키워드 검색어 인식에 최적화. 포탈 검색에 많이 사용되는 텍스트들에 인식 최적화 되어 있다.(default)
SpeechRecognizerServiceTypeLocal 지도 검색으로 장소명 검색어 인식에 최적화.
SpeechRecognizerServiceTypeDictation 연속어 인식으로 문장 인식에 최적화. 15초 이내의 한 문장 정도 인식에 사용하면 된다.
SpeechRecognizerServiceTypeWord 고립어 인식으로 단어 인식에 최적화. UserDictionary 에 설정된 단어들 중에서만 인식한다.

생성된 설정 정보를 파라미터로 하여 MTSpeechRecognizerClient 인스턴스를 생성합니다. MTSpeechRecognizerDelegate를 구현하고 생성된 클라이언트 인스턴스에 델리게이트를 지정합니다.

다음은 웹 검색 키워드에 최적화된 음성 인식 클라이언트 인스턴스를 생성하는 예제입니다.

@interface {YourClass} : {YourSuperClass} <MTSpeechRecognizerDelegate>

...

// 설정 정보 생성
NSDictionary *config =
    @{SpeechRecognizerConfigKeyServiceType: SpeechRecognizerServiceTypeWeb};

// 클라이언트 생성
MTSpeechRecognizerClient *speechRecognizerClient =
    [[MTSpeechRecognizerClient alloc] initWithConfig:config];

// 델리게이트 설정
speechRecognizerClient.delegate = self;

...

@end

결과값 이용하기

MTSpeechRecognizerDelegate에는 총 7개의 메서드가 있습니다.

우선 [SpeechRecognizerClient startRecording]이 실행된 이후에 음성 입력을 감지하면 감지된 음성에 대한 결과를 경우에 따라 두가지 callback을 통해 얻을 수 있습니다.

onPartialResult

onPartialResult: 는 완전히 음성이 종료되기 이전에 현재까지 인식된 음성데이터 문자열을 알려줍니다. 이 데이터는 서버에 질의해 데이터를 보정하는 과정을 거치지 않으므로, 다소 부정확할 수 있습니다. 중간 인식 결과가 발생할 때마다 호출되므로 여러번 호출될 수 있습니다.

- (void) onPartialResult:(NSString *)partialResult {
    // 음성 인식 실행 중 중간 결과가 있을 때 호출됩니다.
}

Resize icon

onResults:confidences:marked:

onResults:confidences:marked: 는 음성 입력이 종료된 것으로 판단하거나 [SpeechRecognizerClient startRecording] 을 호출한 후에 서버에 질의하는 과정까지 마치고 나면 호출됩니다.

인식된 문자열은 신뢰도가 높은 값부터 순서대로 results 파라미터를 통해 String* 타입으로 얻을 수 있습니다.

신뢰도는 confidences 파라미터를 통해 얻을 수 있으며 높은 값부터 순서대로 Number* 값입니다.

신뢰도값은 항상 0과 같거나 0보다 큰 정수이며, 문자열 목록과 같은 개수입니다.

marked 파라미터는 results의 신뢰도가 가장 높은 0번째 data가 신뢰할 만한 값인지의 여부입니다.

- (void) onResults:(NSArray *)results confidences:(NSArray *)confidences marked:(BOOL)marked {
 // 음성 인식이 성공적으로 끝났을때 호출됩니다.
}

Resize icon

에러 및 기타 이벤트 처리

onError:message:

결과를 얻기 위한 delegate 메서드 말고도 다양한 delegate 메서드가 존재합니다.

onError 메서드는 이름에서 알 수 있듯이 에러가 발생했을 때 호출됩니다.

SpeechRecognizerClient 에서 다양한 에러 코드에 대응하는 MTSpeechRecognizerError enum 값을 알려줍니다.

- (void) onError: (MTSpeechRecognizerError) errorCode message:(NSString *) message {
    // 음성 인식 도중 에러가 발생했을 때 호출됩니다.
}
음성 인식 에러코드

음성 인식 API는 아래와 같은 에러코드를 전달합니다. MTSpeechRecognizerError enum 값입니다.

Error Code 설명
MTSpeechRecognizerErrorInitialize 초기화 실패.
MTSpeechRecognizerErrorNoMic 음성입력이 불가능하거나 마이크 접근이 허용되지 않았을 경우.
MTSpeechRecognizerErrorNetwork 네트워크에 의한 실패.
MTSpeechRecognizerErrorAudio Audio session 초기화 실패.
MTSpeechRecognizerErrorGlobalTimeout 음성 입력에서 결과인식까지의 타임아웃이 발생한 경우.
MTSpeechRecognizerErrorRecognitionTimeout 음성 인식 타임아웃이 발생한 경우.
MTSpeechRecognizerErrorRecognition 음성 인식에 실패한 경우.
MTSpeechRecognizerErrorAuthentication 인증에 실패한 경우.
MTSpeechRecognizerServerAllowedRequestsExcess 음성 인식 요청 허용 횟수 초과.
MTSpeechRecognizerServerError 음성 서버 내부 오류.
MTSpeechRecognizerUnsupprtService 음성서버에서 지원하지 않는 서비스 코드.
MTSpeechRecognizerUserDictEmpty 사용자사전이 꼭 필요한 서비스에서 사용자사전이 비어있는 오류.
기타 이벤트

onReady 메서드는 MTSpeechRecognizerClient의 startRecording이 수행된 후에 오디오 세션 등의 초기화 이후에 호출욉니다. 여러가지 초기화 작업을 성공적으로 마치고 나면 가장 먼저 호출되는 delegate 메서드입니다.

onBeginningOfSpeech 메서드는 사용자가 말하기 시작하는 것으로 판단될 때 호출되는 delegate 메서드입니다. 사용자가 말을 하지 않은 상태에서 에러가 발생하면 이 메서드는 호출되지 않습니다.

onEndOfSpeech 메서드는 사용자가 말하는 것을 끝마친 것으로 판단될 때 호출되는 delegate 메서드입니다.

사용자가 너무 오랜 시간을 말하여 앱이 지정한 시간 내에 음성을 인식하지 못하였거나 인식 중에 오류가 발생했을 때는 호출되지 않습니다.

onEndOfSpeech 이후에는 음성데이터를 서버에 전송하여 값을 보정하고 후보 인식 목록과 신뢰도를 조회하는 과정을 거칩니다.

onAudioLevel: 메서드는 음성이 입력되는 도중에 입력되는 음성의 크기를 dB(데시벨)로 판별한 후 재가공을 거친 상대값을 알려줍니다. 0과 1 사이의 float 값입니다.

Resize icon

- (void)onReady {
    // 음성 인식을 위한 준비가 완료되었을 때 호출됩니다.
}

- (void)onBeginningOfSpeech {
    // 녹음 시작이될 때 호출됩니다.
}

- (void)onEndOfSpeech {
    // 녹음 후 분석 중일때 호출됩니다.
}

- (void)onAudioLevel:(float)level {
    // 음성 audio level. (0 ~ 1)
}

음성 인식 실행하기

각종 결과를 전달 받을 델리게이트 메소드 구현이 끝나면 음성 인식 기능을 사용할 수 있습니다. 아래에서 설명하는 메소드를 이용하여 음성 인식 아래와 같이 [MTSpeechRecognizerClient startRecording] 메서드를 호출합니다.

음성
[speechRecognizerClient startRecording];

음성 인식 실행도중 중지하는 방법은 [MTSpeechRecognizerClient cancelRecording] 메서드와 [MTSpeechRecognizerClient stopRecording] 메서드, 두가지가 있습니다.

cancelRecording 은 음성 인식을 취소하며 이후로 진행되는 동작은 없습니다.

stopRecording 은 음성 인식을 멈추지만, startRecording을 실행한 이후부터 stopRecording을 실행할 때까지의 음성데이터를 이용해 음성 인식을 진행합니다.

따라서, stopRecording은 실행된 이후에 MTSpeechRecognizerDelegate의 onResults:confidences:marked 또는 onError:message 가 호출되게 됩니다.

[speechRecognizerClient stopRecording];
// or
[speechRecognizerClient cancelRecording];

SDK에서 제공하는 기본 UI 사용하기

SDK에서 제공하는 기능을 직접 이용하는 방법 말고도 제공되는 기본 UI를 통해 간편하게 사용자에게 UI를 제공할 수 있습니다. 간결하게 UI를 구성할 수 있도록 샘플 프로젝트의 리소스와 예제 코드를 이용할 수 있습니다.

기본 UI에서 많은 커스터마이징이 필요하다면 별도로 제작하는 것이 바람직합니다.

framework 추가

음성 인식 UI 사용을 위해서는 다음 프레임워크들을 추가로 설정해주어야 합니다.

iOS framework
CoreGraphics
QuartzCore
MediaPlayer (optional)

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

환경설정 - resource bundle 추가

SDK에서 제공하는 UI를 사용하기 위해서는 우선, 이미지들이 포함된 리소스 파일을 추가해야 합니다.

프로젝트 Build Phases의 Copy Bundle Resources에 +버튼을 누르고 DaumSpeechResources.bundle을 추가합니다.

Resize icon

custom strings 파일 적용

SDK에서 기본으로 설정된 strings 파일을 사용하려면 resource bundle을 추가한 것과 같은 방법으로 SpeechRecognizerDefault.strings를 추가합니다.

원한다면 strings 파일을 생성해서 음성 인식 화면에서 사용되는 가이드나 하단 팁을 원하는 문구로 적용할 수 있습니다.

strings 파일은 제공되는 압축파일에 포함된 SpeechRecognizerDefault.strings을 참고하여 변경된 문구를 적용합니다.

Key 이름은 변경하지 말고 해당하는 Key에 대한 모든 문구가 설정되어야 합니다.

Resize icon

NSDictionary 타입의 config를 생성할 때, SpeechRecognizerConfigKeyCustomStringsName 설정 키의 value로 strings 확장자를 제외한 파일의 이름을 설정해줍니다.

NSDictionary *config = @{SpeechRecognizerConfigKeyApiKey : @"발급받은 api Key",
                       // ...
               SpeechRecognizerConfigKeyCustomStringsName : @”SpeechRecognizerDefault”};
음성 인식 화면 생성 및 로드

NSDictionary의 key/value 형태로 생성한 config 정보와 화면을 로드할 view의 frame을 입력하여 음성 인식 화면을 생성합니다. 음성 인식 화면을 로드할 view는 전체화면 크기를 권장합니다. 부모뷰에 addSubview를 해준 다음 show 메서드를 호출해야 표시됩니다.

MTSpeechRecognizerView *speechRecognizerView = [[MTSpeechRecognizerView alloc]  initWithFrame:self.view.frame withConfig:config];

speechRecognizerView.delegate = self; // view의 delegate 설정

[self.view addSubview:speechRecognizerView];
[speechRecognizerView show];
음성 인식 뷰 델리게이트 설정

SDK는 뷰에서 결과와 에러에 대한 콜백을 델리게이트 메소드로 전달합니다. 델리게이트 메소드 구현을 위한 protocol은 MTSpeechRecognizerViewDelegate 입니다.

SpeechRecognizerViewController.h
// 아래와 같이 delegate를 받을 header 파일에 <MTSpeechRecognizerViewDelegate>를 선언합니다.
@interface SpeechRecognizerViewController : UIViewController <MTSpeechRecognizerViewDelegate>
// ...
SpeechRecognizerViewController.m
// 음성 인식이 성공적으로 끝났을 때 호출됩니다.
- (void) onResults:(NSArray *)results confidences:(NSArray *)confidences marked:(BOOL)marked {
    // results : 음성 인식 결과 리스트로 신뢰도 순으로 정렬.
    // confidences : results 각각의 결과에 대한 신뢰도 값 리스트.
    // marked : results의 신뢰도가 가장 높은 0번째 data가 신뢰할 만한 값인지의 여부.
}

// 음성 인식 도중 에러가 발생했을 때 호출됩니다.
- (void) onError: (MTSpeechRecognizerError) errorCode message:(NSString *) message {
    // ...
}

iOS 7 이상에서는 앱에서 마이크를 사용하고자 할 경우 마이크 접근허용을 묻는 메시지가 뜹니다. 만약 마이크 접근 설정이 거부되어 있다면 음성 인식을 시작할 때 다음과 같은 에러 alert으로 안내합니다.

Resize icon

후보단어 표시 생략하기

기본 UI를 통한 구현은 기본적으로 높은 신뢰도를 가지지 못한 결과 목록을 얻었을 때 사용자에게 말한 내용을 판단하도록 거치는 과정이 있습니다.

이 과정을 생략하거나 다른 방법으로 안내를 하려면 SpeechRecognizerConfigKeyShowSuggestView 설정 키로 서제스트 화면을 보일지 여부를 설정할 수 있습니다.

이 값을 NO 로 설정하여 후보단어 표시를 생략하였고, 신뢰도가 높지 못한 결과가 나왔을 때만 onResults:confidences:marked: 메서드에서 marked 파라미터의 값이 false가 됩니다.

default 설정은 YES입니다.

NSDictionary *config = @{// ...
             SpeechRecognizerConfigKeyShowSuggestView : @(NO)};

MTSpeechRecognizerView *speechRecognizerView = [[MTSpeechRecognizerView alloc]  initWithFrame:self.view.frame withConfig:config];

추가 설명

서비스 모드 설명

서비스 모드란 음성인식 도메인이고, 각 도메인에 더 특화되어 있다.

서비스 모드 도메인 종류
서비스 모드 도메인 설명
Dictation 받아쓰기 모드이며 일반적인 문장, 대화체 인식에 사용
Local 주소, 지역명 인식에 사용(예 : 카카오맵 앱 음성 인식)
Web or Search 웹 검색에 사용 (예 : 다음 앱 음성 인식)
Word 명령어 인식에 사용
Word 모드에서 User Dict (사용자 사전) 설명

user dict (사용자 사전) 에 단어들을 넣어놓고 인식하면 그 단어들중에서만 인식 된다. user dict 에는 한단어 이상 반드시 들어가야 한다. (user dict 가 비워져있으면 에러 반환된다.) 그외 서비스 모드에서는 사용자 사전 안에 있는 텍스트들을 좀 더 가중치를 줘서 인식한다. 최대 허용 사이즈 : 약 3000 단어 정도

api 사용 방식
비동기적으로 사용해야 함

message queue, event handler 등을 사용해 비동기적으로 처리하고 onPartialResult, onError 등의 이벤트 호출 함수 안에서 또 다시 음성 api 함수를 재호출하지 않는다.

예 : onInactive (ios 라이브러리 경우 onFinished) 호출 안에서 startListening 재 호출 하는 경우 지양

stop (stopRecording 또는 stopListening) 과 cancel 호출 의 차이

stop : stop 이 호출된 시점까지 인식된다. (서버의 인식 결과를 기다림) cancel : cancel 이 호촐되면 바로 취소된다. (서버의 인식 결과를 기다리지 않고 취소됨)

종료시 마지막으로 호출되는 이벤트 함수

에러 발생시 : onError 정상 종료시 : onInacitive

이중 실행 금지

ios, android 음성 라이브러리는 기본적으로 이중 또는 다중 실행을 지원하지 않는다. 중복 실행시 여러 버그의 원인이 된다.

음성 합성 (뉴톤톡)

문자 데이터를 사람이 이해할 수 있는 음성 언어로 변환하는 문자-음성 변환 시스템(Text-to-Speech system)입니다. 아래 순서대로 음성 합성 기능을 사용하기 위한 절차를 설명합니다.

클라이언트 인스턴스 생성하기

음성 합성을 위한 클라이언트 인스턴스를 생성하려면 먼저 설정 정보를 NSDictionary의 형태로 생성해야 합니다.

설정 가능한 옵션은 다음과 같습니다.

설정 이름 설명 타입 필수
TextToSpeechConfigKeySpeechSpeed 발음속도 0.5 ~ 4.0 (1이 보통속도, 크면 빠르게, 작으면 느리게) NSNumber (float) X
TextToSpeechConfigKeyVoiceType 음성합성 목소리 타입 설정 NSString X
TextToSpeechConfigServiceMode 음성합성 서비스 모드 설정 NSString X

목소리 타입(TextToSpeechConfigKeyVoiceType) 옵션

타입 이름 설명
TextToSpeechVoiceTypeWoman 여성 차분한 낭독체
TextToSpeechVoiceTypeMan 남성 차분한 낭독체
TextToSpeechVoiceTypeWomanDialog 여성 밝은 대화체
TextToSpeechVoiceTypeManDialog 남성 밝은 대화체

서비스 모드(TextToSpeechConfigServiceMode) 옵션

모드 이름 설명
NewtoneTalk_1 통계적 합성 방식. 기존에 뉴톤톡 API로 제공되던 통계적 합성 방식은 음성의 통계적 특성을 분석하여 모델을 만들고 이를 이용하여 합성하는 방식으로, 녹음된 데이터에 없는 합성음을 안정적으로 합성해 낼 수 있어서 다양한 분야에 적용되어도 일관된 품질의 합성음을 생성해 낼 수 있고 음색 변환 등 다양한 응용에 적용할 수 있습니다. 일반적으로 편집 합성 방식에 비해 음질이 떨어집니다.
NewtoneTalk_2 편집 합성 방식. 새롭게 추가된 편집 합성 방식은 통계적 특성을 이용하는 것이 아니라 녹음된 음성 데이터 자체를 이용하여 필요한 음소들을 발췌하여 합성하는 방식입니다. 장점으로는 데이터 자체를 이용하므로 녹음에 사용된 문장과 동일한 영역의 문장들에 대해서는 통계적 합성 방식보다 자연스러운 음성을 만들어 낼 수 있습니다. 단점으로는 녹음 데이터에 없는 영역의 문장에서는 음질이 저하되는 단점이 있습니다. (예를 들어 대화체 음색을 이용하여 낭독체 문장을 합성하는 경우). 편집 합성 방식에서는 통계적 합성 방식과 달리 합성 속도 변경 기능은 제공하지 않습니다.

생성된 설정 정보를 파라미터로 하여 MTTextToSpeechClient 인스턴스를 생성합니다. MTTextToSpeechDelegate를 구현하고 생성된 클라이언트 인스턴스에 델리게이트를 지정합니다.

다음은 2배속의 차분한 여성 낭독체 클라이언트 인스턴스를 생성하는 예제입니다.

@interface {YourClass} : {YourSuperClass} <MTTextToSpeechDelegate>

...

// 설정 정보 생성
NSDictionary *config =
    @{TextToSpeechConfigKeySpeechSpeed: @(2.0)
      TextToSpeechConfigKeyVoiceType: TextToSpeechVoiceTypeWoman};

// 클라이언트 생성
MTTextToSpeechClient *textToSpeechClient =
    [[MTTextToSpeechClient alloc] initWithConfig:config];

// 델리게이트 설정
textToSpeechClient.delegate = self;

...

@end

음성 합성 실행하기

음성합성을 위한 텍스트를 [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. 허용하지 않는 문장
  • 피싱에 사용될 가능성이 높은 문장
  • 음란성 문장

Last Modified : 2017-08-01