Hatena::ブログ(Diary)

やねうらお−よっちゃんイカを食べながら、息子語録を書き綴る このページをアンテナに追加 RSSフィード

書籍化されたで! 監修したで!(`ω´) 絶版なってしもた 大好評発売中です! 少し書いたデ!(`ω´) これにもな!(`ω´)
解析魔法少女美咲ちゃん マジカル・オープン!

YaneuLabs / YaneuraoGameSDK.NET / 掲示板 / やねうらおにメール / twitter / プロフィール

 | 

2008-01-12 NXTプログラミング

[][] NXTプログラミング(3)  NXTプログラミング(3)を含むブックマーク  NXTプログラミング(3)のブックマークコメント


NxtCommunicator.cs*1を用いて開発していくことにする。


まずは、Hello再生から。

    NxtCommunicator nc = = new NxtCommunicator("COM3");
    // portは自分環境に合わせて変更すべし。

    nc.Connect();
    nc.PlaySoundFile("hello.rso");

っと、これで再生されれば良いのだが、NxtCommunicatorにはPlaySoundFileというメソッドが用意されていない。何とも使えないwarpperである。


仕方ないので、BDK*2のp.5を見ながらサウンドファイル再生させるメソッドをNxtCommunicatorに追加するのである。

        /// <summary>
        /// サウンドを再生する。
        /// </summary>
        /// <param name="filename"></param>
        public void PlaySoundFile(string filename)
        {
            byte[] message = new byte[3 + filename.Length + 1/* \0 */];

            message[0] = 0x80;
            // いまから送信するコマンドに返信がいるかなどの設定
            // 0x00 : ダイレクトコマンド送信。レスポンス必要。
            // 0x01 : システムコマンド送信。レスポンス必要。
            // 0x02 : 返信の送信。
            // 0x80 : ダイレクトコマンド送信。レスポンス不要。
            // 0x81 : システムコマンド送信。レスポンス必要。
            
            message[1] = (byte)NxtCommand.PlaySoundFile;
            // 送信するコマンド
            //  PlaySoundFile  == 0x02 : サウンドファイル再生
            //  SetOutputState == 0x04 : 出力用コマンド
            //  などなど。

            message[2] = 0;
            // endless loop再生するのかのフラグ
            //  0 == false
            //  1 == true

            // そのあとにファイル名がASCIIZ(最後に\0が付与されるアスキー文字列)で入る。
            for(int i=0;i<filename.Length;++i)
                message[i+3] = (byte)filename[i];

            message[message.Length - 1] = (byte)'\0'; // null terminator

            sendMessage(message);
            // ちなみにsendMessageでは実際には、ここで指定したbyte[]の前に
            // このメッセージの長さを意味する数値が付与されてCOMポートに
            // 送信される。
            // なお、この数値はUShort(2バイト)で、リトルエンディアンである。
        }

これで、サウンドが再生できるようになった。*3


サウンドはNXT本体から再生されるので、面倒な組み立てをしなくともNXT本体に単三電池を6本入れればすぐにこのテストが出来る。

*1NXT#プロジェクトの一部であるLego Bluetooth Protocolのwrapper : http://nxtsharp.fokke.net/

*2Bluetooth Developer Kit (BDK) : http://mindstorms.lego.com/Overview/NXTreme.aspx

*3:なお、事前に、サウンドファイルを本体に転送しておく必要がある。「NXTソフトウェア」を使ってNXT本体で一度でも再生させたファイル自動的にNXT本体に残っているようなので、私はこの機能で転送した。Windowsプログラムアクセサリ→通信→Bluetoothファイル転送ウィザード から直接ファイル転送できるようではある。(未確認)

トラックバック - http://d.hatena.ne.jp/yaneurao/20080112
 | 

人気blogランキング
1900 | 01 |
2004 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2005 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2006 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2012 | 01 | 02 |


Microsoft MVP
Microsoft MVP Visual C# 2006.07-2011.06