Rubyで作ったWebSocketサーバを自動起動してみます。
で
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
# Print the IP address
_IP=$(hostname-I)||true
if["$_IP"];then
printf"My IP address is %s\n""$_IP"
fi
exit0
の
の前に
ruby/home/pi/mubogt_server_v1_0_0.rb&
と書く。
mubogt_server_v1_0_0.rbはWebSocketサーバのファイル名
最初にruby、最後に&をつける。これがミソ。
バックグラウンドで実行します。
これをつけないとフォラグラウンドで実行されて、いつまでたっても解放されず
コマンド受付状態にならない。
&をつけないと、
先に行けずに止まってしまうでしょう。
mubogt_server_v1_0_0.rbに実行権を付与。(これが必要かどうかわからない)
chmod+x/home/pi/mubogt_server_v1_0_0.rb
自動起動後に
でこのプロセスが走っているか確認できます。
しかし、この方法ではシステム起動時に「一度だけ」起動するので、途中で何かの原因でプロセスが止まるとそれきりになります。
止まってもなんどでも起動するのではればデーモン化が必要です。
これは次のステップで。
RUbyのファイルの1行名に
(シェバン)
があるが、それがあると
test.rbを実行するのにホームディレクトリ上で
でも起動するが、
だけで起動する。
ファイル名のtest.rbはtestでもいい。Linuxは拡張子で判断していない。
実際やってみると以下のことでハマった。
#!/usr/bin/ruby
puts"Ruby start"
をなぜか1行目は空白で、2行名から書いていたので、ファイルが実行できず。1行名から書く。
ruby test.rbは、実際はファイルの位置を明記して
として実行する。最初にrubyと書かなくていい。
もしくは、
で実行。
.はホームディレクトリをさす。
test.rbではなく、./test.rbと打たないといけないのは
ホームディレクトリにパスが通っていないから。
本当はtest.rbと打ちたいですが
ホームディレクトリにパスを通すと危険だそうです。
参考
カレントディレクトリのプログラムを実行するには
http://www.atmarkit.co.jp/flinux/rensai/linuxtips/040execcaprog.html
変数pathにカレントディレクトリを含める方法(あまりよくない)
http://www.not-enough.org/abe/manual/comm/command-path.html
Raspberry PiにUSBスピーカーをつなげても鳴らない。
alsamixer でF6を押してUSBスピーカーを選択してもUSBスピーカーに切り替わらない。
sudo amixer cset numid=3 1 にはUSBスピーカーの項目はない。
USBスピーカーは サンワサプライ MM-SPS2UWH
http://www.sanwa.co.jp/product/syohin.asp?code=MM-SPS2UWH&cate=1
USBハブ経由でつなげました。
http://cubic9.com/Devel/%C5%C5%BB%D2%B9%A9%BA%EE/RaspberryPi/%C6%FC%CB%DC%B8%EC%B2%BB%C0%BC%C7%A7%BC%B1/
に習って
USBスピーカーの優先順位を上げる。
sudo nano/etc/modprobe.d/alsa-base.conf
options snd-usb-audio index=-2
を
options snd-usb-audio index=0
にする。
保存してリブート
優先度を確認
0snd_usb_audio
1snd_bcm2835
となっていれば成功。
USBスピーカーから音がでました!
追伸
せっかくUSBスピーカーにしたのに音質が悪いです。他に問題があるのかもしれません。
Raspberry Piのオートログイン(自動起動)ができました。
Debian(squeeze) startxによる自動起動
を参考にさせていただきました。
nanoで以下を開きます。
1:2345:respawn:/sbin/getty38400tty1
の行を#でコメントアウトします。
かわりに
1:2345:respawn:/bin/login-fユーザ名tty1</dev/tty1>/dev/tty12>&1
を新たに書き込みます。 ユーザー名は私の場合はpiになります。
保存してnanoを終了させて再起動すると、Raspberry Piがオートログインします。
これ、記述を間違うと、Raspberry Piが起動しなくなります。
SDカードのコピーをとってから試されるといいと思います。
橋本商会さんにならい、そのままやってみました。
本当にそのままです。
橋本商会 Raspberry Piに喋らせる
以下も参考にしました。
Raspberry Pi で遊ぶ (2) —Open JTalk で喋ってもらう—
OpenJTalk インストール
sudo apt-get install open-jtalk open-jtalk-mecab-naist-jdic htsengine libhtsengine-dev hts-voice-nitech-jp-atr503-m001
MMD agentに交換するためにインストール
wget http://downloads.sourceforge.net/project/mmdagent/MMDAgent_Example/MMDAgent_Example-1.3/MMDAgent_Example-1.3.zip
unzip MMDAgent_Example-1.3.zip
sudo cp -R MMDAgent_Example-1.3/Voice/* /usr/share/hts-voice/
自分のpiのディレクトリーにbinというディレクトリーを作ります。
piに移動して
その後、以下のソースコードをjsayというファイル名で ~/bin/jsayとして保存。
jsayはシェルスクリプトなので.shが必要かと思いましたがなくてもよいようです。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#!/bin/sh
TMP=/tmp/jsay.wav
#cd /usr/share/hts-voice/nitech-jp-atr503-m001
cd/usr/share/hts-voice/mei_happy
echo"1ドル"|open_jtalk\
-td tree-dur.inf\
-tf tree-lf0.inf\
-tm tree-mgc.inf\
-md dur.pdf\
-mf lf0.pdf\
-mm mgc.pdf\
-dm mgc.win1\
-dm mgc.win2\
-dm mgc.win3\
-df lf0.win1\
-df lf0.win2\
-df lf0.win3\
-dl lpf.win1\
-ef tree-gv-lf0.inf\
-em tree-gv-mgc.inf\
-cf gv-lf0.pdf\
-cm gv-mgc.pdf\
-kgv-switch.inf\
-s16000\
-a0.05\
-u0.0\
-jm1.0\
-jf1.0\
-jl1.0\
-x/var/lib/mecab/dic/open-jtalk/naist-jdic\
-ow$TMP&&\
aplay--quiet$TMP
rm-f$TMP
エディター nanoを起動して以上のコードを貼付けて保存するのですが
最初にユーザー名piでログインしているので
suno nano で起動しないと、 ~/bin/jsay に保存できませんでした。
実行権を付加します。
$ sudo chmod +x ~/bin/jsay
$ jsay はじめまして
しゃべりました。
イアフォン端子にスピーカーをつなぎましたが特にひどい雑音はしませんでした。
発話の声。女性の声です。ちゃんと聞き取れるし、いいと思います。
[フレーム]
Raspberry PiのOSを更新するのに
更新情報のアップデート
をしたあとに
をします。
前者はすぐでしたが、後者は30分程度かかりました。