워키토키 액션

01. 여보세요, 거기 누구 없소?

재간둥이 알버트 로봇을 사용하여 무전기를 만들어 보자.

스마트 폰의 마이크로 입력받은 음성을 알버트 로봇의 스피커로 출력하는 프로그램을 작성하시오.

새 프로젝트 만들기를 참고하여 안드로이드 프로젝트와 플래시 파일을 만들고, 플래시가 종료될 때 호출되는 리스너 함수를 등록하자. 또한, activate() 메소드를 호출하여 스마트 로봇 론처와 연결하도록 하자.

 import flash.events.Event;
 import org.smartrobot.android.SmartRobot;

 NativeApplication.nativeApplication.addEventListener(Event.DEACTIVATE, handleDeactivate, false, 0, true);
 SmartRobot.activate();

 function handleDeactivate(evt:Event):void
 {
     SmartRobot.deactivate();
 }

Action 클래스의 obtain(actionId:String) 메소드를 통해 액션 객체를 얻을 수 있는데, WalkieTalkie 액션의 객체를 얻기 위해서는 actionId에 Action.WalkieTalkie.ID를 입력하면 된다.

 import flash.events.Event;
 import org.smartrobot.android.SmartRobot;
 import org.smartrobot.android.action.Action;

 NativeApplication.nativeApplication.addEventListener(Event.DEACTIVATE, handleDeactivate, false, 0, true);
 SmartRobot.activate();

 var action:Action = Action.obtain(Action.WalkieTalkie.ID); // 액션 객체를 얻는다.
 action.activate(); // 액션을 시작한다.
 
 function handleDeactivate(evt:Event):void
 {
     action.deactivate(); // 액션을 중지한다.
     action.dispose(); // 액션을 폐기한다.
     SmartRobot.deactivate();
 }

handleDeactivated 메소드에서 액션을 중지 및 폐기하였지만 어디에서 해도 상관은 없다. 플래시가 종료되기 전에 액션을 모두 폐기하여야 한다는 것만 잊지 않도록 하자.

액션은 로봇과 마찬가지로 디바이스로 구성되어 있으며, findDeviceById(deviceId:int) 메소드를 사용하여 필요한 디바이스의 객체를 얻을 수 있다.

WalkieTalkie 액션에는 소리의 감도를 나타내는 디바이스로 EFFECTOR_SENSITIVITY가 있다. 0부터 100까지의 값을 가질 수 있는데, 값이 크면 스피커로 출력되는 소리가 크지만 하울링이 생길 수 있고, 값이 작으면 하울링은 잘 생기지 않지만 스피커로 출력되는 소리가 작다. 따라서 스마트 폰이 알버트 로봇과 멀리 떨어져 있으면 값을 크게 하는 것이 좋고 가까이 있으면 값을 작게 하는 것이 좋다.

 import flash.events.Event;
 import org.smartrobot.android.SmartRobot;
 import org.smartrobot.android.action.Action;
 import org.roboid.robot.Device;

 NativeApplication.nativeApplication.addEventListener(Event.DEACTIVATE, handleDeactivate, false, 0, true);
 SmartRobot.activate();

 var action:Action = Action.obtain(Action.WalkieTalkie.ID);
 var sensitivityDevice:Device = action.findDeviceById(Action.WalkieTalkie.EFFECTOR_SENSITIVITY);
 sensitivityDevice.write(30); // 감도 값을 쓴다.
 action.activate();
 
 function handleDeactivate(evt:Event):void
 {
     action.deactivate();
     action.dispose();
     SmartRobot.deactivate();
 }

프로그램을 실행하고 스마트 폰의 마이크에 말을 하면 알버트 로봇의 스피커로 출력될 것이다.