음성 인식 액션

01. 음성으로 조종하기

알버트 로봇을 음성 명령으로 움직여 보자.

음성 명령으로 알버트 로봇을 앞뒤로 움직이는 프로그램을 작성하시오.

웹 페이지 만들기를 참고하여 안드로이드 프로젝트와 웹 페이지 파일을 만들자. onInitialized(robot) 콜백 함수를 만들고, 웹 페이지가 닫힐 때 호출되는 window.onunload 함수도 만들자.

 <script type="text/javascript">

 function onInitialized(robot)
 {
 }

 window.onunload = function()
 {
 }
 </script>

VoiceRecognition 액션의 객체를 얻기 위해서는 Action 객체의 obtain(actionId) 함수에서 actionId에 Action.VoiceRecognition.ID를 입력하면 된다.

 <script type="text/javascript">

 var action = Action.obtain(Action.VoiceRecognition.ID); // 액션 객체를 얻는다.
 action.activate(); // 액션을 시작한다.

 function onInitialized(robot)
 {
 }

 window.onunload = function()
 {
     action.deactivate(); // 액션을 중지한다.
     action.dispose(); // 액션을 폐기한다.
 }
 </script>

window.onunload 함수에서 액션을 중지 및 폐기하였지만 어디에서 해도 상관은 없다. 웹 페이지가 닫히기 전에 액션을 모두 폐기하여야 한다는 것만 잊지 않도록 하자.

VoiceRecognition 액션에는 음성 인식 결과를 얻는 디바이스로 EVENT_TEXT가 있다.

 <script type="text/javascript">

 var action = Action.obtain(Action.VoiceRecognition.ID);
 action.activate();

 function onInitialized(robot)
 {
 }

 function onDeviceDataChanged(device, values, timestamp)
 {
     switch(device.getId())
     {
     case Action.VoiceRecognition.EVENT_TEXT:
         {
             var results = values;
         }
         break;
     }
 }

 window.onunload = function()
 {
     action.deactivate();
     action.dispose();
 }
 </script>

음성 인식 결과에 따라 알버트 로봇을 앞뒤로 움직여 보도록 하자.

 <script type="text/javascript">

 var leftWheelDevice;
 var rightWheelDevice;

 var action = Action.obtain(Action.VoiceRecognition.ID);
 action.activate();

 function onInitialized(robot)
 {
     leftWheelDevice = robot.findDeviceById(Albert.EFFECTOR_LEFT_WHEEL);
     rightWheelDevice = robot.findDeviceById(Albert.EFFECTOR_RIGHT_WHEEL);
 }

 function onDeviceDataChanged(device, values, timestamp)
 {
     switch(device.getId())
     {
     case Action.VoiceRecognition.EVENT_TEXT:
         {
             var results = values;
             var len = results.length;
             var i;
             for(i = 0; i < len; ++i)
             {
                 if(results[i] == "앞으로")
                 {
                     leftWheelDevice.write(20);
                     rightWheelDevice.write(20);
                     break;
                 }
                 else if(results[i] == "뒤로")
                 {
                     leftWheelDevice.write(-20);
                     rightWheelDevice.write(-20);
                     break;
                 }
             }
         }
         break;
     }
 }

 window.onunload = function()
 {
     action.deactivate();
     action.dispose();
 }
 </script>

프로그램을 실행하고 스마트 폰의 마이크에 '앞으로' 또는 '뒤로'라고 말을 하면 알버트 로봇이 움직일 것이다.