5.6 Lib (Android) - GiGAGenie-VoiceKit/UserGuide GitHub Wiki

1) ๋ฐฐํฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

  • OllehSpeech.jar - ์Œ์„ฑ์ธ์‹์„ ๊ตฌํ˜„ํ•˜๋Š” ํด๋ž˜์Šค๋ฅผ Exportํ•œ jarํŒŒ์ผ
  • Libnetworkasr.so - ์„œ๋ฒ„์™€ ํ†ต์‹ ์„ ์ „๋‹ดํ•˜์—ฌ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํŒŒ์ผ
  • Libspeexcodec.so - ์„œ๋ฒ„์™€ ํ†ต์‹ ์‹œ ์‚ฌ์šฉํ•˜๋Š” ์Œ์„ฑ ์ฝ”๋ฑ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
  • Ping.so - ๋„คํŠธ์› ํ•‘ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

2) ์‚ฌ์šฉ ๋ฐฉ๋ฒ•

2.1) ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ถ”๊ฐ€

์Œ์„ฑ ๊ฒ€์ƒ‰์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ž์‹ ์˜ ํ”„๋กœ์ ํŠธ์— ๋จผ์ € OllehSpeech.jarํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•˜๋ฉฐ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์•„๋ž˜ 2๊ฐ€์ง€์ด๋‹ค

  • ํ”„๋กœ์ ํŠธ์— ํฌํ•จ ํ”„๋กœ์ ํŠธ์— ํด๋”๋ฅผ ํ•˜๋‚˜ ์ƒ์„ฑํ•˜๊ณ  ํด๋”์— OllehSpeech.jar ํŒŒ์ผ์„ ๋ณต์‚ฌํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ”„๋กœ์ ํŠธ์˜ โ€œBuild Pathโ€์—์„œ โ€œAdd JARsโ€ ๋ฒ„ ํŠผ์„ ํ†ตํ•ด jarํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•œ๋‹ค.

  • ํ”„๋กœ์ ํŠธ ์™ธ๋ถ€์—์„œ ์ถ”๊ฐ€ OllehSpeech.jarํŒŒ์ผ์„ ํ•˜๋‚˜ ๋‘๊ณ  ์—ฌ๋Ÿฌ ํ”„๋กœ์ ํŠธ์—์„œ ๊ณตํ†ต์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•  ๊ฒฝ์šฐ OllehSpeech.jarํŒŒ์ผ์„ ํŠน์ •ํด๋”์— ๋ณต์‚ฌํ•œ ํ›„ ํ”„๋กœ์ ํŠธ์˜ โ€œBuild Pathโ€์—์„œ โ€œAdd External JARsโ€ ๋ฒ„ํŠผ์„ ํ†ตํ•ด jarํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•œ๋‹ค.

  • ๋„คํŠธ์› ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ์Œ์„ฑ์ฝ”๋ฑ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ํ”„๋กœ์ ํŠธ๋‚ด์— libs\armeabiํด๋”๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ƒ์„ฑ๋œ ํด๋” ๋‚ด์— ๋ณต์‚ฌํ•œ๋‹ค. ๋ณต์‚ฌ ํ›„ ์ดํด๋ฆฝ์Šค์˜ ํ”„๋กœ์ ํŠธ์—์„œ โ€œRefreshโ€๋ฅผ ์„ ํƒํ•˜๋ฉด ์ถ”๊ฐ€ํ•œ ํŒŒ์ผ์ด ํ”„๋กœ์ ํŠธ์— ๋ณด์ธ๋‹ค.

2.2) ํ”„๋กœ์ ํŠธ ์„ค์ •

2.2.1) user permission ์ถ”๊ฐ€

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋™์ž‘ํ•˜๊ธฐ ์œ„ํ•ด ์ธํ„ฐ๋„ท ์ ‘์†, ์Œ์„ฑ๋…น์Œ ๋“ฑ์˜ ๊ถŒํ•œ์ด ์žˆ์–ด์•ผ ํ•˜๋ฏ€๋กœ ๋ฐ˜๋“œ์‹œ ์•„๋ž˜ ๋‚ด์šฉ์ด ์ถ”๊ฐ€๋˜์–ด์•ผ ํ•œ๋‹ค.

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

2.2.2) API ๋ ˆ๋ฒจ์€ 7์ด์ƒ์œผ๋กœ ์„ค์ •

3) ์ œ๊ณตํ•˜๋Š” API ์„ค๋ช…

3.1) ์Œ์„ฑ์ธ์‹ API

