2015年3月22日日曜日

Asteriskに関するメモ

ここ最近はAsteriskいじりが日課になっています。
自らのスキルアップと同時に、それがそのまま音質の向上に繋がります。
これはやっていて非常に楽しいです♪


AsteriskでIP-PBXを構築する上で、障壁となりそうなことを備忘録として残します。
大まかですが、以下のようなことです。
  • メモっておかないと忘れてしまうようなこと。
  • 日本のサイトでは情報を得られなかったこと。
  • 試行錯誤でやっと結果が得られたもの。
  • 頑張っても結果が得られないもの。

    なお、これは本当に私用のメモです。
    わかりやすく書いているわけではないので、参考にされる方がいたらごめんなさい。


    【 「Raspberry Pi(B+と2B)」にインストールした「Asterisk」に「G.729a」を対応させる(無料) 】

    Raspberry PiはARM系CPUのため、バイナリ配布型のG729aが使えない。
    そのため、専用コンパイラを用いて、G729をインストールする。
    さらに、本来有料であるはずのG729はこれで無料となる。(ロイヤリティフリーのものを使う。)

    ●「Raspberry Pi B+」編
    Asteriskインストール後
    apt-get install dh-autoreconf
    cd /tmp

    <bcg729のインストール>
    wget http://download-mirror.savannah.gnu.org/releases/linphone/plugins/sources/bcg729-1.0.0.tar.gz
    tar xzf bcg729-1.0.0.tar.gz
    cd bcg729-1.0.0
    ./configure --libdir=/lib
    make
    make install

    <G729のインストール>
    cd ..
    wget http://asterisk.hosting.lv/src/asterisk-g72x-1.2.tar.bz2
    tar xjf asterisk-g72x-1.2.tar.bz2
    cd asterisk-g72x-1.2
    ./autogen.sh
    ./configure --with-bcg729
    make
    make install

    asterisk -vvvvr
    core restart gracefully


    ●「Raspberry Pi 2B」編
    Asteriskインストール後
    apt-get install dh-autoreconf
    cd /tmp

    <bcg729のインストール>
    wget http://download-mirror.savannah.gnu.org/releases/linphone/plugins/sources/bcg729-1.0.0.tar.gz
    tar xzf bcg729-1.0.0.tar.gz
    cd bcg729-1.0.0
    ./configure --libdir=/lib
    make
    make install

    <G729のインストール>
    cd ..
    wget http://asterisk.hosting.lv/src/asterisk-g72x-1.2.tar.bz2
    tar xjf asterisk-g72x-1.2.tar.bz2
    cd asterisk-g72x-1.2
    ./autogen.sh
    ./configure --with-bcg729

    出来上がった「Makefile」を編集する
    205行目「-march=」を「-march=armv7-a」に編集

    make
    make install

    asterisk -vvvvr
    core restart gracefully



    【 Asterisk11で3Gモデム(Chan_dongle)を使う 】

    <Asterisk11のインストール>
    cd /usr/src
    wget http://downloads.asterisk.org/pub/telephony/asterisk/old-releases/asterisk-11.16.0.tar.gz

    (11.16.0にした理由は、11系のひかり電話対応パッチ導入可能な最終Verのため。)

    tar zxvf asterisk-11.16.0.tar.gz
    cd asterisk-11.16.0
    ./contrib/scripts/install_prereq install
    (Windowが出てきたら「81」を入力) ※30分ぐらい時間がかかるかも。
    ./bootstrap.sh
    ./configure
    make
    make install
    make samples
    make config

    <Asterisk11対応Chan_dongleのインストール>
    cd /usr/src
    wget https://github.com/jstasiak/asterisk-chan-dongle/archive/asterisk11.zip
    unzip asterisk11.zip
    cd asterisk-chan-dongle-asterisk11
    aclocal
    autoconf
    automake -a
    ./configure
    make
    make install
    cp etc/dongle.conf /etc/asterisk/



    【 Asterisk12で3Gモデム(Chan_dongle)を使う(失敗) 】

    <Asterisk12のインストール>
    cd /usr/src
    wget http://downloads.asterisk.org/pub/telephony/asterisk/old-releases/asterisk-12.8.1.tar.gz

    tar zxvf asterisk-12.8.1.tar.gz
    cd asterisk-12.8.1
    (Windowが出てきたら「81」を入力) ※30分ぐらい時間がかかる。
    ./bootstrap.sh
    ./configure
    make
    make install
    make samples
    make config


    <Asterisk12対応Chan_dongleのインストール>
    cd /usr/src
    wget https://github.com/superles/chan-dongle-asterisk12/archive/master.zip
    unzip master.zip
    cd chan-dongle-asterisk12-master
    aclocal
    autoconf
    automake -a
    ./configure
    make
    make install
    cp etc/dongle.conf /etc/asterisk/

    通話不可



    【 Asterisk13で3Gモデム(Chan_dongle)を使う(失敗) 】

    Asterisk12と基本的なやり方は同じ。
    chan_dongleは作者によって2つ存在する。
    が、そのどちらも未完成に思える。もしくはARM系に対応していないか(?)

    以下からダウンロード可能。

    novaktmp氏作
    https://forum.openwrt.org/viewtopic.php?id=54343

    rusxakep(Mikhail Baykov)氏作
    https://github.com/rusxakep/asterisk-chan-dongle/tree/asterisk13



    【 ひかり電話対応パッチを当てる 】

    Asterisk1.8系と11系でそれぞれパッチ適用可能な最終バージョンを検討する。
    say.cとapp_voicemail.cはついで。

    <ひかり電話対応最終バージョン(Asterisk1.8)>
    cd /usr/src
    wget http://downloads.asterisk.org/pub/telephony/asterisk/old-releases/asterisk-1.8.27.0.tar.gz
    tar xzvf asterisk-1.8.27.0.tar.gz
    cd asterisk-1.8.27.0
    wget http://ftp.voip-info.jp/asterisk/patch/local/1.8/channels/chan_sip.rt200ne.110205-01.patch
    wget http://ftp.voip-info.jp/asterisk/patch/1.8.20.1/say.c.101025-01.patch
    wget http://ftp.voip-info.jp/asterisk/patch/1.8.20.1/app_voicemail.c.101025-01.patch
    patch -p0 < chan_sip.rt200ne.110205-01.patch ←なんか出ても「y」で。
    patch -p0 < say.c.101025-01.patch
    patch -p0 < app_voicemail.c.101025-01.patch

    <ひかり電話対応最終バージョン(Asterisk11)>
    cd /usr/src
    wget http://downloads.asterisk.org/pub/telephony/asterisk/old-releases/asterisk-11.16.0.tar.gz
    tar xzvf asterisk-11.16.0.tar.gz
    cd asterisk-11.16.0
    wget http://ftp.voip-info.jp/asterisk/patch/local/11/channels/chan_sip_rt200ne.141204-01.patch
    wget http://ftp.voip-info.jp/asterisk/patch/11.13.0/say.c.121107-01.patch
    wget http://ftp.voip-info.jp/asterisk/patch/11.13.0/app_voicemail.c.121107-01.patch
    patch -p0 < chan_sip_rt200ne.141204-01.patch ←なんか出ても「y」で。
    patch -p0 < say.c.121107-01.patch
    patch -p0 < app_voicemail.c.121107-01.patch



    【 AsteriskにBluetoothケータイを直接収容する(Chan_mobile) 】

    Asteriskインストール時に「make menuselect」よりChan_mobileは有効にしておく。

    BTドングル 挿す

    apt-get install bluetooth bluez libbluetooth-dev bluez-utils blueman

    ラズパイに挿したBTドングル情報の確認
    hcitool dev

    Devices:
    hci0 00:19:86:00:08:**

    周辺のBTデバイスのスキャン
    hcitool scan

    Scanning ...
    A0:DD:E5:42:DB:** WS027SH
    AC:9E:17:09:CF:** Nexus Player

    ペアリング
    bluez-simple-agent hci0 A0:DD:E5:42:DB:**
    これがラズパイが接続しに行くコマンド
    接続に失敗することが多々あるが粘る

    hciconfig hci0 piscan
    bluetooth-agent 0000
    こっちがラズパイが接続待ちになるコマンド

    Ctrl+zで待受状態脱出
    /etc/init.d/bluetooth restart


    ペリングしたBTデバイスと自動接続
    bluez-test-device trusted A0:DD:E5:42:DB:** yes
    bluez-test-input connect A0:DD:E5:42:DB:**

    chan_mobileの設定
    nano /etc/asterisk/chan_mobile.conf

    [adapter]
    id=WS027SH
    address=A0:DD:E5:42:DB:**



    【 Asteriskの日本語音声対応 】

    自動応答させる際などに使う。(IVR)

    nano /etc/asterisk/asterisk.conf
    languageprefix = yesのコメントアウトを外す。

    sip.confに以下追加
    [general]
    language=ja

    cd /tmp
    wget http://ftp.voip-info.jp/asterisk/sounds/1_6/asterisk-sound-jp_16_pre.tar.gz
    tar xzvf asterisk-sound-jp_16_pre.tar.gz

    ・Asterisk1.8
    mv ja/ /usr/share/asterisk/sounds/

    ・Asterisk11
    mv ja/ /var/lib/asterisk/sounds/



    【 擬似ビジー音と切断音の導入 】

    これは結構重用。
    内線通話ではビジー及び切断が非常にわかりにくいため、これを擬似的に自分で鳴らしてしまう。
    「プーップーップー・・・・プツ」ってやつ。

    ・Asterisk1.8
    cd /usr/share/asterisk/sounds/ja

    ・Asterisk11以降
    cd /var/lib/asterisk/sounds/ja

    wget https://sites.google.com/site/azukarijo2/busy-sound.gsm
    wget https://sites.google.com/site/azukarijo2/disconnect-sound.gsm

    extensions.confに、鳴らしたい場所で以下のように記載。
    (「_0.」のところは適宜変更)

    (例)
    exten => _0.,n,Playback(busy-sound)
    exten => _0.,n,Playback(disconnect-sound)
  • 2015年3月3日火曜日

    音声コーデックの聴き比べ(G711,G722,G726,G729a,GSM,iLBC,Speex,Opusの比較)

    IP電話(VoIP)に使われる主要な音声コーデックを、聴き比べ出来るようにしました。




    いつもは、わざと環境ノイズを含めて、実際の使用環境に近づけようとしていました。
    しかし、今回は違います。

    音声コーデックの本来の音質を知るために、環境ノイズをすべて除去しました。

    なお、元となる音声データを、該当コーデックで再圧縮したわけではありません。
    適切に、VoIPを通じて相手方に届いた音声データを録音しています。



    【 検証した音声コーデックについて 】

    以下の音声コーデックの検証を行いました。
    それぞれのコーデックの特徴などはWikiをご覧ください。(リンク先はWiki)

  • G711(u-Law)
  • G722
  • G726
  • G729a
  • GSM
  • iLBC
  • Speex
  • Opus(Wide)
  • Opus(Narrow)



  • 【 検証環境 】

    音質については自分がどう聞こえるかより、自分の声が相手にどのように聞こえているかが重要なため、それを掲載します。
    なお、実際の使用環境に近づけるため、エアコンの音やパソコンの風切音など、環境ノイズのある状態で試験しています。
    また、パソコンのスピーカから出る音をスマホのマイクで拾っていますので、どうしても音質は悪くなります。


    今回は、スマホにライン入力した音声より録音しました。
    つまり、環境ノイズの影響を一切受けない状況での試験ということになります。
    なお、PCのサウンドカードは良質のものを使っていますので、それが原因でノイズが乗るということはないと思います。


    [使用SIPクライアント]
  • Zoiper IAX SIP VOIP Softphone

    [検証機器]
  • WX12K(GP-712と接続)
  • L-01F(Asteriskに接続)

    [回線種別]
  • Wi-Fi(au光回線)

    [録音環境]
  • 「FUSION IP-Phone SMART」の留守電(128kbps RIFF-WAVE)

    [音声の元データ]




    【 検証結果 】

    ※ 使用帯域には理論値ではなく、実際に使う帯域を掲載しています。
      理論値を知りたい場合は、前述のWikiをご覧ください。


    検証結果について、今回は私の意見を述べません。
    Wikiを読んで、理論的に優れた音声コーデックを選択するのも良いですし、実際にこれらの音声データを聞いてみて、「自分はコレが好きだ!」というものを選んでも良いと思います。
    今回、環境ノイズがない環境下で検証してみて、それぞれの音質の特徴から本当にそのように思いました。


    コーデック 音質 使用帯域
    送信 受信
    G711(u-Law)

    84 kbps 83 kbps
    G722

    83 kbps 83 kbps
    G726

    52 kbps 52 kbps
    G729a

    28 kbps 28 kbps
    GSM

    33 kbps 33 kbps
    Speex

    29 kbps 31 kbps
    iLBC

    27 kbps 27 kbps
    Opus(Wide)

    40 kbps 40 kbps
    Opus(Narrow)

    35 kbps 30 kbps
  • 2015年2月28日土曜日

    カケホを契約していない端末でカケホを利用する【つなぐ】

    Bluetooth-VoIPゲートウェイから始まった【つなぐ】ですが、いまやその種類が増え、開発中のものを含め、4種類となりました。
    種類が増えることは良いことなのですが、それだけ一つ一つが分かり辛くなってきます。




    そこで、複数ある【つなぐ】について整理をしたいと思います。


    【 「つなぐ」とは何か? 】

    以前は、『話し放題を契約したガラケーを、スマホから利用できるようにすること』と、説明していました。
    しかし、現在は3G版【つなぐ】や、アプリ版【つなぐ】があることから、その説明が合わなくなってきました。
    今の【つなぐ】は、次のような説明がしっくり来ると思います。

    『話し放題を契約してない端末から、話し放題を利用すること』


    なお、今までの【つなぐ】に関する記事は、ブログ右側(スマホサイトの場合は一番下)のメニュー「つなぐ」からご覧ください。



    【 4種類の異なる「つなぐ」 】

    現在は以下の4種類の【つなぐ】が存在します。

  • BT-GW版【つなぐ】
  • 3G版【つなぐ】
  • BT版【つなぐ】
  • アプリ版【つなぐ】


    「BT-GW版」、「3G版」、「BT版」【つなぐ】は、VoIPを利用します。
    アプリ版【つなぐ】はキャリア回線(PSTN)を利用します。
    まずは、これが大きな違いとなります。

    各【つなぐ】は、それぞれ特徴が異なりますので、簡単に説明していきます。
    なお、金額の紹介では、月々サポートや各種キャンペーンは除外した料金としています。


    ◆ BT-GW版【つなぐ】
    Bluetooth-VoIPゲートウェイとIP-PBXにより構成されます。
    これと、話し放題を契約したケータイをBluetooth接続することで実現します。
    常時持ち歩く端末はスマホ1台のみです。
    なお、発信者番号は、話し放題回線の番号が通知されます。


    <メリット>
  • 理屈上、PHS含めどのキャリアでも収容できる。

    <デメリット>
  • 高価

    <月額費用>
    話放題回線料(¥1500~2200)
    MVNO料金(¥1000程度から)

    例)1人で利用した場合
      2200+1000=¥3200

    例)5人が個々に使った場合(カケホを2200円として計算)
      (2200+1000)×5=¥16000

    例)5人でシェアした場合
      2200+(1000×5)=¥7200


    ◆ 3G版【つなぐ】
    3Gモデム(話し放題SIM入り)が接続されたIP-PBXのみで構成されます。
    常時持ち歩く端末はスマホ1台のみです。
    なお、発信者番号は、話し放題回線の番号が通知されます。


    <メリット>
  • 音声SIMカードをUSBモデムに直接差し込むため、別途ケータイを必要としない。
  • 導入費がBT-GW版【つなぐ】の約半額。

    <デメリット>
  • 使えるSIMはドコモとソフトバンク(Y!mobileの3G含む)のみ。

    <月額費用>
    話放題回線料(¥2200)
    MVNO料金(¥1000程度から)

    例)1人で利用した場合
      2200+1000=¥3200

    例)5人が個々に使った場合(カケホを2200円として計算)
      (2200+1000)×5=¥16000

    例)5人でシェアした場合
      2200+(1000×5)=¥7200


    ◆ BT版【つなぐ】
    話し放題ケータイとBluetooth接続されたIP-PBXで構成されます。
    常時持ち歩く端末はスマホ1台のみです。
    なお、発信者番号は、話し放題回線の番号が通知されます。

    <メリット>
  • 理屈上、PHS含めどのキャリアでも収容できる。
  • 導入費がBT-GW版【つなぐ】の約半額。

    <デメリット>
  • 非常に相性が強く、そのケータイを収容可能かどうかはやってみるまで分からない。(高確率で収容できない。)
  • LinuxとケータイとをBTペアリングさせる知識を要する。

    <月額費用>
    話放題回線料(¥1500~2200)
    MVNO料金(¥1000程度から)

    例)1人で利用した場合
      2200+1000=¥3200

    例)5人が個々に使った場合(カケホを2200円として計算)
      (2200+1000)×5=¥16000

    例)5人でシェアした場合
      2200+(1000×5)=¥7200


    ◆ アプリ版【つなぐ】
    今までの【つなぐ】とは異色の存在。
    話し放題回線の転送先を変更することにより、別の端末から無料発信が可能。
    家族間無料通話と話し放題回線とを組み合わせることにより実現する。
    上記操作をアプリで自動化することにより、シームレスな発信を行う。
    なお、発信者番号は話し放題回線の番号ではなく、アプリを入れた端末の電話番号が通知される。


    <メリット>
  • キャリア回線を使うため、安定した通話が可能。
  • 初期導入費が安価。
  • 発信者番号を自分の持つ(話し放題ではない)ケータイの電話番号にできる。
  • 着信時は話し放題回線を経由しない。

    <デメリット>
  • 発信するまでに少し時間がかかる。
  • 2台持ちになる。(通信不要であれば、ガラケーのみで1台持ち可)
  • ソフトバンク未対応。
  • (開発中のためまだ利用できない。)

    <月額費用>
    話放題回線料(¥2200)
    au最安料金プラン+Eメール(ガラケー:¥1043 スマホ:¥1234)
    MVNO料金(¥1000程度から)
    アプリ利用料(¥84)

    例)2人で利用した場合(1人で利用は無意味なので2人を掲載)
      2200+(1043~1234+1000+84)×2=¥6454~¥6836

    例)5人でシェアした場合
      2200+(1043~1234+1000+84)×5=¥12835~¥13790



    【 「つなぐ」の選び方 】

    まず、理解して頂いきたいのが、音質についてです。
    音質と言っても、音のキレイさではありません。
    「音声が途切れない」などの品質になります。

    「BT-GW版」、「3G版」、「BT版」はすべてVoIPと呼ばれる技術を用いて通話します。
    VoIPでの通話は、9割は完璧です。
    しかし、残りの1割(電波の弱い場所など)は通話相手がかなり聞き取りづらい状況となります。

    よって、この1割をも網羅するためには「アプリ版【つなぐ】」が必須となります。『VoIP版【つなぐ】』(※)は向きません。

    まず、以上が大前提となります。それを踏まえた上で、以降の導入編をお読みください。


    【つなぐ】を選ぶ上でまず必要なことは、導入費及び月額料金、そして用途です。

    導入費などの金額は、キャリアの施策によって大きく変動します。
    よって、ここでは金額については触れず、用途別に【つなぐ】の選び方の一例を紹介します。
    なお、それぞれの【つなぐ】で何ができるか?ではなく、「○○にはどの【つなぐ】が向いているか?」の形式で紹介したいと思います。


    ※ ここでは「BT-GW版」、「3G版」、「BT版」【つなぐ】を総称して、『VoIP版【つなぐ】』と言います。



    ◆ スマホの2台持ちになっても構わない。・・・アプリ版【つなぐ】

    ◆ 2台持ちは嫌だ、1台持ちにしたい。・・・VoIP版【つなぐ】

    ◆ 回線をシェアして且つ、発信者番号をそれぞれ異なるものとしたい。・・・アプリ版【つなぐ】

    ◆ キャリアの契約を極力減らしたい。・・・VoIP版【つなぐ】

    ◆ 家の固定回線が遅い、もしくは不安定。・・・アプリ版【つなぐ】

    ◆ 利用は自分一人。用途はプライベート。・・・VoIP版【つなぐ】

    ◆ とにかく安くすることが目的。安ければ大抵のことは許容できる。・・・VoIP版【つなぐ】



    【 まとめ 】

    スマホの2台持ちになっても構わない人や、VoIPが嫌な人は、アプリ版【つなぐ】がお勧めです。
    スマホやケータイの2台持ちから開放されたい、スマホ1台に集約したいという人は、VoIP版【つなぐ】がお勧めです。

    しかし、アプリ版【つなぐ】は現在まだ開発中です。(BitBadOldMan氏による)
    開発が完了した時点であらためて紹介するとともに、BitBadOldMan氏への利用申込手段も考えたいと思います。


  • アプリ版【つなぐ】オーダーフォームへ(未設置)

  • VoIP版【つなぐ】オーダーフォームへ(提供終了)



    VoIP版【つなぐ】は多少の英語とLinuxの知識さえあれば、自分でも製作可能です。
    上記のVoIP版【つなぐ】オーダーは自分で作れない人のために、私が一式製作してお送りするものです。
    可能であれば、自分で楽しみながら作ることをお勧めします。

    なお、アプリ版【つなぐ】も、プログラムが書ける人(スマホアプリが作れる人)であれば制作可能です。
    しかし、学生時代に友人の書いたプログラムを、丸写しして提出していたような私にはさっぱりわかりません\(^o^)/
  • 2015年2月26日木曜日

    IP電話(VoIP)に最適なSIPクライアント「Zoiper」

    行き着くところまで行き着いた気がする【つなぐ】ですが、まだまだ満足できず、いまだに色々と検証をすすめています。
    先日は電子レンジにスマホ入れて、電波の遮断試験なんてこともしていました。

    そのようなテストも、SIPクライアントの中では最強だと思っていたAcrobits社の「Groundwire」で行っていました。
    しかし、Android環境においては圧倒的なまでに、「Zoiper」の方が高音質であることがわかりました。




    今回は、その「Zoiper」(正式名称:Zoiper IAX SIP VOIP Softphone)について紹介したいと思います。

    ※【つなぐ】については以下の記事をご覧ください。
    ガラケー(話し放題)と、スマホ(MVNO)を【つなぐ】>(概要説明)
    MVNO(データSIM)で「話し放題」を実現する 【つなぐ】>(設定紹介)



    【 SIPクライアントについて 】

    SIPクライアントとは、IP電話などのVoIPを使う際には、必須となるアプリです。
    このアプリの性能が、音質や使い勝手に大きく影響します。

    高音質なSIPクライアントとしては以下の2つが有名です。
  • CSipSimple
  • Acrobits社製品全般(SoftphoneやGroundwireなど)

    この他にも、もちろん高音質なSIPクライアントもあるのですが、大抵何かが足りません。
    電池持ちだったり、使い勝手だったり・・・。
    すべてを兼ね備えたものとしては、やはり先の2アプリが最高で・・・した。“いまの”「Zoiper」を知るまでは。



    【 Zoiperについて 】

    「Zoiper」(正式名称は「Zoiper IAX SIP VOIP Softphone」)

    これはAndroid版からiPhone版、Windows版まであるかなり有名なアプリです。
    このブログでも今まで、幾度も「Zoiper」を検証してきました。
    検証している中、高音質なアプリだとは思っていましたが、それでも「CSipSimple」や「Acrobits Groundwire」には及びませんでした。

    しかし、「Zoiper」の更新頻度は早いです。
    積極的に開発を行い、不具合解消とともに高音質化にも務めていたようです。
    私の知らぬ間に、「Zoiper」はものすごい高音質なSIPクライアントへと変貌していました。

    また、高音質なだけでなく、電話帳からの発信も可能で、かつ面倒な回線の切替作業も必要としません。
    発信時に使用回線が選べるタイプなので、非常に使い勝手が良いです。



    【 音質の検証 】

    これ以上Zoiperについて語っても仕方がありませんので、早速、音質の検証を行います。

    音質については自分がどう聞こえるかより、自分の声が相手にどのように聞こえているかが重要なため、それを掲載します。
    なお、実際の使用環境に近づけるため、エアコンの音やパソコンの風切音など、環境ノイズのある状態で試験しています。
    また、パソコンのスピーカから出る音をスマホのマイクで拾っていますので、どうしても音質は悪くなります。

    そのあたりを考慮して音声データは聞いてください。
    (それでも、各SIPアプリの傾向は掴めるため、参考になると思います。)

    検証対象は以下のSIPクライアントとします。
  • Zoiper IAX SIP VOIP Softphone
  • Acrobits Groundwire
  • CSipSimple


    [検証環境]
  • WX12K(GP-712とBT接続済)
  • L-01F(Asteriskに接続)
  • SH-07D(遅延計測用 ドコモ音声SIM使用)

    [回線種別]
  • Wi-Fi(光回線)
  • LTE(ドコモ)

    [使用コーデック]
  • iLBC

    [録音環境]
  • 「FUSION IP-Phone SMART」の留守電(128kbps RIFF-WAVE)

    [遅延測定条件]
  • 「L-01Fから音声を発信してから、SH-07Dがそれを受信する」までのタイムラグの測定

    [音声の元データ]


    [検証結果]

    SIPクライアント 音質 遅延時間
    Wi-Fi LTE
    Zoiper

    353ms 423ms
    Acrobits Groundwire

    301ms 392ms
    CSipSimple

    478ms 369ms



    ◆ Zoiper の検証

    [音質]

    ザラザラした音の中に、さらに若干のノイズが混じっています。
    お世辞にも「高音質」とは言えません。
    実際にリアルタイムに耳で聞いてみても、あまり良い音質とは言えませんでした。

    遅延時間については問題ありません。Groundwireには及びませんが、十分高速です。

    ただ、やはり音が汚いのが気になります。
    これは同一環境で何度試験しても、このような結果となりました。

    しかし、なぜか通常の音声通話においては、非常にスムーズな会話が可能です。
    また、ゲームセンターのような騒々しい場所での通話も可能でした。


    [使い勝手]

    最高に使いやすいです。
    電話帳との連携も完璧で、VoIPを使っていることを意識しません。

    また、自前でSTUNサーバを持っているため、NAT超えの設定も非常にシンプルです。
    「STUN」にチェックするだけです。

    なお、3G/LTEとWi-Fiとで、いちいち発信アカウントを切り替える必要もありません。
    発信時に現在接続中のアカウントが簡単に選択できます。



    ◆ Acrobits Groundwire の検証

    [音質]

    バックミュージックが聞こえなくなるぐらいに、元の音質から変化します。
    そのぐらいに「音声部分のみ」取り出そうとしていることがわかります。

    独特の音質なのですが聞き取りやすい音声で、ノイズもありません。
    しかし、なんとなく声が震えているような、文節の始まりと終わりに波があるような、そんな印象はあります。(しかし、実際の会話ではそのようなことは一切ありません。)

    (騒々しい場所での通話は未検証です。)


    [使い勝手]

    電話帳との連携は完璧です。

    しかし、3G/LTEとWi-Fiとでいちいち発信アカウントを切り替える必要があり、これがかなり煩わしく感じます。
    「あれ?なんで発信できなんだ?」と思うと、アカウントの切替を忘れているためだったりします。



    ◆ CSipSimple の検証

    [音質]

    音は若干こもった感じに聞こえますが、一番忠実に音声を再現しているのは、やはりこれです。
    ただし、音声は忠実に再現すれば良いというわけではないため、音質については好みが分かれると思います。

    なお、騒音下においては、その騒音も忠実に再現され、話が聞き取りにくくなります。
    しかし、音声と環境ノイズとが混ざって、消去されてしまうようなこともありません。


    [使い勝手]

    電話帳との連携は完璧です。
    完璧どころか、電話番号によって利用先回線を切替えたり、別途プラグインによりコールバック機能を持たせたりと、様々なことができます。

    まさに、かゆいところに手が届く使い勝手となっています。
    これについては文句なしです。

    しかしネットワークの詳細設定をアカウントごとに変えられない不思議な仕様となっています。
    これが原因で「3G/LTE」と「Wi-Fi」をシームレスに使うことができません。
    (3G/LTEだけかWi-Fiだけかの運用になってしまいます。)



    【 まとめ 】

    今回は「Zoiper」を推奨したくて、本記事を書き始めたのですが、実際に検証してみると、結局は「Acrobits Groundwire」の音質が、頭一つ抜けていることがわかります。

    しかし、「Zoiper」はなぜだか使いやすく感じます。
    まず、相手から自分へ届く音声のクリアさにびっくりします。

    これは、「Groundwire」など比較にならないぐらい高音質です。
    今まで検証したSIPクライアントの中で、最も高音質に感じます。

    実は、Zoiperはこれが理由で「素晴らしく感じているだけ」のプラシーボなのかも知れません。



    なお、今回は取り上げませんでしたが、どんなSIPクライアントを使っても低音質になってしまう「SC-01F」(Galaxy Note3)が、唯一「Zoiper」では高音質で安定させられました。
    この機種が高音質で使えるとなると、他のどんな機種でも安定して使えそうな気がします。

    また、NAT越えもチェック一つで簡単にできます。


    Zoiperの良い所をまとめると以下のとおりです。

  • どんな機種でも高音質になる。(と予想する。)
  • NAT越えに悩まない。
  • 3G/LTEとWi-Fiの切り替えがない。
  • バッテリー消費量が少ない。

    以上のことから、「Zoiper」も「Groundwire」に負けないぐらい優れたSIPクライアントと言えます。
    さらに、これほどの性能を持っていながら、無料であることも非常に評価できます。

    今まではずっと「Groundwire」を使っていましたので、これからはしばらく「Zoiper」を使ってみて、その評価を確実なものにしていきたいと思います。



    [2015.03.02追記]

    【 Zoiperの設定について 】

    本記事を書いてからしばらく「Zoiper」を使っていました。
    結論として、私は「Groundwire」ではなく、「Zoiper」を常用しようと思います。

    なお、「Automatic Gain Control filter」という項目をOffにすることにより、音質が激的に改善しました。
    本記事の検証結果はこの項目が「On」(デフォルト)です。
    これだと音が汚いだけでなく、相手に届く音量が極めて小さくなります。

    以下に理屈ではなく、私の実使用環境において最適であった設定を紹介します。
    (音質やネットワーク及び使い勝手に関する部分のみ抜粋。赤字は音質に影響する部分。)


    <Accounts>
    Enable on start : ON (アカウント有効)
    Audio Codecs Settings : iLBC30 (高速回線であってもこれのみ)
    Network Settings → NAT : キャリアSIMとプライベートIP付与のMVNOは「Use STUN」 それ以外は「No」

    <Audio>
    Echo cancellation : Off (エコーがかからない状況ではOffが良い。)
    Automatic Gain Control filter : Off (On→Off必須)
    Incoming Call Vibration : On (マナーモード以外でもバイブを有効)
    Speaker Gain : 0dB (受話音量調整)
    Use Less CPU(Lower Quality) : Off (低速スマホでもOffで良い。)

    <Connectivity>
    Keep alive WiFi : On (WiFi切断防止)
    Stay awake : On (常時起動)
    Run in background : On (常時着信可能)

    <Advanced>
    Strip .-()[]{}/ in caller-id : On (電話帳から不要な文字列を削除して発信する。)
    Start with Android : On (スタート時起動)
    Dialer integration : On (電話帳連携)
    Use default account : Off (Offにしていると発信時にアカウントが選べる。)
  • 2015年2月22日日曜日

    インストールディスクを無くした「Windows7」をインストールする方法

    PCが不安定になってきたため、Windows7を再インストールすることにしました。

    どうせ再インストールするならということで、元々4GB積んでいたメモリを16GBまで増設します。
    さらに、Windows7の32ビット版から64ビット版に鞍替えすることにしました。

    しかし、私が持っているWindows7は32ビット版のみです。
    32ビット版のWindows7を所持しているにもかかわらず、64ビット版のWindows7を再度購入しなければならないのでしょうか。




    ・・・そういえば、妻が紅茶をこぼしてお亡くなりになったノートPCが「Windows7 Pro」の64ビット版でした。

    しかし、Windowsのインストールディスクなんてとっくに無くしました。
    もう、どこにあるのかわかりません。

    もしかするとHDDの中にリカバリ領域があり、そこから復旧するタイプだったのかもしれません。
    しかし、いずれにしても、そんな領域も妻のこぼした紅茶とともに流れ去りました。



    【 Windows7のプロダクトキーを探す 】

    とりあえず、Windowsのプロダクトキーさえあれば何とかなるだろうと考え、ミルクティーの香りが漂うノートPCを裏返します。
    数か月経ったにもかかわらず、ミルクティーの芳しい香りがします。
    これはアールグレイだな、などと思いつつ、プロダクトキーのシールを探します。

    プロダクトキーのシールは非常にわかりやすい場所に貼り付けられていました。
    まずはこれをメモします。


    ※ プリインストール版のWindowsを他のPCで使うことはライセンス違反となりますのでご注意ください。
      (このあたりの話は難しいので、わからない場合はMicrosoftに聞いてみてください。)



    【 Windows7のイメージを入手する 】

    単純に考えて、Windows7のインストールディスクなんて1枚1枚オリジナルであるはずがありません。
    ということは、何らかの手段でWindows7のイメージさえ入手できれば、先ほどメモしたプロダクトキーでインストールできるはずです。

    Google先生に聞いてみます。
    『Windows7 ダウンロード』っと・・・。

    いっぱい出てきます。
    以下、各種Windows7のイメージファイルのダウンロード先です。

    詳細はわかりませんが、イメージをダウンロードするだけなら合法らしいです。
    不正なライセンスキーの入手、及び使用は違反になります。

  • Windows 7 Home Premium x86 SP1

  • Windows 7 Home Premium x64 SP1

  • Windows 7 Professional x86 SP1

  • Windows 7 Professional x64 SP1

  • Windows 7 Ultimate x86 SP1

  • Windows 7 Ultimate x64 SP1


  • なお、Windows8やWindows8.1であっても、似たような方法で簡単に且つ合法的にインストールディスクが作成可能です。



    【 Windows7をインストールする 】

    Windows7は、Ultimate版以外は標準で日本語に対応していません。
    (通常利用でUltimate版なんて使いません。)

    普通の方法では、Ultimate版以外は日本語化できません。

    そこで、普通ではない方法でUltimate版以外の「Home Premium」及び「Professional」を日本語化する方法を考えます。
    なお、この方法で日本語化されたWindows7は、通常の日本語版のWindows7と全く同一のものになります。


    まずは、上記リンクよりダウンロードしたWindows7を、DVDメディアに焼くなどして、普通にインストールします。
    なお、プロダクトキーには、先ほどメモしたものを使います。

    インストール中のキーボード選択や時間設定は日本の環境に合わせます。


    ※ インストールメディアには何種類かあるようで、持っているプロダクトキーが通らない場合もあります。
    そうした場合は、上記インストールイメージ以外を探して試してみてください。
    実際、上記イメージでは、私の所有するWindows7のうちの1つが、通りませんでした。



    【 Windows7を日本語化する 】

    ここでは「Windows7 Professional x64」を例にして話を進めます。
    まず、前述の手順によりWindows7がインストールできていることを前提とします。

    まずは、日本語言語データを用意します。

    これはMicrosoftからDLできるものなのですが、多言語パックをダウンロードして、そのイメージでインストールメディアを作って、それから日本語部分だけを抽出して・・・
    と、かなり面倒くさい作業が必要になります。

    そのため、自分用として抽出済みのものを作成したので、もし使いたい方がいたらこれを使ってください。
  • Windows7用日本語言語パック


    管理者権限でコマンドプロンプトを開きます。
    スタートメニュー → All Programs → Accessories → Command Prompt  右クリック Run as administrator



    以下のコマンドを入力します。
    「E:\langpacks\ja-jp\lp.cab」には先程の「Windows7用日本語言語パック」の保存先を指定します。

    dism /online /add-package /packagepath:E:\langpacks\ja-jp\lp.cab


    以下のような画面になり・・・



    このように表示されれば成功です。

    The operation completed successfully.
    Restart Windows to complete this operation.
    Do you want to restart the computer now (Y/N)?


    ここでは「N」を選んで、まだ再起動しません。


    Winキー+R(ファイル名を指定して実行)から以下コマンドを入力します。

    regedit


    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\MUI\UILanguages\en-US
    を削除します。(※)

    ※ 上記の意味がわからない場合は、以下を保存・実行してください。
    なお、これはレジストリの該当部分のサブ・キーを削除する命令ですので、ご利用は自己責任にてお願いします。
  • en2jp.reg

    再起動します。


    スタートメニュー → すべてのプログラム → アクセサリ → コマンド プロンプト  右クリック 管理者として実行
    (すでにしっかりと日本語になっています。)

    以下コマンドを入力します。
    bcdedit /set {current} locale ja-jp
    bcdboot %WinDir% /l ja-jp


    以上で完成です。



    【 余談 】

    (数ヶ月前の話)

    紅茶をこぼした妻は、かなり切羽詰まった顔をしながら私のところに来て言いました。
    (この時、私はまだ妻が紅茶をこぼしたことを知りません。)


    「PCの電源がつかなくなったよ。」

    「え?なんでだろう?」

    「何度電源を入れても画面が付かないの。」

    「うーん・・・。見てみるよ。」

    「・・・さっきね。PCに紅茶がかかったの。そしたら電源が切れたみたい。」

    「えーと・・・?」

    「・・・・ちょっとキーボードの上に紅茶がこぼれたみたいなんだけど、そうしたら電源が切れたの。それからは何度も電源ボタンを押しても動かないよ。」

    「ちょっとこぼしたぐらいなら、乾けばまた動いたりするよ。どっちにしても見てみるね。」


    ノートPCの場所へ移動
    (ああ、確かにちょっと紅茶がこぼれてるわ・・・。)

    私がノートPCを持ち上げてみると、通風口やコネクタの隙間から紅茶が流れ出てきました・・・。
    (ちょっとどころじゃないし!)


    「“ちょっと”こぼしたの?」

    「ちゃんと拭いたよ?」

    「いや、そーじゃなくて・・・、もう一回聞くね。“ちょっと”こぼしたの?」

    「キーボードの上にコップが勝手に倒れたみたい。」

    「コップって勝手に倒れるの?」

    「・・・・倒れるよ?」



    私は一体、何歳児とお話をしているのだろうか・・・。
    ちなみに、この後、ちゃんと妻の「ごめんなさい」が聞けたわけですが、妻の「ごめん」はかなりレアなので、それだけでよしとします(笑)



    余談の余談ですが、ほとぼりが覚めた妻は、
    「ゲームができない。即日中にPCが必要だから何とかせよ。」
    との命令を私に下し、その日のうちにマウスコンピュータ(元本社)でPCを1台買ってきました・・・。

    余談ついでにひとつ、マウスコンピュータのPCはなかなかお勧めです。
    見た目にこだわらなければ、日本で一番コストパフォーマンスが高いと思います。
  • 2015年2月15日日曜日

    Asteriskに最強コーデックの「Opus」を対応させる

    Asteriskに「Opus」を対応させました。
    これにより、超高音質で低遅延な環境が出来上がりました。
    「Opus」については、以前書いた記事<VoIPに音声コーデック「Opus」を使いたい>をご覧ください。




    毎度のことですが、ここに至るまでにはかなりの時間を費やしました。
    しかし、成功してしまうとあっけないもので、難易度はそれほど高くありません。

    今回は、AsteriskにOpusを対応させた備忘録を残します。



    【 環境 】

    ハードウェアには「Raspberry Pi B+」を用い、Linuxディストリビューションには「Raspbian」(Debian)を使いました。
    同様の手順でArchLinuxやFedoraなどにも対応できると思いますが、今回は未確認です。

    また、CuBox-i2(Debian+Asterisk)でも、全く同じ手順でOpusに対応させられました。
    なお、後述する検証結果については、この「CuBox-i2」によるものです。



    【 Asteriskのインストール~Opus対応手順 】

    私はものぐさなのでsudoなどは使わず、すべてrootで作業します。
    
    ●元々Asteriskがインストールされている場合は、まずはそれを削除します。
    apt-get --purge remove asterisk
    rm -r /usr/lib/asterisk/modules
    
    ●パッケージリストを更新します。
    apt-get update
    
    ●開発に必要なパッケージ類などをインストールします。
    apt-get install autoconf automake pkg-config
    apt-get install libncurses5-dev
    apt-get install uuid-dev
    apt-get install libjansson-dev
    apt-get install libxml2-dev
    apt-get install libsqlite3-dev
    apt-get install libssl-dev
    apt-get install libopus-dev
    
    
    ●Asterisk Ver11.9.0をダウンロードして、解凍します。
    cd /usr/src
    wget http://downloads.asterisk.org/pub/telephony/asterisk/old-releases/asterisk-11.9.0.tar.gz
    tar zxvf asterisk-11.9.0.tar.gz
    
    ●AsteriskにOpus対応パッチを当てて、makeします。
    cd asterisk-11.9.0
    wget https://raw.githubusercontent.com/netaskd/asterisk-opus/master/asterisk-11.5.0_opus+vp8.diff patch -p1 -u < asterisk-11.5.0_opus+vp8.diff ./bootstrap.sh ./configure make menuselect (Codec TranslationsにOpusがあることを確認するだけ。省略可。) make make install make samples make config ●再起動後、自動でAsteriskが立ち上がります。 reboot


    【 Asterisk実行ユーザの変更 】

    インストールした直後のAsteriskは、root権限で稼働します。
    これは、セキュリティ上好ましくないため、ユーザに「asterisk」を追加し、そのユーザ権限でAsteriskを実行させます。
    (root権限のまま実行していても、実用上の問題はありません。)
    
    ●「asterisk」というユーザを追加し、権限などの調整をします。
    groupadd -g 5060 asterisk
    useradd -g 5060 -u 5060 -d /var/lib/asterisk -s /sbin/nologin asterisk
    chown -R asterisk:asterisk /var/run/asterisk
    chown -R asterisk:asterisk /var/lib/asterisk
    chown -R asterisk:asterisk /var/log/asterisk
    chown -R asterisk:asterisk /var/spool/asterisk
    chown -R asterisk:asterisk /usr/lib/asterisk
    chown -R asterisk:asterisk /etc/asterisk
    chmod -R u=rwX,g=rX,o= /var/run/asterisk
    chmod -R u=rwX,g=rX,o= /var/lib/asterisk
    chmod -R u=rwX,g=rX,o= /var/log/asterisk
    chmod -R u=rwX,g=rX,o= /var/spool/asterisk
    chmod -R u=rwX,g=rX,o= /usr/lib/asterisk
    chmod -R u=rwX,g=rX,o= /etc/asterisk
    
    ●Asteriskの設定ファイルを編集します。
    nano /etc/asterisk/asterisk.conf
    
    ・以下のコメントアウトを外す。
    [options]
    ;runuser = asterisk
    ;rungroup = asterisk
    ↑
    この2ヶ所の「セミコロン」を削除
    
    ●リブート
    reboot
    
    ●リブート後、ユーザ「asterisk」でAsteriskが稼働しているか確認します。
    asterisk -vvvvr
    
    次のように表示されていれば成功です。
    Running as user 'asterisk'                       
    Running under group 'asterisk'
    
    
    
    【 Opusを使う 】
    
    ●sip.confでOpusの使用を許可します。
    allow=opus
    
    
    これでAsteriskでOpusが使えるようになります。
    
    
    ●「Opus」に対応したSIPクライアントを使います。
    
    Acrobits製の「Softphone」や「Groundwire」、また、フリーでは「CSipSimple」が「Opus」に対応しています。
    


    【 音質の検証 】

    今まで幾度となくチャレンジしてきた「Opus」ですが、やっとその実力を検証できます。
    ただ、今回は音声の録音と遅延の測定ができませんでした。

    これは、何か理由があってできなかったわけではなく、単純に時間的な制約です。
    詳細の検証結果を挙げる前に、まずはAsteriskのOpus対応化を記事にしたく、先行しての投稿です。


    録音や遅延の計測は、また後ほど行いたいと思います。
    まずは言葉だけで「Opus」の音質を説明します。


    「Opus」を扱えるSIPクライアントはあまり多くありませんが、幸いなことに「CSipSimple」と「Acrobits Groundwire」が対応しています。
    この2つのアプリがあれば、他は要りません。この2アプリで十分です。

    まず、これらアプリの比較です。
    同じ「Opus」であっても、「CSipSimple」と「Groundwire」とで音質がかなり異なりました。

    さらに「Groundwire」では使うスマホによっても、かなり音質が異なりました。
    たとえば、SC-01Fでは音質はあまり良くなく、L-01FやSH-07Dはなかなかの音質でした。

    一方、「CSipSimple」はどんな機種を使ってもメリハリのある音質で、音声データから綺麗にノイズが除去されてクリアな音と言うか・・・なんて言うかドライな音質でした。
    これはかなり私好みで、文句のつけようがないレベルでした。


    続いて、トランスコーディングの検証です。

    発信側と着信側で要求するコーデックが異なる際は、リアルタイムに音声変換されます。
    これをトランスコーディングと言いますが、「Opus」からのトランスコーディング(またはその逆)はかなりCPU負荷がかかってしまうのではないかと懸念しました。

    しかし、「Raspberry Pi」と同じARM系CPUを積んだ「CuBox-i2」で、10%程度のCPU負荷となりました。
    ということは「Raspberry Pi」では20%程度の負荷に収まると思われます。
    最近発売された「Raspberry Pi 2」であれば5%程度ではないでしょうか。


    さて、肝心な音質についてですが、「発信側→着信側」の順に、
  • 「Opus」→「Opus」:非常に綺麗で文句なし。
  • 「G711u」→「Opus」:非常に綺麗で文句なし。
  • 「Opus」→「G711u」:非常に綺麗で文句なし。
  • 「Opus」→「iLBC」:宇宙人がしゃべっている感じ

    「Opus」→「iLBC」のトランスコーディングがNGです。
    あまりにもひどい音質で、遅延も3秒ぐらいあります。
    不思議に思い、Asterisk側から確認してみると、それもそのはずで、トランスコーディングに失敗していました。

    これ以外にも、いくつかトランスコーディングに失敗するケースがありました。(自動応答による音声案内など)
    コーデックを「Opus」にして、天気予報を聞くと、ひどい音質となりました。
    なお、この現象はSIPクライアントに依存する部分があるようでしたが、これについては検証しきれませんでした。


    続いて、遅延の計測ですが、これはいつもの様に波形から遅延時間を計測したわけではありません。
    あくまでも体感です。そのため、あまり当てになりませんので、参考程度としてください。

    まず、トランスコーディングに失敗しない限り、今までにないぐらい低遅延です。
    SH-07Dという超低スペック機種でも遅延に影響しないぐらい、スマホへの負荷も少ないです。

    ただ、SC-01F(ギャラクシーノート3)だけはあまり低遅延とは思えませんでした。(この機種だけはiLBCのほうが高音質・低遅延でした。)


    最後に使用帯域について触れたいと思います。

    Linuxの機能(iftop)を用いて主要コーデックの使用帯域を測定しました。
    Opusを使った場合は、26~30kbpsの回線速度を必要としました。

    《主要コーデックによる使用帯域一覧》
    コーデック 使用帯域
    G711u : 78kbps
    iLBC
     : 23.6kbps
    Opus
     : 26~30kbps(可変)
    GSM
     : 28.7kbps

    やはりG711uはかなりの帯域を必要とします。
    これを見ると、やはり3G/LTE回線下では「Opus」や「iLBC」などの音声コーデックの必要性を感じます。


    今回の検証はこれで終わります。



    【 感想 】

    「Opus」自体は現時点で間違いなく最強の音声コーデックです。
    しかし、Asteriskは最新バージョンの13であっても「Opus」に正式対応していません。
    そのためか、トランスコーディングに失敗するケースがあったりと、まだまだ不安定な一面もあります。

    正直な感想としては、どんなに「Opus」が素晴しかろうが、周りがそれを活かせていないように感じました。


    今後Asteriskが「Opus」に正式対応することがあれば、必須になるコーデックだと思います。
    しかしながら、現時点では、不安定な一面もあることから、まだ「マニア向けコーデック」という位置付けでしょうか。

    音質は最高であることは保証します。
    しかし、安定動作させるためには、もう少し検証が必要だと感じました。


    私はこの「Opus」と【つなぐ】(※)は最高の組み合わせになると考えています。
    そのため、なんとしても安定動作させたいところです。

    ※ 【つなぐ】とは何かは、以下の記事をご覧ください。
    ガラケー(話し放題)と、スマホ(MVNO)を【つなぐ】>(概要説明)
    MVNO(データSIM)で「話し放題」を実現する 【つなぐ】>(設定紹介)


    今回の検証はここで終わりますが、今後、ハードとOSを変えて、さらなる検証を進めていきたいと思います。

  • 2015年1月13日火曜日

    3GモデムをAsteriskに【つなぐ】

    今まで「GP-712」や「GP-710」を使って【つなぐ】(※)を構築してきました。

    しかし、これらは非常に高価です。
    これらで【つなぐ】を構築すると、トータルで4万円以上かかります。
    そこで、もっと安価に【つなぐ】を構築できないかを考えます。


    ※ 【つなぐ】とは何かは、以下の記事をご覧ください。
    ガラケー(話し放題)と、スマホ(MVNO)を【つなぐ】>(概要説明)
    MVNO(データSIM)で「話し放題」を実現する 【つなぐ】>(設定紹介)




    しかしながら、2万も3万もする「GP-710」や「GP-712」を使った時点で、すでにもう高価です。
    そこで、「GP-71x」の代わりに、安価な「Huawei製の3Gモデム」で【つなぐ】を構築してみました。

    これならば、導入費を半額以下に抑えられると同時に、別途ガラケーを用意する必要もなくなります。



    【必要な機材と設置】

  • IP-PBX(Asterisk)
  • Huawei 3Gモデム(※1)
  • スマホ(普段使い用)


    「IP-PBX」は今までどおり、「Raspberry Pi」を使います。
    そして、今回は「GP-71x」ではなく、代わりに「3Gモデム」を使います。

    設置は簡単です。
    「3Gモデム」のSIMスロットにドコモなどのSIMカードを装着して、「Raspberry Pi」にUSB接続するだけです。(※2、※3)
    なお、「3Gモデム」のSIMスロットは標準サイズが多いので、必要に応じてSIMアダプタを介します。

    ※1 使用可能モデル一覧は<このサイト>を参考にしてください。
    ※2 auは規格が違うため利用できません。
    ※3 一部のY!mobile(タイプ2)およびPHSは利用できません。




    【chan_dongleのインストール ~ Asteriskの設定】

    USBの3GモデムをAsteriskに接続するためには「chan_dongle」を使います。

    導入方法はすべてこのサイトのとおり実行するだけです。
    Wiki Chan_dongle


    ・・・それだけではあまりにも気が利かないので、ここではもっと簡単に、「chan_dongle」を使えるようにします。


    以下は、上記サイトを参考に、我流でインストールした備忘録です。

    OSには「Raspbian」を使いました。
    多分「RasPBX」でも問題ないと思いますが、動作未確認です。
    RasPBXを使う場合は、Asteriskのインストールは不要です。


    ● Asteriskをインストールします。
    apt-get install asterisk

    ● 続いて開発者ツールをインストールします。
    apt-get install asterisk-dev

    ● 3Gモデムを使えるようにするドライバみたいなものをダウンロードします。
    cd /usr/src
    wget https://asterisk-chan-dongle.googlecode.com/files/chan_dongle-1.1.r14.tgz

    ● 解凍します。
    tar -zxvf chan_dongle-1.1.r14.tgz

    ● makeします。
    cd /usr/src/chan_dongle-1.1.r14
    ./configure
    make

    ● インストールします。
    make install

    ● chan_dongleの設定ファイルとダイヤルプランを作成します。
    (extensions.confが上書きされるため、自分専用ダイヤルプランを作成していた人は事前にバックアップします。)
    cd /etc/asterisk/
    wget http://asterisk-chan-dongle.googlecode.com/svn/trunk/etc/dongle.conf
    wget http://asterisk-chan-dongle.googlecode.com/svn/trunk/etc/extensions.conf

    ● Raspbianを再起動します。
    reboot



    【chan_dongleで通話する】

    Raspbianの再起動が完了したら、「3Gモデム」が使えるかを確認します。
    「3Gモデム」に挿したSIMカードの電話番号に、他の電話機から電話します。

    英語のデモが流れたら成功です。
    あとは適切に「dongle.conf」と「extensions.conf」を設定します。
    なお、「3Gモデム」を1つしか使わない場合は、「dongle.conf」を編集する必要はありません。



    【ダイヤルプランの作成】

    「3Gモデム」から発信させるためには、extenの記述が通常と若干異なります。
    以下のように記述することで「3Gモデム」から発信するようになります。

    ; 0をトリガーにした発信例
    exten => _0.,1,Dial(Dongle/dongle0/${EXTEN},60)
    exten => _0.,n,Hangup()

    着信やその他の記述は、通常と変わりませんので、自分の環境にあったダイヤルプランを作成します。



    【音質の検証】

    私の環境では非常に良好な通話品質でした。
    特に遅延を感じることもなく、「普通の電話」です。

    ところが、【つなぐ】同士の会話は、かなりの遅延を感じます。(これはGP-71xを使ったシステムも同様です。)
    そのため、【つなぐ】同士の会話には、外線を使わずに内線通話となるように、ダイヤルプランを作成する必要があります。

    こうすれば、音声回線を経由しない通話が実現でき、その結果、より低遅延・高音質な通話が可能になります。


    今回もいつもどおり、3Gモデム版【つなぐ】の音質と遅延時間を検証します。
    音質については自分がどう聞こえるかより、自分の声が相手にどのように聞こえているかが重要なため、それを掲載します。

    [使用した端末]
  • iPhone4s(ドコモSIM使用)
  • SH-07D(Groundwire使用)

    [回線種別]
  • Wi-Fi(光回線)

    [録音環境]
  • 「FUSION IP-Phone SMART」の留守電(128kbps RIFF-WAVE)

    [遅延測定条件]
  • 「iPhone4sから音声を発信してから、SH-07Dがそれを受信する」までのタイムラグの測定

    [音声の元データ]


    [検証結果]
    回線種別
    (アプリ)
    コーデック 音質 遅延時間
    (つなぐから発信/つなぐで受話)
    Wi-Fi
    (Acrobits Groundwire)
    G.711μ

    257ms / 590ms


    何度か試験をしているうちに気付きました。
    どういうわけか、発信時より受話時の遅延時間が大きいのです。

    これの回避策は、以下『着信時の遅延回避策』に記載します。



    【着信時の遅延回避策】

    3Gモデム版【つなぐ】で受話した際の遅延時間については、もしかすると私の環境依存かもしれません。
    しかし、いずれにしても、この遅延時間では実用できません。

    そこで、これを実用するためには、キャリア転送を併用します。

    キャリアの転送を使うことによって、【つなぐ】による着信を迂回して、別の電話番号に着信させることが出来ます。
    つまり、受話時は【つなぐ】を使わないことで、遅延を回避させるわけです。

    転送先の電話番号には「ブラステル 050 free」を用います。(無料)
    ここであれば、低遅延・高音質での通話が可能です。
    (ブラステルを経由していることを全く意識せずに運用できます。)


    以上より、3Gモデム版【つなぐ】は、転送も「カケホーダイ」対象となるドコモとの相性が抜群です。
    もちろん、着信にはほとんど使用しない前提でしたら、ソフトバンクやY!mobileでも構いません。



    【まとめ】

    GP-71xを使った【つなぐ】と、3Gモデムを使った【つなぐ】、それぞれのメリットとデメリットを以下の表にまとめました。

      安定性 音質 遅延 価格 備考
    GP-71x 高い ・通話最初の1秒ぐらいが聞こえない。
    ・シェアの「有効/無効」切替ができる。
    ・収容する携帯キャリアを問わない。
    3Gモデム 未知 特殊 安い ・つなぐからの発信は遅延なし、受信時は遅延大。
    ・検証期間が浅いため、安定性がわからない。(現在までは良好)
    ・別途携帯を必要としない。(SIMをそのまま使う)
    ・auとPHSは収容できず。
    BTドングル 安い ・Bluetoothで携帯を直接Asteriskへ収容する。
    ・収容する携帯キャリアを問わない。
    ・ペアリングできる端末がかなり限定される。
    (私の手持ちデバイスではHFPで繋がらないため試験できず。)

    GP-71x限定機能の「シェアの切替」とは、GP-71xの設定画面を利用することで、その回線をシェアするか否かが簡単に切り替えられる機能になります。

    「最初はひとりで使いたいけど、後から複数人でシェアするかも知れない。」(またはその逆)などが、Asteriskのダイヤルプランを変えることなく切り替えられます。(要初期設定)

    なお、この表の中に「BTドングル」というのもがありますが、これは「chan_mobile」というAsteriskのアドオンを使って、携帯電話をAsteriskに直接収容する手法になります。

    しかし、私の技術力不足もありますが、あまりにも相性が酷く使用を断念しました。
    また、Asteriskとペアリングするために、Linuxコマンドを駆使するため、現実的ではないとも判断しました。
    Bluetoothを使う場合は素直にGP-71x使うべきです。



    【あとがき】

    chan_dongleは以前から知っていたのですが、私の知識ではハードルが高すぎて、今まで諦めていました。
    しかし、GP-71xを使った【つなぐ】を他の方に販売することになって、ひしひしと感じていたことがありました。

    「高すぎる・・・」と。

    と言うことで、今回はかなりがんばりました。

    分かってしまえばなんてこと無いのですが、Asteriskの開発者ツールを導入しないと「chan_dongle」のmakeに失敗します。
    うまく導入できない人のほとんどが、これが原因ではないかと思います。

    LinuxとAsteriskが扱える人は、本記事のとおりで【つなぐ】を構築できますので、ぜひチャレンジしてみてください。

    なお、<【つなぐ】オーダーフォーム>に「3Gモデム版」も追加しました。
    これにより、かなり安価に【つなぐ】を提供できるようになりました。


    【つなぐ】のオーダーは終了いたしました。
    本当はずっと続けていきたかったのですが、私の時間が無くなってしまったことと、かなりの赤字で販売していたことにより、継続が厳しくなってしまいました。申し訳ありません。