{"id":808,"date":"2015-01-10T16:24:44","date_gmt":"2015-01-10T07:24:44","guid":{"rendered":"http:\/\/blog.moramcnt.com\/?p=808"},"modified":"2015-01-10T16:24:44","modified_gmt":"2015-01-10T07:24:44","slug":"%ea%b5%ac%ea%b8%80-%ec%9d%8c%ec%84%b1%ec%9d%b8%ec%8b%9dspeechrecognizer-api%eb%a5%bc-%ec%9d%b4%ec%9a%a9%ed%95%98%ec%97%ac-%ec%84%9c%eb%b9%84%ec%8a%a4-%ed%98%95%ed%83%9c%eb%a1%9c-%ea%b5%ac%ed%98%84","status":"publish","type":"post","link":"http:\/\/blog.moramcnt.com\/?p=808","title":{"rendered":"\uad6c\uae00 \uc74c\uc131\uc778\uc2dd(SpeechRecognizer) API\ub97c \uc774\uc6a9\ud558\uc5ec \uc11c\ube44\uc2a4 \ud615\ud0dc\ub85c \uad6c\ud604\ud558\uae30"},"content":{"rendered":"<p>\uad6c\uae00\uc758 \uc74c\uc131\uc778\uc2dd API\ub97c \uc11c\ube44\uc2a4 \ud615\ud0dc\ub85c \uad6c\ud604\ud558\uc5ec, \ud56d\uc0c1 \uba85\ub839\uc5b4\ub97c \ub0b4\ub9ac\uba74 \uc2e4\ud589\ud560\uc218 \uc788\ub294\uc9c0 \ud14c\uc2a4\ud2b8\ud558\uae30\ub85c \ud558\uc600\ub2e4.<\/p>\n<p>1. \uc11c\ube44\uc2a4 \uad6c\ud604<br \/>\n   &#8211; \uad6c\uae00\uc758 SpeechRecognizer API\ub294 \ud55c\ubc88 \uc74c\uc131\uc744 \uc778\uc2dd\ud55c \ud6c4, \ub05d\ub098\ubc84\ub9ac\uae30 \ub54c\ubb38\uc5d0 \uacc4\uc18d<br \/>\n     \uc7ac\uc2dc\uc791\uc744 \ud574\uc8fc\ub294 \uc2dd\uc73c\ub85c \uad6c\ud604\ud574\uc57c \ud55c\ub2e4.<br \/>\n   &#8211; \ub530\ub77c\uc11c \ub2e4\uc74c\uacfc \uac19\uc774 onResults\uc5d0\uc11c \uc74c\uc131\uc778\uc2dd \uacb0\uacfc\ub97c \ucd9c\ub825\ud558\uace0 \ub09c\ud6c4, \ud578\ub4e4\ub7ec \uba54\uc2dc\uc9c0\ub97c<br \/>\n     MSG_VOICE_RECO_END \uc0c1\ud0dc\ub85c \ubcf4\ub0b8\ub2e4.<br \/>\n     \uadf8\ub807\uac8c\ub418\uba74 \ud578\ub4e4\ub7ec\uc758 handleMessage() \uc5d0\uc11c\ub294 1\ucd08\ud6c4\uc5d0 \ub2e4\uc2dc SpeechRecognizer\ub97c<br \/>\n     \uc7ac\uc2dc\uc791\ud55c\ub2e4.<\/p>\n<pre>\r\n\r\npublic class VoiceRecoService extends Service\r\n{\r\n\t\r\n\t@Override\r\n\tpublic void onCreate()\r\n\t{\r\n\t\tsuper.onCreate();\r\n\t\tstartListening();\r\n               ..... (\uc911 \ub7b5).....\r\n\t}\r\n    \r\n        ..... (\uc911 \ub7b5).....\r\n\r\n\tprivate Handler mHdrVoiceRecoState = new Handler()\r\n\t{\r\n\t\t@Override\r\n\t\tpublic void handleMessage(Message msg)\r\n\t\t{\r\n\t\t\tswitch (msg.what)\r\n\t\t\t{\r\n\t\t\t\tcase MSG_VOICE_RECO_READY\t: break;\r\n\t\t\t\tcase MSG_VOICE_RECO_END\t\t:\r\n\t\t\t\t{\r\n\t\t\t\t\tstopListening();\r\n\t\t\t\t\tsendEmptyMessageDelayed(MSG_VOICE_RECO_RESTART, 1000);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\tcase MSG_VOICE_RECO_RESTART\t: startListening();\tbreak;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tsuper.handleMessage(msg);\r\n\t\t\t}\r\n\t\t}\r\n\t};\t\r\n\r\n\tpublic void startListening()\r\n\t{\r\n\t\tif(mBoolVoiceRecoStarted == false)\r\n\t\t{\r\n\t\t    if(mSrRecognizer == null)\r\n\t\t    {\r\n\t\t\tmSrRecognizer = SpeechRecognizer.createSpeechRecognizer(mCtxContext);\r\n\t\t\tmSrRecognizer.setRecognitionListener(mClsRecoListener);\r\n\t\t    }\r\n\t\t    if(mSrRecognizer.isRecognitionAvailable(mCtxContext))\r\n\t\t    {\r\n\t\t\tIntent itItent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);\r\n\t\t\titItent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, this.getPackageName());\r\n\t\t\titItent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.KOREAN.toString());\r\n\t\t\titItent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 50);\r\n\t\t\tmSrRecognizer.startListening(itItent);\r\n\t\t    }\r\n\t\t}\r\n\t\tmBoolVoiceRecoStarted = true;\r\n\t}\r\n\r\n\tpublic void stopListening()\r\n\t{\r\n\t\ttry\r\n\t\t{\r\n\t\t\tif (mSrRecognizer != null && mBoolVoiceRecoStarted == true)\r\n\t\t\t{\r\n\t\t\t\tmSrRecognizer.stopListening();\r\n\t\t\t}\r\n\t\t}\r\n\t\tcatch(Exception ex)\r\n\t\t{\r\n\t\t\tLogger.e(\"Stop \uc608\uc678:\"+ StrUtil.trace(ex));\r\n\t\t}\r\n\t\tmBoolVoiceRecoStarted = false;\r\n\t}\t\r\n\r\n\r\n\tprivate RecognitionListener mClsRecoListener = new RecognitionListener()\r\n\t{\r\n\t\t@Override\r\n\t\tpublic void onRmsChanged(float rmsdB)\r\n\t\t{\r\n\t\t}\r\n\r\n\t\t\r\n\t\t@Override\r\n\t\tpublic void onResults(Bundle results)\r\n\t\t{\r\n\t\t\tmHdrVoiceRecoState.sendEmptyMessage(MSG_VOICE_RECO_END);\r\n\t\t\t\r\n\t\t\tIntent itBroadcast = new Intent();\r\n\t\t\titBroadcast.setAction(Constants.INTENT_ACTION_VOICE_RECO);        \t\r\n\t\t\titBroadcast.putExtras(results);\r\n\t\t\tmCtxContext.sendBroadcast(itBroadcast);\r\n\t\t}\r\n\t\t\r\n\t\t@Override\r\n\t\tpublic void onReadyForSpeech(Bundle params)\r\n\t\t{\r\n\t\t}\r\n\r\n\t\t@Override\r\n\t\tpublic void onEndOfSpeech()\r\n\t\t{\r\n\t\t}\r\n\r\n\t\t@Override\r\n\t\tpublic void onError(int intError)\r\n\t\t{\r\n\t\t\tmHdrVoiceRecoState.sendEmptyMessage(MSG_VOICE_RECO_END);\r\n\t\t}\r\n\r\n\t\t@Override\r\n\t\tpublic void onBeginningOfSpeech()\r\n\t\t{\r\n\t\t}\r\n\r\n\t\t@Override\r\n\t\tpublic void onBufferReceived(byte[] buffer)\r\n\t\t{\r\n\t\t}\r\n\r\n\t\t@Override\r\n\t\tpublic void onEvent(int eventType, Bundle params)\r\n\t\t{\r\n\t\t}\r\n\r\n\t\t@Override\r\n\t\tpublic void onPartialResults(Bundle partialResults)\r\n\t\t{\r\n\t\t}\r\n\t};\r\n}\r\n<\/pre>\n<p>2. \uacb0\ub860<br \/>\n   \uacb0\ub860\uc801\uc73c\ub85c \uc11c\ube44\uc2a4\ub85c \uad6c\ud604\uac00\ub2a5\ud568\uc73c\ub85c \ud655\uc778\ud558\uc600\uc73c\ub098, \uc74c\uc131\uc744 \uc778\uc2dd\ud558\uac8c \ud558\uae30 \uc704\ud574<br \/>\n   \ud56d\uc0c1 \ub300\uae30\uc0c1\ud0dc\ub85c \ub9cc\ub4e4\uc5b4 \ub193\uc558\ub354\ub2c8, \ubc30\ud130\ub9ac \uc18c\ubaa8\ub7c9\uc774 \ub9ce\uc74c\uc744 \ud655\uc778\ud558\uc600\ub2e4. <\/p>\n<p><a href=\"http:\/\/blog.moramcnt.com\/wp-content\/uploads\/2015\/01\/SC20150110-135825.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/blog.moramcnt.com\/wp-content\/uploads\/2015\/01\/SC20150110-135825-300x188.jpg\" alt=\"SC20150110-135825\" width=\"300\" height=\"188\" class=\"alignnone size-medium wp-image-811\" srcset=\"http:\/\/blog.moramcnt.com\/wp-content\/uploads\/2015\/01\/SC20150110-135825-300x188.jpg 300w, http:\/\/blog.moramcnt.com\/wp-content\/uploads\/2015\/01\/SC20150110-135825-1024x640.jpg 1024w, http:\/\/blog.moramcnt.com\/wp-content\/uploads\/2015\/01\/SC20150110-135825-480x300.jpg 480w, http:\/\/blog.moramcnt.com\/wp-content\/uploads\/2015\/01\/SC20150110-135825.jpg 1280w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\uad6c\uae00\uc758 \uc74c\uc131\uc778\uc2dd API\ub97c \uc11c\ube44\uc2a4 \ud615\ud0dc\ub85c \uad6c\ud604\ud558\uc5ec, \ud56d\uc0c1 \uba85\ub839\uc5b4\ub97c \ub0b4\ub9ac\uba74 \uc2e4\ud589\ud560\uc218 \uc788\ub294\uc9c0 \ud14c\uc2a4\ud2b8\ud558\uae30\ub85c \ud558\uc600\ub2e4. 1. \uc11c\ube44\uc2a4 \uad6c\ud604 &#8211; \uad6c\uae00\uc758 SpeechRecognizer API\ub294 \ud55c\ubc88 \uc74c\uc131\uc744 \uc778\uc2dd\ud55c \ud6c4, \ub05d\ub098\ubc84\ub9ac\uae30 \ub54c\ubb38\uc5d0 \uacc4\uc18d \uc7ac\uc2dc\uc791\uc744 \ud574\uc8fc\ub294 \uc2dd\uc73c\ub85c \uad6c\ud604\ud574\uc57c \ud55c\ub2e4. &#8211; \ub530\ub77c\uc11c \ub2e4\uc74c\uacfc \uac19\uc774 onResults\uc5d0\uc11c \uc74c\uc131\uc778\uc2dd \uacb0\uacfc\ub97c \ucd9c\ub825\ud558\uace0 \ub09c\ud6c4, \ud578\ub4e4\ub7ec \uba54\uc2dc\uc9c0\ub97c MSG_VOICE_RECO_END \uc0c1\ud0dc\ub85c \ubcf4\ub0b8\ub2e4. \uadf8\ub807\uac8c\ub418\uba74 \ud578\ub4e4\ub7ec\uc758 handleMessage() \uc5d0\uc11c\ub294 1\ucd08\ud6c4\uc5d0 \ub2e4\uc2dc SpeechRecognizer\ub97c \uc7ac\uc2dc\uc791\ud55c\ub2e4. public [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[6,23,4],"tags":[129,131,128,126,130,127],"class_list":["post-808","post","type-post","status-publish","format-standard","hentry","category-java","category-23","category-4","tag-api","tag-service","tag-speechrecognizer","tag-126","tag-130","tag-127"],"_links":{"self":[{"href":"http:\/\/blog.moramcnt.com\/index.php?rest_route=\/wp\/v2\/posts\/808","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/blog.moramcnt.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/blog.moramcnt.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/blog.moramcnt.com\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/blog.moramcnt.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=808"}],"version-history":[{"count":3,"href":"http:\/\/blog.moramcnt.com\/index.php?rest_route=\/wp\/v2\/posts\/808\/revisions"}],"predecessor-version":[{"id":812,"href":"http:\/\/blog.moramcnt.com\/index.php?rest_route=\/wp\/v2\/posts\/808\/revisions\/812"}],"wp:attachment":[{"href":"http:\/\/blog.moramcnt.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=808"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.moramcnt.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=808"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.moramcnt.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=808"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}