솜은 코튼
[Android] STT, Speech-To-Text 본문
음성인식 후 텍스트 출력 (STT)
:음성을 인식하여 텍스트 값(String)으로 출력한다.
해당 모드로 설정하면 외부 라이브러리 사용을 제한할 수 있다.
(단, 기존 External Libraries에 받아놓은 라이브러리들은 영향이 가지 않으니 걱정하지 않아도 된다.)
1. AndroidManifest.xml
: 오디오 녹음 퍼미션 설정
(Android 6.0 이상부터는 해당 퍼미션의 권한 요청을 해주셔야 합니다.)
1
2
|
<!--STT-->
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
|
cs |
2. Speech-To-Text 실행
1
2
3
4
5
6
7
8
9
10
11
|
private SpeechRecognizer mRecognizer;
public void startSTT(){
Intent i = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
i.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, context.getPackageName());
i.putExtra(RecognizerIntent.EXTRA_LANGUAGE, "ko-KR");
mRecognizer = SpeechRecognizer.createSpeechRecognizer(context);
mRecognizer.setRecognitionListener(listener);
mRecognizer.startListening(i); //음성 인식 시작
}
|
cs |
3. RecognitionListener
: 음성 인식 동작 관련 리스너
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
private RecognitionListener listener = new RecognitionListener() {
@Override
public void onReadyForSpeech(Bundle params) {
}
@Override
public void onBeginningOfSpeech() {
}
@Override
public void onRmsChanged(float rmsdB) {
}
@Override
public void onBufferReceived(byte[] buffer) {
}
@Override
public void onEndOfSpeech() {
}
@Override
public void onError(int error) {
String message;
switch(error) {
case SpeechRecognizer.ERROR_AUDIO:
message = "오디오 녹음 오류입니다.";
break;
case SpeechRecognizer.ERROR_CLIENT:
message = "기타 클라이언트 측 오류.";
break;
case SpeechRecognizer.ERROR_INSUFFICIENT_PERMISSIONS:
message = "권한이 부족합니다.";
break;
case SpeechRecognizer.ERROR_NETWORK:
message = "기타 네트워크 관련 오류.";
break;
case SpeechRecognizer.ERROR_NETWORK_TIMEOUT:
message = "네트워크 작업 시간이 초과되었습니다.";
break;
case SpeechRecognizer.ERROR_NO_MATCH:
message = "일치하는 인식 결과가 없습니다.";
break;
case SpeechRecognizer.ERROR_RECOGNIZER_BUSY:
message = "RecognitionService가 사용 중입니다.";
break;
case SpeechRecognizer.ERROR_SERVER:
message = "서버가 오류 상태를 보냅니다.";
break;
case SpeechRecognizer.ERROR_SPEECH_TIMEOUT:
message = "음성 입력 없음";
break;
default:
message = "알 수 없는 오류";
break;
}
}
@Override
public void onPartialResults(Bundle partialResults) {
}
@Override
public void onEvent(int eventType, Bundle params) {
}
@Override
public void onResults(Bundle results) {
String key = SpeechRecognizer.RESULTS_RECOGNITION;
ArrayList<String> mResult = results.getStringArrayList(key);
String[] rs = new String[mResult.size()];
mResult.toArray(rs);
Log.i(Const.GLOBAL_LOG_TAG, "onResults : " + rs[0]);
// mRecognizer.startListening(i); //음성인식 계속
}
};
|
cs |
4. Speech-To-Text 중단
: 계속 실행되는 경우를 방지하기 위한 선택적 적용
1
2
3
4
5
6
7
|
public void stopSTT(){
if(mRecognizer!=null){
mRecognizer.destroy();
mRecognizer.cancel();
mRecognizer = null;
}
}
|
cs |
'Android > Java' 카테고리의 다른 글
[Android] 생체 인증, biometric authentication (0) | 2021.01.21 |
---|---|
[Android] Android Studio Java Version 설정/Lambda expressions are not supported at language level '7' (0) | 2021.01.14 |
[Android] Microsoft MSAL 적용 방법 (0) | 2021.01.07 |
[Android] Android Studio Offline Mode 설정 (0) | 2021.01.07 |
[Android] Google Login API 적용 방법 (0) | 2021.01.05 |