티스토리 뷰
이 자료들은 팁스소프트에서 제공하는 [ 알짜배기 ] 프로그램을 이용하면 더 편리하게 볼수 있습니다.
* 알짜배기 프로그램 받기 - http://www.tipssoft.com/bulletin/tb.php/QnA/8406
* 관리자의 Tipssoft 이야기를 들어보세요 ( 트위터 ID : tipssoft )
* 안드로이드 강좌 목록 - http://www.tipssoft.com/bulletin/tb.php/old_bbs/501
* 이 예제는 안드로이드 팜으로 만들어졌습니다.
( AndroidFarm - http://www.tipssoft.com/bulletin/tb.php/update/1388 )
이 예제는 사용자가 시간을 알고 싶을 때 '몇시야?' 라고 말하면 어플리케이션이 현재 시각을 알려줍니다.
아침에 일어나서나 출근 및 등교 준비를 하는 바쁜 시간에 핸드폰의 시계를 확인하기 힘든 경우 '몇시야?'
라고 말하면 사용자의 음성을 인식하여 현재 시각을 음성으로 알려주는 유용한 어플리케이션입니다.
이 자료는 음성 인식과 TTS 를 사용하며 아래 자료들을 기초로 작성되었으니 선행하여 살펴 보시기
바랍니다.
음성 인식(Voice Recognition) : http://www.tipssoft.com/bulletin/tb.php/FAQ/961
TTS(TextToSpeech) : http://www.tipssoft.com/bulletin/tb.php/FAQ/953
TTS 음성 출력의 종료 시점 알기 : http://www.tipssoft.com/bulletin/tb.php/FAQ/1164
어플리케이션이 실행되어 있을 경우, 계속해서 사용자의 음성을 입력받아 인식하기 때문에 배터리
소모가 크므로 핸드폰 충전 시에 사용하는 것이 좋습니다. 또한 음성 인식이 올바르게 되지 않거나
구글 인식기 서버에 문제가 생기거나 네트워크가 원활하지 않는 등의 문제로 인해 사용된 음성 인식
액티비티가 대기 상태로 빠질 경우 사용자가 직접 취소 버튼을 눌러서 정상적인 처리를 할 수 있도록
해주어야 합니다.
1. 실행 화면
알람 시작을 위해 아래 화면을 터치하면 오른쪽의 그림과 같이 사용자의 음성을 입력받는 음성 인식
액티비티가 실행됩니다. 이 액티비티가 실행될 때 사용자가 '몇시야?' 라고 말하면 그 음성이 인식되어
'오전 11시 50분입니다' 와 같은 방식으로 현재 시각을 음성으로 알려줍니다. 시간 알림은 오른쪽 그림의
취소 버튼을 클릭하여 종료시킬 수 있습니다.
2. 주요 소스 코드
// OnClickListener 인터페이스의 onClick 메소드를 정의한다.
public void onClick(View v)
{
m_touch_view.setText("");
// 현재 알람이 정지 상태인 경우
if( m_start_alarm == 0 ) {
m_start_alarm = 1;
// 음성인식을 시작한다.
startVoiceRecognitionActivity();
}
}
public void onClick(View v)
{
m_touch_view.setText("");
// 현재 알람이 정지 상태인 경우
if( m_start_alarm == 0 ) {
m_start_alarm = 1;
// 음성인식을 시작한다.
startVoiceRecognitionActivity();
}
}
// 음성 인식 액티비티를 실행하는 메소드
public void startVoiceRecognitionActivity() {
// 음성 인식 행위에 대한 액티비티를 실행시킬 수 있는 인텐트 객체를 생성한다.
Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
public void startVoiceRecognitionActivity() {
// 음성 인식 행위에 대한 액티비티를 실행시킬 수 있는 인텐트 객체를 생성한다.
Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
// 음성 인식기에 대한 언어 모델 정보를 실행될 액티비티에 전달한다.
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
// 음성 인식기에 대한 언어 정보를 실행될 액티비티에 전달한다.
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE , "ko-KR" );
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
// 음성 인식기에 대한 언어 정보를 실행될 액티비티에 전달한다.
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE , "ko-KR" );
// 인텐트 정보에 맞는 액티비티를 실행한다.
startActivityForResult(intent, 0);
}
startActivityForResult(intent, 0);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// 액티비티를 시작할 때 0 으로 설정해둔 결과값인 경우
if ( requestCode == 0 ) {
// 액티비티가 성공적으로 종료된 경우
if( resultCode == RESULT_OK ) {
String pre_time = null, hour_check = null ;
// 사용자의 음성을 인식하여 해석한 결과를 String 객체로 반환한다.
ArrayList<String> result_list = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
for(int i = 0 ; i < match_word.length ; i++) {
for(int j = 0 ; j < result_list.size() ; j++) {
if( match_word[i].equals(result_list.get(j))) {
// 시스템 시간(Hour)를 입력받아 String 형태로 저장한다.
SimpleDateFormat dateFormat = new SimpleDateFormat("HH");
Date date = new Date(System.currentTimeMillis());
hour_check = dateFormat.format(date);
// 입력받은 현재 시간을 정수형으로 변환한다.
int hour = Integer.parseInt(hour_check);
// 입력받은 시간이 오전(0~11)인 경우
if(hour < 12) {
hour_check = "";
hour_check += "오전 ";
// 입력받은 시간이 오후(12~23)인 경우
} else {
hour_check = "";
hour_check += "오후 ";
}
// 시스템 시간(Hour시 Minute분)을 입력받아 String 형태로 저장한다.
dateFormat = new SimpleDateFormat("hh시 mm분");
pre_time = dateFormat.format(date);
hour_check += pre_time + "입니다.";
// 현재 시간을 TTS 를 통해 음성 출력한다.
m_tts.speak( hour_check , TextToSpeech.QUEUE_FLUSH , null );
// 루프를 빠져 나오기위해 값을 변경한다.
i = match_word.length;
break;
}
}
}
// 음성 입력이 올바르지 않은 경우 다시 음성 입력을 시작한다.
if( hour_check == null ) {
startVoiceRecognitionActivity();
}
// 액티비티를 시작할 때 0 으로 설정해둔 결과값인 경우
if ( requestCode == 0 ) {
// 액티비티가 성공적으로 종료된 경우
if( resultCode == RESULT_OK ) {
String pre_time = null, hour_check = null ;
// 사용자의 음성을 인식하여 해석한 결과를 String 객체로 반환한다.
ArrayList<String> result_list = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
for(int i = 0 ; i < match_word.length ; i++) {
for(int j = 0 ; j < result_list.size() ; j++) {
if( match_word[i].equals(result_list.get(j))) {
// 시스템 시간(Hour)를 입력받아 String 형태로 저장한다.
SimpleDateFormat dateFormat = new SimpleDateFormat("HH");
Date date = new Date(System.currentTimeMillis());
hour_check = dateFormat.format(date);
// 입력받은 현재 시간을 정수형으로 변환한다.
int hour = Integer.parseInt(hour_check);
// 입력받은 시간이 오전(0~11)인 경우
if(hour < 12) {
hour_check = "";
hour_check += "오전 ";
// 입력받은 시간이 오후(12~23)인 경우
} else {
hour_check = "";
hour_check += "오후 ";
}
// 시스템 시간(Hour시 Minute분)을 입력받아 String 형태로 저장한다.
dateFormat = new SimpleDateFormat("hh시 mm분");
pre_time = dateFormat.format(date);
hour_check += pre_time + "입니다.";
// 현재 시간을 TTS 를 통해 음성 출력한다.
m_tts.speak( hour_check , TextToSpeech.QUEUE_FLUSH , null );
// 루프를 빠져 나오기위해 값을 변경한다.
i = match_word.length;
break;
}
}
}
// 음성 입력이 올바르지 않은 경우 다시 음성 입력을 시작한다.
if( hour_check == null ) {
startVoiceRecognitionActivity();
}
// 음성 인식 액티비티가 사용자의 취소 버튼에 의해 종료된 경우
} else if( resultCode == RESULT_CANCELED ) {
m_start_alarm = 0;
m_touch_view.setText("알람을 다시 시작하려면 터치하세요!");
}
}
super.onActivityResult(requestCode, resultCode, data);
}
} else if( resultCode == RESULT_CANCELED ) {
m_start_alarm = 0;
m_touch_view.setText("알람을 다시 시작하려면 터치하세요!");
}
}
super.onActivityResult(requestCode, resultCode, data);
}
'프로그램 > 안드로이드 강좌' 카테고리의 다른 글
리스트뷰에서 여러개의 레이아웃 사용하기 (0) | 2012.08.15 |
---|---|
사용자 정의(Custom) 리스트뷰 사용하기 (0) | 2012.08.15 |
리스트뷰 사용하기 - 동적 항목 추가2 (0) | 2012.08.15 |
리스트뷰 사용하기 - 동적 항목 추가1 (0) | 2012.08.15 |
TTS 음성 출력의 종료 시점 알기 (0) | 2012.08.15 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 울산 맛집
- 장현 카페
- PowerBuilder
- 울산 북구 맛집
- 삼척 추천여행지
- 파워빌더
- 울산 추천 카페
- 대구 카페 추천
- 태그를 입력해 주세요.
- 센서
- 맛집
- 간절곶 맛집
- 울산 중구 카페
- 티스토리초대장
- 우리동네 카페
- 안드로이드
- 티스토리 초대
- MSsql
- 리스트뷰
- 티스토리 초대장
- 울산 예쁜 카페
- 삼척 추천 여행지
- 울산 카페
- trigger
- 초대장
- 운정신도시
- 울산 카페 추천
- 안드로이드 강좌
- 트리거
- 장현동 카페
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함