Wii 리모콘으로 iTunes 제어하기

주말 저녁에 시간이 남아서 Wii 리모콘으로 장난질을 초큼 더 해봤어요. 적외선 발광 다이오드라도 있으면 마이너리티 리포트 놀이를 해봤을텐데 어디서 구해야하는지 몰라서 --; 일단은 중력 센서를 가지고 놀아봤습니다.

뭘 할까 하다가 실제로 쓸만한걸 만들어봐야겠다 싶어서 제스처를 인식해서 키보드 입력으로 전환하는 프로그램을 하나 짜봤습니다. 일단은 왼쪽으로 움직이면 키보드 LEFT, 오른쪽으로 움직이면 키보드 RIGHT로 전환하게 해봤습니다.

자기 전에 누워서 음악 듣거나, 침대에서 프로젝터로 영화 보거나 할 때 좋을 것 같아요 ㅋ (SendKeys를 쓰기 때문에 사실 iTunes가 아니라 뭐든 제어할 수 있습니다)

조금 더 일반화해서 Firefox 제스처 플러그인처럼 만들면 아주 좋겠다는.



근데, 만들어놓고보니 어째 방향이 반대인듯 ㅎㅎ

Johnny Chung Lee 아저씨가 만든 .NET용 라이브러리를 사용했고, 코드는 대략 다음과 같습니다( 아쉽게도 JS가 아니고 C#으로 했어요 --; 간만에 C#을 하려니 완전 뭐가 뭔지 ㅋ ).

    class GestureDetector : IDisposable
    {
        private Wiimote wiimote;
        private bool started;
        private float init;
        private string dir;

        public GestureDetector()
        {
            this.wiimote = new Wiimote();
            this.wiimote.Connect();
            this.wiimote.SetReportType(Wiimote.InputReport.ButtonsAccel, true);
            this.wiimote.WiimoteChanged +=
                new WiimoteChangedEventHandler(wiimote_WiimoteChanged);
        }

        void wiimote_WiimoteChanged(object sender, WiimoteChangedEventArgs args)
        {
            WiimoteState state = args.WiimoteState;
            bool buttonB = state.ButtonState.B;
            float x = state.AccelState.X;

            if (!started && buttonB)
            {
                started = true;
                init = x;
            }
            else if (started && buttonB)
            {
                if (dir == null && x > init + 0.2)
                {
                    dir = "{LEFT}";
                }
                else if (dir == null && x < init - 0.2)
                {
                    dir = "{RIGHT}";
                }
            }
            else if (started && !buttonB)
            {
                started = false;
                if(dir != null) SendKeys.SendWait(dir);
                dir = null;
            }
        }

        public void Dispose()
        {
            this.wiimote.Disconnect();
        }
    }

(코드에 대한 설명은 생략)

아참, Wii Remote랑 PC를 연결하려면 블루투스 수신이 가능해야 합니다. 저는 USB 동글이? 라는걸 하나 샀어요. Wii Remote의 1, 2 버튼을 동시에 누르면 장치를 등록할 수 있습니다.
신고

Wii, GMail을 보고 느낌 점

뭐 느낀 점들이 한 둘이 아니지만 뻔한 얘기들은 생략하고 써보겠습니다. Wii랑 GMail에 뭔 공통점이 있어서 같이 쓰는건 아니고, 따로 쓰기엔 글이 너무 짧으니까 몰아서 씁니다 ㅎㅎ

1. Wii Remote에서 소리가 나게 한 것

입체음향을 내기 위해 5.1ch을 지원하거나, Dummy Head Recording 같은 것을 도입하거나 하는 대신에, 단순히 손에 들고 있는 컨트롤러에서 소리가 나게 해서 자연스럽게, 그리고 아주 훌륭하게 입체음향을 구현할 점.

2. Wii 와 Mii

작은 Wii 하드웨어 상자 안에 Mii(Wii의 아바타)가 살고 있다는 느낌이 들게 만든 점. 그리고 그 Mii를 끌어다가 Wii Remote에 담아서 친구집에 데려갈 수 있게 한 점.

3. GMail의 광고 영역

본문 우측에는 광고 영역이 있습니다. 하지만, 본문 중에 날짜 정보 등이 있을 경우 광고 대신 Google Calendar랑 연동할 수 있는 기능이 나타납니다. 이걸 보고 왜 놀랐냐 하면...
  • Eye-tracking 등을 해보면 광고가 나타나는 영역에는 거의 눈길이 가지 않습니다.
  • 하지만 본문과 관련된 날짜 정보를 인식해서 Google Calendar랑 연동할 수 있는 기능이 같은 자리에 나타나게 하면 자연스럽게 해당 영역으로 눈길이 가게 될겁니다.
  • 더 중요한건, 구글 광고가 context-aware 하다는 점. 따라서 사용자에게는 해당 영역이 "광고 영역"이라기 보다는 "본문과 관련 있는 유용한 정보가 나오는 영역"이라고 인식하게 만들 가능성이 조금 더 높아질 것 같습니다.

신고
오늘 코엑스 애니랜드 가서 Wii 를 사왔습니다. 프로젝터랑 연결해서 대형화면으로 즐겨볼까 합니다 ㅋ 근데 아직 스피커를 연결 못해서(단자 모냥이 안 맞아요 ㅜㅠ) 리모콘에서 나는 소리만으로 "처음 만나는 Wii"를 초큼 해봤습니다.

에, 주제는 그게 아니고, 이 Wii 리모콘이라는게 참 신기하단 말이죠. 일단 양방향 통신이 가능하고, 3차원 공간상에서의 움직임을 인식하기도 하면서, (좀 찾아봤더니) 앞 부분의 적외선 센서는 동시에 네 개의 적외선 신호를 인식할 수 있다고 합니다. 게다가, 블루투스를 지원하기 때문에 Wii 본체가 아니라 일반 컴퓨터랑도 연결이 가능하다는 사실.

눈이 번쩍. 뭔진 모르겠으나 재밌는 놀이를 할 수 있겠다는 생각이. 좀 더 찾아보니 역시나. 이미 많은 사람들이 Wii 리모콘을 가지고 다양하게 놀고 있더군요. 이를테면 마이너리티 리포트 놀이를 하시는 분도 계시고요.

저도 뭔가 하고 싶은데, 회사에도 맨날 자바스크립트만 하다보니 이것도 자바스크립트로 해야겠다는 오기 혹은 사명감 따위의 이름모를 악감정(응?)이 발동하였습니다. ㅋ

1. 우선 Wii 리모콘과 PC를 연결해야 하는데, 제 PC에는 블루투스가 없다는 --; 하지만 옆에 있는 UMPC(후지쯔 U1010)에 있으므로 OK. "블루투스 장치 연결 마법사"를 시작하고 Wii 리모콘의 1, 2 버튼을 동시에 눌러서 연결 성공. (Nintendo RVL-CNT-01 이라는 이름으로 연결됩니다.)

2. 위에서 링크한 "마이너리티 리포트 놀이" 하시던 분이 만들어 놓은 .NET Managed DLL 발견. (아싸 날로 먹었다)

3. Windows Scripting Host의 JScript로 해볼까 싶었는데 위 라이브러리를 어떻게 COM으로 등록하는지 몰라서 초큼 삽질하다가 포기. RegAsm.exe 로 해봤는데 "No types were registered"라고만 나옴. 음. 찾아볼까 하다가 귀찮아서 포기. 안되면 말지 뭐. JScript는 포기.

4. JScript.NET으로 선회. ㅎㅎ 위 DLL과 같은 디렉토리에 test.js 라는 파일을 생성:
    > import WiimoteLib;
    > new Wiimote();

5. 컴파일
    > jsc test.js

6. 실행
    > test.exe

7. 끝. 이제 DLL 소스와 도움말(chm) 참고해서 노는 일만 남았습니다. 뭘 하면 좋을까요? ㅡㅡ;

이제 준비는 끝났고, 앞으로 진척 상황을 연재 형식으로 써볼 생각입니다. :-)

* PS: 구글신께서 알려주신건데, 닌텐도의 Wii에는 오페라가 들어 있잖아요? 그 오페라에는 특별한 객체가 있다고 합니다. 대충 이런 식인가봐요:
    > var remote = opera.wiiremote.update(1);
    > if(remote.isEnabled) { ... }
신고
< Newer     Older >

티스토리 툴바