SpeechRecognition : ์Œ์„ฑ์ธ์‹ function์„ ์ •์˜ํ•œ ํด๋ž˜์Šค

  • Initialize ์„ค๋ช… : ์ดˆ๊ธฐํ™” ํŒŒ๋ผ๋ฏธํ„ฐ context : Acitivity์˜ Context iServiceType : KT๋กœ๋ถ€ํ„ฐ ์ „๋‹ฌ ๋ฐ›์€ ์„œ๋น„์Šค ํ‚ค iMediaType : NetworkASR ๊ฐ’ Handler : ์ด๋ฒคํŠธ๋ฅผ ๋ฐ›์„ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ trIPAddress : ์Œ์„ฑ์ธ์‹ ์„œ๋ฒ„ ์ฃผ์†Œ, URL์ผ ๊ฒฝ์šฐ ๋‚ด๋ถ€์ ์œผ๋กœ ์ž๋™ ๋ณ€ํ™˜๋จ iPort : ์Œ์„ฑ์ธ์‹ ์„œ๋ฒ„ ํฌํŠธ ๋ฆฌํ„ด๊ฐ’ : boolean

  • setAuth ์„ค๋ช… : ์Œ์„ฑ์ธ์‹ ํ‚ค Auth ์„ธํŒ… ํŒŒ๋ผ๋ฏธํ„ฐ svcid : ์„œ๋น„์Šคํ‚ค ์ธ์ฆ์˜ svcId ์ž…๋‹ˆ๋‹ค keyid : ์„œ๋น„์Šคํ‚ค ์ธ์ฆ์˜ keyId ์ž…๋‹ˆ๋‹ค ๋ฆฌํ„ด๊ฐ’ : ์—†์Œ

  • startRecognition ์„ค๋ช… : ์Œ์„ฑ์ธ์‹ ์‹œ์ž‘ ํŒŒ๋ผ๋ฏธํ„ฐ : ์—†์Œ ๋ฆฌํ„ด๊ฐ’ : boolean

ex)

mSR = new SpeechRecognition();      
if (mSR.initialize(this, iServiceType, iMediaType, RecorderHandler,
                    SESSION_IP, SESSION_PORT) == true) {

                setAuth(svcid, keyed);

            if (mSR.startRecognition() == false)
                        mSR.destroy();
                    finish();
            else {
                   
            }
}
else finish();
  • destroy ์„ค๋ช… : ๋‚ด๋ถ€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•ด์ œํ•˜๋Š” ๊ฒƒ์ด๋ฉฐActivity ์ข…๋ฃŒ์‹œ์— ํ˜ธ์ถœํ•ด์•ผ ํ•จ ํŒŒ๋ผ๋ฏธํ„ฐ : ์—†์Œ ๋ฆฌํ„ด๊ฐ’ : ์—†์Œ

  • checkRetry ์„ค๋ช… : ์Œ์„ฑ์ธ์‹ ์‹คํŒจ ํ›„ ๋ฐ”๋กœ ์žฌ์‹œ๋„ ํ•  ๊ฒฝ์šฐ ๋‚ด๋ถ€๋ฅผ ์ดˆ๊ธฐํ™” ์‹œ์ผœ์คŒ ํŒŒ๋ผ๋ฏธํ„ฐ : ์—†์Œ ๋ฆฌํ„ด๊ฐ’ : ์—†์Œ

ex)

mSR.checkRetry();      
m_waveView.clearWave();
m_btnRetry.setVisibility(View.GONE);
setStatus(SpeechRecognition.ST_INIT,0);
mSR.startRecognition();
  • checkNormalResult ์„ค๋ช… : ์Œ์„ฑ์ธ์‹ ์™„๋ฃŒ ํ›„ ์ผ๋ฐ˜ ๊ฒฐ๊ณผ์ธ์ง€ ์™ธ๋ถ€ ์—ฐ๋™ ํ•„์š”ํ•œ ๊ฒƒ์ธ์ง€ ํ™•์ธํ•ด์คŒ, true์ผ ๊ฒฝ์šฐ ์™ธ๋ถ€ ์—ฐ๋™์„ ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค ํŒŒ๋ผ๋ฏธํ„ฐ : ์—†์Œ ๋ฆฌํ„ด๊ฐ’ : boolean

  • getResultXML ์„ค๋ช… : ์Œ์„ฑ์ธ์‹ ๊ฒฐ๊ณผ XML ๋ฌธ์ž์—ด์„ ๋Œ๋ ค์คŒ, ์•ฑ์—์„œ XML์„ ํŒŒ์‹ฑํ•˜์—ฌ ์ฒซ๋ฒˆ์งธ ๊ฒฐ๊ณผ๊ฐ€ โ€œNOISEโ€์ผ ๊ฒฝ์šฐ ์žก์Œ์œผ๋กœ ์ธํ•ด ์Œ์„ฑ์ธ์‹ ๊ฒฐ๊ณผ ์‹คํŒจํ•œ ๊ฒฝ์šฐ์ด๋ฉฐ ์žฌ์‹œ๋„ํ•˜๊ฑฐ๋‚˜ ์ข…๋ฃŒํ•ด์•ผ ํ•จ ํŒŒ๋ผ๋ฏธํ„ฐ : ์—†์Œ ๋ฆฌํ„ด๊ฐ’ : byte[]

  • getExternalExchangeURL ์„ค๋ช… : ์™ธ๋ถ€ ์—ฐ๋™ URL์„ ์–ป์–ด์˜จ๋‹ค ํŒŒ๋ผ๋ฏธํ„ฐ : ์—†์Œ ๋ฆฌํ„ด๊ฐ’ : string

  • stopVoiceTask ์„ค๋ช… : ์Œ์„ฑ ์ „์†ก ์ค‘์ง€ ํŒŒ๋ผ๋ฏธํ„ฐ : ์—†์Œ ๋ฆฌํ„ด๊ฐ’ : ์—†์Œ

  • stopVoiceRecord ์„ค๋ช… : ๋…น์Œ ๋ฐ ์Œ์„ฑ ์ „์†ก ์ค‘์ง€ ํŒŒ๋ผ๋ฏธํ„ฐ : ์—†์Œ ๋ฆฌํ„ด๊ฐ’ : ์—†์Œ

