음성 인식 및 합성 과정에 대해 안드로이드에서 기본으로 제공하는 것 대한 정리입니다.
네이버 음성합성기 등 잘 정리되있는 인식, 합성기 예제들도 있지만 naver developers api 및 다른 api 들은 정리가 잘 되있기에
android 의 구글 음성 인식, 합성에 대해 알아보겠습니다.
ANDROID 음성 인식
string.xml에 <string name="speech_prompt">Say something…</string> 선언
promptSpeechInput() 사용하시면 음성인식기가 출력됩니다.
private void promptSpeechInput() { Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.getDefault()); intent.putExtra(RecognizerIntent.EXTRA_PROMPT, getString(R.string.speech_prompt));
startActivityForResult(intent, REQ_CODE_SPEECH_INPUT); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) { case REQ_CODE_SPEECH_INPUT: if (resultCode == RESULT_OK && null != data) { ArrayList<String> result = data.getStringArrayListExtra( RecognizerIntent.EXTRA_RESULTS); //txtSpeechInput.setText(result.get(0));
Log.d("speech", "speech" + result.get(0));
String speechtext = result.get(0); //인식한 것에 대해 저장한 값
} } }
|
ANDROID 음성 합성 기본 예제
//추후 변환된 음성 MP3파일로 저장 구현
public class MainActivity extends AppCompatActivity implements TextToSpeech.OnInitListener { private TextToSpeech myTTS; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
myTTS = new TextToSpeech(this, this);
}
public void onInit(int status) { String myText1 = "hello android."; String myText2 = "말하는 스피치 입니다."; Locale enUs = new Locale("korea"); //Locale("en_US"); if (myTTS.isLanguageAvailable(enUs) == TextToSpeech.LANG_AVAILABLE) {myTTS.setLanguage(enUs); System.out.println("us나옴");} else{ myTTS.setLanguage(Locale.KOREA); }
//myTTS.setLanguage(Locale.US); // 언어 설정 , 단말기에 언어 없는 버전에선 안되는듯 myTTS.setPitch((float) 0.1); // 높낮이 설정 1이 보통, 6.0미만 버전에선 높낮이도 설정이 안됨 myTTS.setSpeechRate(1); // 빠르기 설정 1이 보통
//myTTS.setVoice();
myTTS.speak(myText1, TextToSpeech.QUEUE_FLUSH, null); // tts 변환되어 나오는 음성 myTTS.speak(myText2, TextToSpeech.QUEUE_ADD, null); //QUEUE_FLUSH 다음에 나오는 QUEUE_ADD }
@Override protected void onDestroy() { super.onDestroy(); myTTS.shutdown(); //speech 리소스 해제 }
} |