KCB-3WLを使った音声データ通信

Posted on 2010.12.16 in

 

この記事は、KCB-4WL用の参考データです。外部へのリンクについては既に情報が古い場合もありますので、ご確認の上ご覧ください。

はじめに

KCB-3WLにIPフォンの機能を持たせると、ネットワーク経由で音声データ通信ができます。多くのWEBカメラにはマイク機能がついていますので、今回は普段使っているWEBカメラのマイクで拾った音をKCB-3WLを通じて、PCやAndroid携帯で聞くことにチャレンジします。

KCB-3WLには音声デバイスドライバーや、音声通信ソフトウェアなどの準備が必要となりますが、準備する手順が難しいため、弊社で用意したデバイスドライバーやソフトウェアをKCB-3WLにインストールしてデータ通信を行います。

クライアント側(PCなど)ではマイクとスピーカー、そしてWindows、MacintoshまたはAndroid用のlinphoneソフトウェア(IPフォンソフトウェア)が必要です。クライアント側で音を聞くだけならPC内蔵のスピーカーが使えます。

今回はKCB-3WLのシステムを修正し、普段ハードディスクのように使っているエリアをメモリーとして使用し、RAMを増やす作業も行います。

なお今回の記事内容につきましては、全てのデバイスにおいて動作保証をするものではありません。また各デバイスについての質問にはお答えいたしかねます。あらかじめご理解の上でご使用なさいますようお願いいたします。

 

