ソケットサーバー「HAL」の起動方法をご紹介します。

HAL は通常、HAL 本体、Julius、voice_client と、3 つのプロセスを起動する必要があります。ここでは 3 つの起動方法をご紹介しますので、状況に合わせて使い分けて下さい。

※この記事で紹介しているソケットサーバー『HAL』は、諸般の事情により現在、公開と販売を中止しています。この製品へのお問い合わせは画面上部の『お問い合わせ』メニューよりご連絡ください。

※この記事は執筆・公開から3年以上経過しています。記事の情報が古くなっている場合がありますのでご注意ください。

公開日時:2016/05/15 14:42
最終更新:2019/11/30 02:11

HALの起動

HAL の起動方法

ここでは、HAL の起動方法について記します。HAL、Julius、voice_client の起動方法はそれぞれ、

sudo php -q (HALディレクトリまでのパス)/system/hal.php
julius -C /home/pi/julius-kits/grammar-kit-v4.1/hmm_mono.jconf -input mic -gram /home/pi/kaden -nostrip -nolog -module
sudo php -q (HALディレクトリまでのパス)/system/voice_client.php

となります。起動はこの順番で行うようにして下さい。

Julius の -nostrip オプションは、Julius の Warning を非表示にするオプションです。

これは Julius のバグだと思うのですが、マイクのセッティングに問題がある時、Julius は膨大な Warning を出力し続けます。どうも、マイクの入力が無かったり音量が 0 の時等に起きるのではないかと思いますが、正しく Julius が動作しない場合は マイクのセッティングを見なおして下さい。

通常、Julius は動作ログを標準出力に出力しますが、 -nolog オプションはをつけるとこれを抑制できます。

バックグラウンド実行

ところで、上記コマンドを Shell で実行すると、コマンドプロンプトが戻ってこないために次のコマンドが入力できません。

この場合は、

sudo php -q (HALディレクトリまでのパス)/system/hal.php &
julius -C /home/pi/julius-kits/grammar-kit-v4.1/hmm_mono.jconf -input mic -gram /home/pi/kaden -nostrip -module &
sudo php -q (HALディレクトリまでのパス)/system/voice_client.php &

のように、最後に & をつけてバックグラウンド実行を行うと 3 つのコマンドを実行できます。また、Linux に詳しい方は、上記を記したシェルスクリプトファイルを作成して、それを用いて起動を行うと良いでしょう。

なお、バックグラウンドで実行した場合は ctrl + c では終了できませんので、

pkill -f 'voice_client.php'
pkill -f 'hal.php'
pkill -f 'julius'

これらのコマンドでプロセスを終了させてください。

ターミナルを複数立ち上げる

また、X windowを使ってターミナルを3つ立ち上げるか、Tera Term 等のターミナルエミュレーターを複数起動し、それぞれのウィンドウで HAL、Julius、voice_client を起動するのも良いでしょう。

TeraTerm 3画面

これであればバックグラウンド実行する必要なく、好きなプロセスを ctrl + c で終了させられます。

初めての時は、この方法がなにかと便利です。

Raspberry Pi 起動時に自動実行

上記の方法で動作を確認し、あなたのアプリケーションが完成したら、最後は Raspberry Pi の起動時に自動実行するように設定します。

方法は、/etc/init.d/ にスクリプトを作成します。以下は、hal というスクリプトを作成していますが、名前は何でも構いません。

sudo vi /etc/init.d/hal

/etc/init.d/hal

#!/bin/sh
#/etc/init.d/hal
# and " su - pi -c 'sudo /etc/init.d/hal start' " in rc.local

case "$1" in
  start)
        sudo php -q (HALディレクトリまでのパス)/system/hal.php &
        julius -C /home/pi/julius-kits/grammar-kit-v4.1/hmm_mono.jconf -input mic -gram /home/pi/kaden -nostrip -nolog -module &
        sudo php -q (HALディレクトリまでのパス)/system/voice_client.php &
        ;;
  stop)
        pkill -f 'voice_client.php'
        pkill -f 'hal.php'
        pkill -f 'julius'
        ;;
esac

exit 0

保存したらこのスクリプトに対して実行権限を与えます。(2016/05/21 追記)

sudo chmod +x /etc/init.d/hal

最後に、

sudo vi /etc/rc.local

で開いた /etc/rc.local ファイルの exit 0 の前に、

/etc/rc.local

sudo service hal start

を記述します。hal は、先ほどのスクリプトファイルの名前です。(Raspbian wheezy ではこれで動作しましたが、jessieでは動作しないようです。)

jessie では、以下の様なコードで自動起動できるかと思います。(2016/05/21)

/etc/rc.local

sudo /etc/init.d/hal start

これで、Raspberry Pi の起動時に HAL、Julius、voice_client が起動するようになります。

(2016/06/04 追記)

上記で jessie 対応すると、Raspberry Pi 起動時に iconCube Loader の読み込みが間に合わず HAL の実行エラーが発生してしまうようです。

簡単な対策としては、

sudo vi /etc/init.d/hal

/etc/init.d/hal

#!/bin/sh
#/etc/init.d/hal
# and " su - pi -c 'sudo /etc/init.d/hal start' " in rc.local

case "$1" in
  start)
        sleep 5

sudo php -q (HALディレクトリまでのパス)/system/hal.php &
        julius -C /home/pi/julius-kits/grammar-kit-v4.1/hmm_mono.jconf -input mic -gram /home/pi/kaden -nostrip -nolog -module &
        sudo php -q (HALディレクトリまでのパス)/system/voice_client.php &
        ;;
  stop)
        pkill -f 'voice_client.php'
        pkill -f 'hal.php'
        pkill -f 'julius'
        ;;
esac

exit 0

のように、start) に sleep 5 のような weit を設けて HAL の実行を遅延させると良いようです。この場合、/etc/init.d/hal が呼ばれてから HAL 実行まで 5 秒間待つことになります。

恐らく、もっと適切な方法があるのでしょうが、とりあえずの解決策として記述しておきます。今後、良い解決策が見つかったらこのページに追記します。

記事リンク