발화 관련 추가 기능
제스처
앞서 간략하게 언급한 바와 같이 AIClipSet을 이용하여 발화를 할 수 있습니다. AIClipSet이란 하나의 발화 단위를 의미합니다. 이때 발화 종류는 말하기만 하는 일반 발화와 제스처를 포함한 발화인 제스처 발화, 그리고 어떤 동작만 하는 제스처가 있습니다. AI 모델에 따라 사용할 수 있는 제스처가 정해져 있으며 AIPlayer의 getGestures 함수를 이용하여 사용 가능한 제스처 목록을 가져올 수 있습니다.
아래와 같은 클립셋의 타입이 존재합니다.
- AIClipSet.ClipType
- CLIP_SPEECH: 제스처가 없는 일반 발화만 가능한 Clip
- CLIP_GESTURE: 제스처만 가능한 Clip
- CLIP_SPEECH_GESTURE: 제스처가 포함된 발화가 가능한 Clip
아래 샘플 스크린샷에서는 Jonathan이라는 AI 모델이 "hi"(손을 흔든다)라는 제스처를 하면서 발화를 하고 있습니다.
AIClipSetFactory.CreateClip 함수를 이용하여 제스처를 하는 AIClipSet을 아래와 같이 생성합니다. 제스처를 설정하였지만, 발화 문장을 셋팅하지 않고 send를 호출하면 발화는 하지 않고 제스처만 동작됩니다.
if (selectedSpeech != null) {
if (selectedAIGesture != null) {
aiPlayer.send(AIClipSetFactory.CreateClip(
selectedAIGesture.getName(), selectedSpeech, null));
} else {
aiPlayer.send(AIClipSetFactory.CreateClip(
null, selectedSpeech, null));
}
}
제스처 동작의 콜백 모니터링
발화동작과 동일하게 IAIPlayerCallback.onAIPlayerEvent(AIEvent)가 호출됩니다. AIEvent의 type값은 다음과 같이 호출되어 상태를 알 수 있습니다. 단, 여기서 aiEvent.clipset.getClipType(), getGesture(), getSpeechText()를 알 수 있으므로 제스처 동작인지, 그냥 발화 동작인지 알 수 있습니다.
- AIEvent.AICLIPSET_PLAY_PREPARE_STARTED
- AIEvent.AICLIPSET_PLAY_PREPARE_COMPLETED
- AIEvent.AICLIPSET_PLAY_STARTED
- AIEvent.AICLIPSET_PLAY_COMPLETED
- AIEvent.AICLIPSET_PLAY_BUFFERING
- AIEvent.AICLIPSET_RESTART_FROM_BUFFERING