準備

  • KCB-3WL
  • PCにスピーカー、あるいはSkypeなどのIPフォンなどの音声出力装置
  • linephoneソフトウェア(ダウンロードして、あらかじめインストールしてください http://www.linphone.org/eng/download/packages/linphone.html
  • KCB-3WL側ではWEBカメラのマイクを利用します(その他使用できるサウンドデバイスについては後述)

 

ソフトウェアのインストール

1.ドライバーの準備と送信

下のリンクより、「kcb3wl_sound_modules.zip」ファイルをダウンロードしてあらかじめPCで解凍してください。解凍すると、「audio_driver.tar.gz」、「linphone_bin.tar.gz」、「readline.tar.gz」の3つのファイルができあがります。これらをKCB-3WLに下記手順で送信します。

>> kcb3wl_sound_modules.zipをダウンロード 

TeraTermからシリアルケーブル経由で送る

  1. TeraTermとKCB-3WLをシリアルUSBアダプターで接続し、KCB-3WLを起動します。
  2. KCB-3WLにrootユーザーでログインし、/tmp/ディレクトリへ移動し、rzと入力します。KCB-3WLはファイルの受信状態になります。
    # cd /tmp
    # rz
  3. TeraTermのファイルメニューから転送>ZMODEM>送信を選ぶと、送信ファイルを選択するダイアログが表示されます。
  4. ファイルを選択してOKボタンを押すとファイルが送信されます。

注意:シリアルケーブルでデータを送るので、送信中はケーブルを触ったりしてノイズが入らないようにして下さい。

FTPで送る

FTPでファイルを送る場合は、WindowsまたはMacintoshのFTPクライアントソフトウェアを使って、ファイルをKCB-3WLに送信してください。あるいはKCB-3WL付属のUbuntu Linuxへ書き込んでから、FTPでデータを送ることも出来ます。

2.ライブラリのインストール

ファイルのインストールや設定は、必ずrootユーザーにて行ってください。ファイルをtarコマンドで解凍する前に、かならず「/」ディレクトリへ移動してください。解凍する場所を間違えると動作しません。また、コマンドの先頭の「#」はプロンプトです。入力する必要はありません。

オーディオドライバーのインストール

  1. audio_driver.tar.gzファイルをKCB-3WLの/tmpディレクトリへ送ります。
  2. いったんルートディレクトリへ移動してからファイルを解凍します。次のコマンドを実行してください。圧縮されたデバイスドライバーファイルが/lib/modules/ディレクトリへ展開されます。
    # cd /
    # tar zxvf /tmp/audio_driver.tar.gz
  3. audio_driver.tar.gzは不要なので削除します(ディスク領域を圧迫するため必ず削除してください)。
    # rm /tmp/audio_driver.tar.gz

readlineライブラリのインストール

readlineライブラリは後述のlinphoneソフトウェアで使用します。

  1. readline.tar.gzファイルをKCB-3WLの/tmpディレクトリに送ります。
  2. 次のコマンドでファイルを解凍します。解凍すると/usr/libディレクトリにreadlineライブラリが展開されます。
    # cd /
    # tar zxvf /tmp/readline.tar.gz
  3. readline.tar.gzは不要なので削除します(ディスク領域を圧迫するため必ず削除してください)。
    # rm /tmp/readline.tar.gz

linphoneサーバーソフトウェアのインストール

  1. linphone_bin.tar.gzファイルをKCB-3WLへ送ります。
  2. 次のコマンドでファイルを解凍します。解凍するとlinphoneソフトウェアその他のファイルが展開されます。
    # cd /
    # tar zxvf /tmp/linphone_bin.tar.gz
  3. linphone_bin.tar.gzは不要なので削除します(ディスク領域を圧迫するため必ず削除してください)。
    # rm /tmp/linphone_bin.tar.gz

ライブラリの設定

ライブラリはコピーしただけでは使えないので、シンボリックリンクを作成します。シンボリックリンクとはWindowsではショートカット、Macintoshではエイリアスのようなものです。

  1. /libディレクトリへ移動します。
    # cd /lib
  2. シンボリックリンクを作成します。
    # ln -s libreadline.so.5.2 libreadline.so.5
    # ln -s libncurses.so.5.6 libncurses.so.5

設定ファイルを修正

linphone_bin.tar.gzを解凍すると、/rootディレクトリに「linphonerc」というlinphone設定ファイルができあがります。このファイルの一部を修正します。ファイルの編集にはviエディタを使います。

  1. /rootディレクトリへ移動します。
    # cd /root
  2. viエディタでlinphonercファイルを開きます。
    # vi linphonerc
  3. 9行目「contact=sip:KCB3@192.168.0.224」を修正します。「contact=sip:KCB3」部分はそのままで、「192.168.0.224」の部分をお使いのKCB-3WLのIPアドレスに修正してください。
    例: contact=sip:KCB3@192.168.1.100
  4. ESCキーを押して、「:」「w」「q」を連続で入力し、ENTERキーを押すとファイルを保存してviエディタは終了します。

簡易マニュアルを用意しましたので、詳しい使い方はこちらを参照してください。

>> vi簡易マニュアル(ここをクリック

3.メモリー領域を広げる

KCB-3WLではRAMをディスク代わりに使用していますが、音声データと画像データを同時に使う場合はRAMエリアを広げる必要があります。ここではviエディタでスタートアップファイル「/etc/init.d/rcS」を修正することで、メモリー領域を広げます。

  1. /etc/init.dディレクトリへ移動し、viエディタでmtabファイルを開く
    # cd /etc/init.d
    # vi rcS
  2. 122行目「mount -t tmpfs -o size=8M tmpfs /tmp」の行は/tmpディレクトリとしてRAMを8MB使用する設定ですので、これを4MBに減らします。
    mount -t tmpfs -o size=4M tmpfs /tmp (8Mを4Mに変更しディスク領域を減らす)
  3. 変更を有効にするため、いったん再起動してください。
    # reboot
  4. freeコマンドを使うと現在のメモリー状況を確認することが出来ます。

    # free

                     total         used         free       shared      buffers
         Mem:        14072         6216         7856            0            0
        Swap:            0            0            0
       Total:        14072         6216         7856

4.linphoneソフトウェアを使う

KCB-3WLで音声データ通信をするには、KCB-3WLで音声デバイスを認識させてから、linphoneサーバーを起動します。サーバーを起動する前にクライアントソフトウェアを準備をします。下の設定はWindows用のものです。

クライアントソフトウェアの準備

  1. linphoneソフトウェアをインストールします。
  2. linphoneソフトウェアを起動し、Linphoneメニューから「設定」を選び次の設定をします。
  3. Multimediaタブで、Playback device(音声再生デバイス)、Ring device(ベルが鳴るデバイス)、Capture device(マイク)をシステムに合わせて設定します。Skypeフォンを持っている場合はSkypeフォンで使用しているデバイスを設定します(画面はWindows XP)。

    linphone_multimedia_tab
     
  4. 同じタブの「Enable echo cancellation」にチェックを入れておきます。
  5. codecsタブを開き、「PCMU 8000」以外のcodecを全て使用しないようにセットします。

デバイスドライバーの設定

KCB-3WLでWEBカメラのマイクを認識するように設定します。

  1. KCB-3WLを起動し、rootユーザーでログインします。
  2. マイク付WEBカメラをUSBコネクタへ接続します。起動前に接続していてもかまいません。
  3. 次のコマンドでカーネルモジュールのデバイス依存ファイルを再設定します(最初の一回だけ)。
    # depmod
  4. modprobeコマンドで、WEBカメラのマイクを認識させます(KCB-3WLを起動するごとに実行)。
    # modprobe snd-usb-audio
    # modprobe snd-pcm-oss
  5. デバイスファイルを作成します。デバイスファイルとはハードウェアのアクセスをファイルの読み書きに置き換えるものです。マイク付WEBカメラを取り付けた状態で、(4)の実行後に次のコマンドを入力してください(最初の一回だけ)。
    # mdev -s

    下記のファイルができあがります。
        /dev/mixer        (c 14 0)
       /dev/dsp     (c 14 3)
       /dev/audio        (c 14 4)
       /dev/pcmC0D0c     (c 116 24)
       /dev/pcmC0D0p     (c 116 16)


次回起動時からは(4)だけを行ってください。/etc/init.d/rcWに書き込むと起動時に自動実行します。

linphoneサーバーの起動

  1. KCB-3WLを起動し、マイク付WEBカメラを取り付け、modprobeコマンドでカーネルモジュールをカーネルに取り付けます(上の「デバイスドライバーの設定」の(4))
  2. 次のコマンドでlinphoneサーバーを起動します
    # cd /root
    # ./linphonec -c linphonerc -a
    (-aオプションを付けると着信時に自動接続する)
  3. linphoneクライアントソフトウェアを起動します。
  4. SIPアドレス欄に、「2. ライブラリのインストール>5) 設定ファイルを修正する>(c)」で設定したSIPアドレス(下記例ではKCB3@192.168.1.100)を入力します(画面はWindows XP)。

    linphone_SIP_address
     
  5. linphoneソフトウェアの「Start Call」ボタン(左上の緑の吹き出しに受話器のマーク)を押すとKCB-3WLとつながり、音声での通話が可能になります。接続に成功すると、KCB-3WLでは次のようなメッセージが表示されます。

    --------------
    ~ # ./linphonec -c linphonerc -a
    NLS disabled.
    Ready
    Warning: video is disabled in linphonec. Run with -V option to enable it.
    linphonec> <sip:toto@192.168.1.6> is contacting you.
    -------auto answering to call-------
    Connected.
    --------------

 

応用

今回はWEBカメラのマイク機能だけを使いましたが、KCB-3WLにUSBスピーカーを接続すると通話ができます。マイクとスピーカーをセットで使う場合はハウリングなどがおきる恐れがありますので、注意してください。また、通話にはPC側にもマイクが必要となります。

WEBカメラ+USBスピーカーなど2つ以上の音声デバイスを使用する場合は、USBハブが必要です。また、追加でデバイスを使用する際は、再度「mdev -s」コマンドを実行し、デバイスを使用するために必要なデバイスファイルを作成してください。複数の音声デバイスを使う場合は、KCB-3WLではデバイスがはじめに見つかった方が優先されます。先に付けた(認識された)デバイスが「/dev/dsp」、後び付けた(認識された)デバイスが「/dev/dsp1」とデバイスファイルに割り当てられます。例えば、USBスピーカー(playback_dev)を先に取り付け、WEBカメラのマイク(capture_dev)を後から取り付けた場合は、linphonercファイルを下のように書き換えてください。

playback_dev_id=OSS: /dev/dsp
ringer_dev_id=OSS: /dev/dsp
capture_dev_id=OSS: /dev/dsp1

カメラの画像も一緒に送りたい場合は、いつものようにuvc_streamコマンドを使います。linphoneを起動する前に、バックグラウンドで起動しておいてください。ただし今回はデータ量が多いため、解像度は320x240、フレーム数は5フレームくらいにする必要があります。このあたりはネットワークトラフィック次第ですので、ご利用状況に合わせて修正をしてください。

Android携帯(Sony Xperia)やiPhoneを使う場合は、アンドロイドマーケットやiTune Appsなどからlinphoneソフトウェアをダウンロードしてください。linphoneソフトウェアの設定はPCでの設定と全く同です。

今回確認したデバイス

CREATIVE

Logicool

Buffalo

アクロス

 

謝辞 

今回の記事作成には神奈川工科大学 ロボット・メカトロニクス学科兵頭和人教授のご協力いただきました。どうもありがとうございました。

 

KCB-4WLの詳細をみる