티스토리 뷰



이 자료들은 팁스소프트에서 제공하는 [ 알짜배기 ] 프로그램을 이용하면 더 편리하게 볼수 있습니다.
* 알짜배기 프로그램 받기 - http://www.tipssoft.com/bulletin/tb.php/QnA/8406
* 관리자의 Tipssoft 이야기를 들어보세요 ( 트위터 ID : tipssoft )
* 안드로이드 강좌 목록 - http://www.tipssoft.com/bulletin/tb.php/old_bbs/501
이번 강좌에서는 TTS(TextToSpeech) 를 통해 텍스트가 음성으로 변환되어 스피커로 출력될 때
음성 출력이 완료되는 시점을 알려주는 방법에 대해 설명하도록 하겠습니다.
TTS(TextToSpeech)에 대해 잘 모르시는 분들은 아래에 링크된 자료를 먼저 참고하여 주시기
바랍니다.
1. Broadcast Receiver 이용하기
음성 인식과 TTS 를 함께 사용하는 경우, TTS 를 통해 스피커에서 음성이 흘러나오는 도중에 사용자가
음성 인식을 실행하게 되면 스피커에서 나오는 음성이 마이크에 인식되는 문제가 발생할 수 있습니다.
이러한 문제는 TTS 엔진으로부터 출력되는 음성이 끝나는 시점을 알 수 있다면 출력이 완료된 후에
사용자가 음성 인식을 실행할 수 있도록 처리하여 해결할 수 있습니다.
이처럼 TTS 엔진의 음성 출력이 모두 완료된 후에 특정 작업을 하길 원하는 경우, 브로드캐스트 리시버를
이용하면 음성 출력이 종료되는 시점을 알 수 있습니다.
브로드캐스트 리시버(Broadcast Receiver) 는 시스템으로부터 브로드캐스트 알림을 수신하고
응답하는 컨텍스트(Context) 로서 배터리 부족과 같은 시스템 상태나 파일 다운로드의 완료 상태등 을
알려주는 역할을 합니다.
이번 강좌에서는 브로드캐스트 리시버를 이용하여 TTS 음성 출력의 종료 시점을 알려주는 방법을
아래 예제를 통해 설명하도록 하겠습니다.
2. Broadcast Receiver 를 이용한 예제
TTS 의 음성 출력이 완료되는 시점을 알려주는 브로드캐스트 리시버를 등록하여 알림을 수신받고
토스트 메시지를 이용해 음성 출력이 완료되었음을 사용자에게 알려주는 예제를 보도록 하겠습니다.
브로드캐스트 리시버로부터 알림을 수신하기 위해서는 먼저 알림을 받길 원하는 동작(Action) 을
추가해주어야 합니다.
아래 코드에서와 같이 IntentFilter 객체를 생성하여 Broadcast 알림을 받기위한 동작을 추가하는데,
이 예제에서는 TextToSpeech 엔진을 통해 변환된 음성을 저장하는 Speech Queue 의 모든 음성이
스피커로 내보내졌을 때 알림을 받을 수 있도록 하는 동작을 추가해주도록 하겠습니다.
// IntentFilter 객체를 생성한다.
IntentFilter filter = new IntentFilter();
// TTS의 음성출력의 완료되는 동작에 대한 알림를 수신하기위해
// IntentFilter 에 해당 동작을 추가한다.
filter.addAction(TextToSpeech.ACTION_TTS_QUEUE_PROCESSING_COMPLETED);
아래와 같이 음성 출력이 완료되었을 때를 알려주는 브로드캐스트 리시버 객체를 생성합니다. 브로드
캐스트 리시버가 알림을 수신하게되면 onReceive() 메소드가 호출되고, TTS 엔진의 음성 출력이
완료되어 알림이 수신된 경우 토스트 메시지를 통해 사용자에게 알려줍니다.
// 브로드캐스트 리시버 객체를 생성한다.
BroadcastReceiver m_br = new BroadcastReceiver() {
// 브로드캐스트 알림이 수신되면 호출되는 onReceive 메소드를 정의한다.
public void onReceive(Context context, Intent intent)
{
// Intent 로부터 어떤 동작으로 인해 Broadcast Receiver 에게 알림이
// 수신되었는지에 대한 정보를 가져온다.
String act = intent.getAction();

// TTS의 음성출력이 완료되어 알림이 수신된 경우
if(act.equals(TextToSpeech.ACTION_TTS_QUEUE_PROCESSING_COMPLETED)) {

// 토스트 메시지를 통해 TTS 의 음성출력이 완료되었음을 사용자에게 알린다.
Toast.makeText( BroadcastReceiverExamActivity.this , "TTS 음성 출력 완료", Toast.LENGTH_SHORT ).show();
}
}
};
그리고 현재 액티비티가 실행될 때 음성 출력의 완료 동작에 관한 알림을 수신받아 처리하는 브로드
캐스트 리시버를 등록합니다.
// IntentFilter 에 추가된 동작이 발생할 경우 이 알림을 수신하는
// Broadcast Receiver 를 등록한다.
registerReceiver(m_br, filter);
등록했던 브로드캐스트 리시버를 아래와 같이 해제합니다.
// 등록된 브로드캐스트 리시버를 해제한다.
unregisterReceiver(m_br);

3. 실행 화면


댓글