TTS

음성 합성 결과를 전달받기 위한 규격

Version

최신 버전은 1.3 입니다.

Version Date Description
1.0 2019.11.24 규격 추가
1.1 2020.03.23 Stop directive 에서 token 필드 삭제
1.2 2020.06.05 Context 에 token 필드 추가
1.3 2020.11.09 SpeechStarted, SpeechStopped, SpeechFinished event 전송 규칙 수정

SDK Interface

TTSAgent 사용

TTS interface 규격에 따른 디바이스의 동작 제어는 TTSAgent 가 처리합니다.

  • Android
  • iOS
  • Linux

NuguAndroidClient instance 를 통해 TTSAgent instance 에 접근할 수 있습니다.

복사성공!
1
val ttsAgent = nuguAndroidClient.ttsAgent

NuguClient instance 를 통해 TTSAgent instance 에 접근할 수 있습니다.

복사성공!
1
let ttsAgent = nuguClient.ttsAgent

CapabilityFactory::makeCapability 함수로 TTSAgent 를 생성하고 NuguClient 에 추가해 주어야합니다.

복사성공!
1
2
3
4
5
6
auto tts_handler(std::shared_ptr<ITTSHandler>(
        CapabilityFactory::makeCapability<TTSAgent, ITTSHandler>()));

nugu_client->getCapabilityBuilder()
    ->add(tts_handler.get())
    ->construct();

재생 상태 정보

Speak directive 로 전달된 음원에 대한 재생 상태를 모니터링 할 수 있습니다.

  • Android
  • iOS
  • Linux

TTSAgentInterface.Listener 를 추가합니다.

복사성공!
1
2
3
4
5
6
7
8
val listener = object: TTSAgentInterface.Listener {
    override fun onStateChanged(state: State, dialogRequestId: String) {
        ...
    }

    ...
}
ttsAgent.addListener(listener)

TTSAgentDelegate 를 추가합니다.

복사성공!
1
2
3
4
5
6
7
8
class MyTTSAgentDelegate: TTSAgentDelegate {
    func ttsAgentDidChange(state: TTSState, dialogRequestId: String) {
        ...
    }

    ...
}
ttsAgent.add(delegate: MyTTSAgentDelegate())

ITTSListener 를 추가합니다.

복사성공!
1
2
3
4
5
6
7
8
9
10
11
12
13
class MyTTSListener : public ITTSListener {
public:
    ...

    void onTTSState(TTSState state, const std::string &dialog_id) override
    {
        ...
    }

    ...
};
auto tts_listener(std::make_shared<MyTTSListener>());
CapabilityFactory::makeCapability<TTSAgent, ITTSHandler>(tts_listener.get());

Context

복사성공!
1
2
3
4
5
6
7
8
{
  "TTS": {
    "version": "1.2",
    "ttsActivity": "{{STRING}}",
    "engine": "{{STRING}}",
    "token": "{{STRING}}"
  }
}
parameter type mandatory description
ttsActivity string Y TTS 재생 상태
IDLE
PLAYING
PAUSED
FINISHED
STOPPED
IDLE인 경우는 최초 전원을 켰을 때만 가능하고 이후에는 나올 수 없음
engine string N Device 에서 사용하는 음성합성 engine 을 명시 NUGU 음성합성 engine 을 사용하는 경우 “skt” (값을 채우지 않으면 default “skt”)
token string N 현재 재생중인 TTS 의 token

Directive

Speak

새로운 TTS 재생 요청입니다.

복사성공!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{
  "header": {
    "namespace": "TTS",
    "name": "Speak",
    "messageId": "{{STRING}}",
    "dialogRequestId": "{{STRING}}",
    "version": "1.1"
  },
  "payload": {
    "playServiceId": "{{STRING}}",
    "sourceType": "{{STRING}}",
    "format": "{{STRING}}",
    "text": "{{STRING}}",
    "token": "{{STRING}}"
  }
}
parameter type mandatory description
sourceType string N URL or ATTACHMENT(default 는 ATTACHMENT)
format string Y TEXT or SKML
text string Y tts text
token string Y 현재 TTS를 식별하기 위한 unique string

Stop

현재 TTS 중지 요청입니다.

복사성공!
1
2
3
4
5
6
7
8
9
10
11
12
{
  "header": {
    "namespace": "TTS",
    "name": "Stop",
    "messageId": "{{STRING}}",
    "dialogRequestId": "{{STRING}}",
    "version": "1.1"
  },
  "payload": {
    "playServiceId": "{{STRING}}"
  }
}

Event

SpeechStarted

복사성공!
1
2
3
4
5
6
7
8
9
10
11
12
13
{
  "header": {
    "namespace": "TTS",
    "name": "SpeechStarted",
    "messageId": "{{STRING}}",
    "dialogRequestId": "{{STRING}}",
    "version": "1.1"
  },
  "payload": {
    "playServiceId": "{{STRING}}",
    "token": "{{STRING}}"
  }
}
parameter type mandatory description
token string Y TTS.Speak 디렉티브에서 설정한 token 값

SpeechFinished

복사성공!
1
2
3
4
5
6
7
8
9
10
11
12
13
{
  "header": {
    "namespace": "TTS",
    "name": "SpeechFinished",
    "messageId": "{{STRING}}",
    "dialogRequestId": "{{STRING}}",
    "version": "1.1"
  },
  "payload": {
    "playServiceId": "{{STRING}}",
    "token": "{{STRING}}"
  }
}
parameter type mandatory description
token string Y TTS.Speak 디렉티브에서 설정한 token 값

SpeechStopped

복사성공!
1
2
3
4
5
6
7
8
9
10
11
12
13
{
  "header": {
    "namespace": "TTS",
    "name": "SpeechStopped",
    "messageId": "{{STRING}}",
    "dialogRequestId": "{{STRING}}",
    "version": "1.1"
  },
  "payload": {
    "playServiceId": "{{STRING}}",
    "token": "{{STRING}}"
  }
}
parameter type mandatory description
token string Y TTS.Speak 디렉티브에서 설정한 token 값