Make the first API call
SpeechToText API 호출 순서와 API로 구현할 수 있는 시나리오 예제를 설명합니다. SpeechToText SDK는 SERVER, ON DEVICE, HYBRID Mode를 제공하고 앱에서 설정하지 않으면 HYBRID MODE가 기본 설정됩니다.
API 호출 순서
Initialize SDK
SpeechToText SDK를 시작할 때 앱에서 원하는 모드 설정과 함께 initialize API를 호출하여 SpeechToText SDK를 초기화합니다.
- Kotlin
- Java
enum class Mode {
HYBRID, // 네트워크가 연결되지 않을 경우 SDK 에서 상황에 맞게 OnDevice 음성인식을 연결합니다.
SERVER, // 네트워크가 연결되어 있을 경우에만 음성인식을 연결합니다.
ON_DEVICE // OnDevice 음성인식을 연결합니다.
}
val speechToText = SpeechToText(context, Mode.HYBRID) // Mode 설정
speechToText.initialize();
public enum Mode {
HYBRID, // 네트워크가 연결되지 않을 경우 SDK 에서 상황에 맞게 OnDevice 음성인식을 연결합니다.
SERVER, // 네트워크가 연결되어 있을 경우에만 음성인식을 연결합니다.
ON_DEVICE // OnDevice 음성인식을 연결합니다.
}
SpeechToText speechToText = new SpeechToText(context, Mode.HYBRID); // Mode 설정
speechToText.initialize();
Add Listener
SpeechToText 앱을 등록하기 전에 addListener API를 호출하여 SpeechToText 이벤트 콜백을 등록합니다.
- Kotlin
- Java
speechToText.addListener(object: ResultListener {
override fun onUpdated(stt: String, completed: Boolean) {
// stt : 인식된 텍스트 결과
// completed : True 일 경우 사용자의 음성이 인식 완료된 상태입니다.
}
override fun onUpdatedEpdData(on: Long, off: Long) {
// on : 사용자의 음성 시작 지점의 Buffer Size 를 Byte 값으로 전달 합니다.
// off : 사용자의 음성 끝 지점의 Buffer Size 를 Byte 값으로 전달 합니다.
}
override fun onStartedRecognition() {
// 사용자의 음성이 시작되었음을 알려 줍니다.
}
override fun onEndedRecognition() {
// 사용자의 음성인식 과정이 끝났음을 알려 줍니다.
}
override fun onError() {
// 사용자의 음성인식 과정 중 에러가 발생한 경우를 알려 줍니다.
}
override fun onReady() {
// 사용자의 마이크를 통해서 말을 할 수 있는 상태를 알려 줍니다.
}
})
speechToText.addListener(new ResultListener() {
@Override
void onUpdated(String stt, boolean completed) {
// stt : 인식된 텍스트 결과
// completed : True 일 경우 사용자의 음성이 인식 완료된 상태입니다.
}
@Override
void onUpdatedEpdData(Long on, Long off) {
// on : 사용자의 음성 시작 지점의 Buffer Size 를 Byte 값으로 전달 합니다.
// off : 사용자의 음성 시작 지점의 Buffer Size 를 Byte 값으로 전달 합니다.
}
@Override
void onStartedRecognition() {
// 사용자의 음성이 시작되었음을 알려 줍니다.
}
@Override
void onEndedRecognition() {
// 사용자의 음성인식 과정이 끝났음을 알려 줍니다.
}
@Override
void onError() {
// 사용자의 음성인식 과정 중 에러가 발생한 경우를 알려 줍니다.
}
@Override
void onReady() {
// 사용자의 마이크를 통해서 말을 할 수 있는 상태를 알려 줍니다.
}
});
Register App
registerApp API를 호출하여 앱을 Speech 서버에 등록합니다. MODE 가 ON_DEVICE 일 경우에는 이 API를 사용할 필요는 없습니다.
- Kotlin
- Java
val clientID = "your_client_id"
val clientSecret = "your_client_secret"
speechToText.registerApp(clientID, clientSecret, object : OnServerConnectionListener {
override fun onConnected() {
// Speech 서버에 등록이 완료되면 앱은 이벤트를 받을 수 있습니다.
}
override fun onFailed(msg: String) {
// Speech 서버 등록 실패가 일어나면 에러 메시지와 함께 이벤트를 앱으로 전달 합니다.
}
})
String clientID = "your_client_id";
String clientSecret = "your_client_secret";
speechToText.registerApp(clientID, clientSecret, new OnServerConnectionListener() {
@Override
void onConnected() {
// Speech 서버에 등록이 완료되면 앱은 이벤트를 받을 수 있습니다.
}
@Override
void onFailed(String msg) {
// Speech 서버 등록 실패가 일어나면 에러 메시지와 함께 이벤트를 앱으로 전달 합니다.
}
});
Remove Listener
앱을 종료하기에 앞서 등록했던 이벤트 콜백을 해제합니다. 이벤트 콜백을 해제하려면 removeListener API를 호출합니다.
- Kotlin
- Java
speechToText.removeListener(listener: ResultListener)
speechToText.removeListener(ResultListener listener);
Release SDK
release API를 호출하여 SpeechToText SDK 리소스를 해제합니다.
- Kotlin
- Java
speechToText.release()
speechToText.release();
API 사용 시나리오 예시
1. SpeechToText 음성입력 시작/중지
다음은 SpeechToText 음성 입력을 시작하고 중지하는 예제 코드입니다.
- Kotlin
- Java
speechToText.request()
speechToText.addListener(object: ResultListener {
override fun onUpdated(stt: String, completed: Boolean) {
// 예) 안
// 예) 안녕
// 예) 안녕하
// 예) 안녕하세
// 예) 안녕하세요. complete(true)
}
override fun onUpdatedEpdData(on: Long, off: Long) {
// 예) on(0) off(3200)
}
override fun onStartedRecognition() {
}
override fun onEndedRecognition() {
}
override fun onError() {
}
})
speechToText.stop()
speechToText.request();
speechToText.addListener(new ResultListener() {
@Override
void onUpdated(String stt, boolean completed) {
// 예) 안
// 예) 안녕
// 예) 안녕하
// 예) 안녕하세
// 예) 안녕하세요. complete(true)
}
@Override
void onUpdatedEpdData(Long on, Long off) {
// 예) on(0) off(3200)
}
@Override
void onStartedRecognition() {
}
@Override
void onEndedRecognition() {
}
@Override
void onError() {
}
});
speechToText.stop();
2. Audio 데이터 전송
다음은 Audio 데이터를 전송하는 예제 코드입니다. 한 번에 데이터를 전송할 수 있고 최소 100ms 마다 데이터를 전송할 수도 있습니다. 주기적으로 데이터를 전송할 경우 전송이 끝나는 시점에 completeAudioSend API 를 호출해야 합니다.
- Kotlin
- Java
- 하나의 데이터를 전송하는 경우
context.assets.open("test_audio.pcm").readBytes().also {
speechToText.sendAudio(it)
}
- 여러 번 데이터를 나눠서 전송하는 경우
var offset = 0
val testPCM = assets.open("call_test_audio.pcm").readAllBytes()
while (offset < testPCM.size) {
val end = (offset + 3200).coerceAtMost(testPCM.size)
val chunk = testPCM.copyOfRange(offset, end)
offset += BYTES_IN_100_MS
speechToText.sendAudio(chunk)
Thread.sleep(100L)
}
- 데이터를 다 전송하면 completeAudioSend API 를 호출 합니다.
speechToText.completeAudioSend()
- 하나의 데이터를 전송하는 경우
ByteArray data = context.assets.open("test_audio.pcm").readBytes()
speechToText.sendAudio(data);
- 여러 번 데이터를 나눠서 전송하는 경우
Int offset = 0;
ByteArray testPCM = context.assets.open("call_test_audio.pcm").readAllBytes();
while (offset < testPCM.size) {
Int end = (offset + 3200).coerceAtMost(testPCM.size);
ByteArray chunk = testPCM.copyOfRange(offset, end);
offset += 3200;
speechToText.sendAudio(chunk);
Thread.sleep(100L)
}
- 데이터를 다 전송하면 completeAudioSend API 를 호출 합니다.
speechToText.completeAudioSend();