3.2) Event Handler

์Œ์„ฑ์ธ์‹์ด๋‚˜ ํ•ฉ์„ฑ ์ค‘์—๋Š” ์ง„ํ–‰์ƒํƒœ ๋ฐ ๊ฒฐ๊ณผ๊ฐ€ initializeํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ ์ „๋‹ฌํ•œ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ํ†ตํ•ด์„œ ์ „๋‹ฌ๋˜๋ฉฐ ๋ฉ”์‹œ์ง€์˜ ์ข…๋ฅ˜์— ๋”ฐ๋ผ ์ ์ ˆํ•œ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

ex)

Handler eventHandler = new Handler()
{
        @Override
        public void handleMessage(Message msg) {
                switch(msg.what)
                {
        case NetworkASR.MESSAGE_SUCCESS_RECOGNIZE:
                //์ธ์‹ ์„ฑ๊ณต -> Task ์ค‘์ง€ ํ›„ ๊ฒฐ๊ณผ ํŒŒ์‹ฑ
                        break;
                case NetworkASR.MESSAGE_CONNECT_CANNOT:
                //์„œ๋ฒ„ ์ ‘์† ์‹คํŒจ -> Task ์ค‘์ง€
                        break; 
                case NetworkASR.MESSAGE_FAILURE:
                //์‹คํŒจ -> Task ์ค‘์ง€
                break;                         
                case NetworkASR.MESSAGE_READY_OK:
                //์„œ๋ฒ„์ ‘์† ์™„๋ฃŒํ›„ ๋…น์Œ์ด ์‹œ์ž‘๋จ
                        break;
                case NetworkASR.MESSAGE_START_RECOGNIZE:
                //์ธ์‹ ์‹œ์ž‘๋จ
                break;
                case NetworkASR.MESSAGE_FAILED_RECOGNIZE:
                //์ธ์‹ ์‹คํŒจ๋จ
                        break;
                case NetworkASR.MESSAGE_START_RECORD:
                //๋…น์Œ์ด ์‹œ์ž‘๋จ -> Task ์ค‘์ง€
                        break;
                case NetworkASR.MESSAGE_DISPLAY_WAVE:
                //ํŒŒํ˜•์„ ๊ทธ๋ฆผ
                break;         
    }

4) ๋ฉ”์‹œ์ง€

  • NetworkASR.MESSAGE_CONNECT_CANNOT : ์„œ๋ฒ„์— ์ ‘์†์ด ๋ถˆ๊ฐ€๋Šฅํ•˜์—ฌ ๋ฐœ์ƒ -> ์ง„ํ–‰์ค‘์ธ Task๋ฅผ ์ค‘์ง€์‹œ์ผœ์•ผ ํ•จ
  • NetworkASR.MESSAGE_READY_OK : ์„œ๋ฒ„์— ์ ‘์†์ด ์™„๋ฃŒ๋˜์–ด ์Œ์„ฑ ์ธ์‹์„ ์œ„ํ•œ ๋…น์Œ์„ ์‹œ์ž‘
  • NetworkASR. MESSAGE_START_RECOGNIZE : ์„œ๋ฒ„ ์ธก์—์„œ ์Œ์„ฑ ์ˆ˜์‹ ์ด ์™„๋ฃŒ๋˜๊ณ  ์Œ์„ฑ ์ธ์‹์„ ์‹œ์ž‘
  • NetworkASR.MESSAGE_FAILED_RECOGNIZE : ์„œ๋ฒ„ ์ธก์—์„œ ์Œ์„ฑ ์ˆ˜์‹ ์ด ์™„๋ฃŒ๋˜๊ณ  ์Œ์„ฑ ์ธ์‹์ด ์‹คํŒจ
  • NetworkASR.MESSAGE_SUCCESS_RECOGNIZE : ์„œ๋ฒ„ ์ธก์—์„œ ์Œ์„ฑ ์ˆ˜์‹ ์ด ์™„๋ฃŒ๋˜๊ณ  ์Œ์„ฑ ์ธ์‹์ด ์™„๋ฃŒ -> ์ง„ํ–‰์ค‘์ธ Task๋ฅผ ์ค‘์ง€์‹œ์ผœ์•ผ ํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ํŒŒ์‹ฑ ํ•ด์•ผํ•จ
  • NetworkASR.MESSAGE_FAILURE : ๋™์ž‘์ค‘ ๋ฐœ์ƒํ•˜๋Š” ์˜ค๋ฅ˜(๋„คํŠธ์› ์˜ค๋ฅ˜, ๋””๋ฐ”์ด์Šค์˜ค๋ฅ˜ ๋“ฑ) ํ†ต๋ณด -> ์ง„ํ–‰์ค‘์ธ Task๋ฅผ ์ค‘์ง€์‹œ์ผœ์•ผ ํ•จ
  • NetworkASR.MESSAGE_START_RECORD : ์Œ์„ฑ๋…น์Œ์ด ์‹œ์ž‘๋จ
  • NetworkASR.MESSAGE_DISPLAY_WAVE : ํŒŒํ˜•์„ ๊ทธ๋ฆด ์ˆ˜ ์žˆ๋„๋ก ์Œ์„ฑ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด์ค€๋‹ค.
  • msg.getData().getByteArray("PCM") : ์Œ์„ฑ๋ฐ์ดํ„ฐ msg.arg1 :๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ. ์Œ์„ฑ๋ฐ์ดํ„ฐ๋Š” 16๋น„ํŠธ ํฌ๊ธฐ์ด๋ฉฐ shortํƒ€์ž…์˜ ๋ฐฐ์—ด๋กœ ์บ์ŠคํŒ…ํ•˜์—ฌ ์‚ฌ์šฉํ•จ

5) ๋„คํŠธ์›Œํฌ ์ƒํƒœ ๊ฐ’

  • NetworkASR.UNKNOWN_STATUS : ๋…ธํ‹ฐ ์—†์ด ์ข…๋ฃŒ ๋˜์—ˆ์„ ๊ฒฝ์šฐ
  • NetworkASR.CANT_CONNECT_STATUS : ์„œ๋ฒ„ ์ ‘์† ์‹คํŒจ
  • NetworkASR.READY_STATUS : ์„œ๋ฒ„ ์ ‘์† ํ›„ ๋…น์Œ์ด ์‹œ์ž‘๋˜์—ˆ์Œ
  • NetworkASR.TIMEOUT_STATUS : ์„œ๋ฒ„ ์ ‘์† ํ›„ ๋…น์Œ์ด ์ง„ํ–‰๋˜์—ˆ์œผ๋ฉฐ ์Œ์„ฑ์ด ์ธ์‹ ์•ˆ๋˜์–ด ํƒ€์ž„์•„์›ƒ ๋ฐœ์ƒ
  • NetworkASR.START_RECOG_STATUS : ์„œ๋ฒ„ ์ ‘์† ํ›„ ๋…น์Œ์ด ์ง„ํ–‰๋˜์—ˆ์œผ๋ฉฐ ์Œ์„ฑ์ด ๊ฒ€์ถœ๋˜์–ด ์ธ์‹์ด ์‹œ์ž‘๋˜์—ˆ์Œ
  • NetworkASR.FAIL_RECOG_STATUS : ์Œ์„ฑ์ธ์‹์ด ์ง„ํ–‰๋˜์—ˆ์œผ๋ฉฐ ๊ฒฐ๊ณผ๊ฐ€ ์‹คํŒจ์ž„
  • NetworkASR.FAILURE_STATUS : ์Œ์„ฑ์ธ์‹์ด ์ง„ํ–‰๋˜์—ˆ์œผ๋ฉฐ ๊ฒฐ๊ณผ๊ฐ€ ์„ฑ๊ณต์ž„
  • NetworkASR.FAILURE_AUTH : ์Œ์„ฑ์ธ์‹ ์ธ์ฆ์ด ์‹คํŒจ์ž„
โš ๏ธ **GitHub.com Fallback** โš ๏ธ