月別アーカイブ: 2013年10月

AquesTalk Pi を使ってみる

投稿日時: 投稿者:

AquesTalk Pi の使い方まとめ

に倣いAquesTalk Pi を「個人的」に使ってみます。

http://www.a-quest.com/products/aquestalkpi.html

からダウンロードします。
Raspberry Piのブラウザ Midoriを使いました。

/home/piに

aquestalkpi-20130827.tar.gz

がダウンロードされるので展開します。

1
$tar xzvf aquestalkpi-20130827.tar.gz

/home/piの中にaquestalkpiといディレクトリが作成されるのでそこに移動します。

1
$cd aquestalkpi

しゃべらせてみます。

1
$./AquesTalkPi"おはよう。"|aplay

声を声種f2にするには(デフォルトはf1)

1
$./AquesTalkPi-vf2"こんにちは。"|aplay

にします。
AquesTalk Piを入れるといままで使えていたOpenJTalkが使えなくなってしまいました。
aquestalkpiのディレクトリを削除してもだめだったので
OpenJTalkを再インストールしました。
共存できないようです。

AquesTalk Piはインストールも簡単でとても扱いやすくてすばらしいのですが、
大学などで公式に使用するにはライセンスが必要なので
とりあえず、現在はマグボットでは使用しません。

非商用、個人でマグボッットで使用するのには問題ないと思います。

ライセンスについては
AquesTalk Pi の使い方まとめ

AquesTalk Piの詳しい使用方法については
AquesTalk Pi

をご覧下さい。

バックグラウンドでWebSocketサーバを起動

投稿日時: 投稿者:

Rubyで作ったWebSocketサーバを自動起動してみます。

1
sudo nano/etc/rc.local

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

1
exit0

の前に

1
ruby/home/pi/mubogt_server_v1_0_0.rb&

と書く。
mubogt_server_v1_0_0.rbはWebSocketサーバのファイル名

最初にruby、最後に&をつける。これがミソ。
バックグラウンドで実行します。
これをつけないとフォラグラウンドで実行されて、いつまでたっても解放されず
コマンド受付状態にならない。
&をつけないと、
先に行けずに止まってしまうでしょう。

mubogt_server_v1_0_0.rbに実行権を付与。(これが必要かどうかわからない)

1
chmod+x/home/pi/mubogt_server_v1_0_0.rb

自動起動後に

1
ps ax

でこのプロセスが走っているか確認できます。
しかし、この方法ではシステム起動時に「一度だけ」起動するので、途中で何かの原因でプロセスが止まるとそれきりになります。
止まってもなんどでも起動するのではればデーモン化が必要です。
これは次のステップで。

rc.localでのRubyスクリプトの自動実行

投稿日時: 投稿者:

起動時にスクリプトを実行する方法としていくつか方法があるが、ここでは比較的簡単にできるrc.localにスクリプトを書く方法を試してみる。

rc.localを編集

1
sudo nano/etc/rc.local

中身は以下。

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

例えば

mubogt_server_v1_0_0.rb

exit 0の前に

1
ruby/home/pi/mubogt_server_v1_0_0.rb

と書いて

再起動

1
sudo reboot

する。

スクリプトは
シェルスクリプトでもRubyやPythonの起動スクリプトでもいい。

ハマったのはデフォルトでrc.local内のスクリプトが自動起動しなかったこと

1
sh/etc/rc.local/mubogt_server_v1_0_0.rb

とすれば動くのでスクリプトには問題ない。

仕方ないので実行権を付与してみる。

1
sudo chmod+x/etc/rc.local

これで動いた。

デフォルトで動かないのは、こう書いてあるので当然ですね。

1
2
# In order to enable or disable this script just change the execution
# bits.

rc.local内のスクリプト

1
2
3
4
_IP=$(hostname-I)||true
if["$_IP"];then
printf"My IP address is %s\n""$_IP"
fi

は、起動するとIPアドレスを表示してくれます。

以前にjsayという日本語音声プログラムを試してみたので

Raspberry Piで音声合成

これを

1
2
3
4
5
_IP=$(hostname-I)||true
if["$_IP"];then
printf"My IP address is %s\n""$_IP"
jsay"$_IP"
fi

と加えることで
起動時にIPアドレスをしゃべるようになりました。

参考
Raspberry PiをSHOUTcastクライアントにする

Raspberry Pi上でRubyファイルの実行

投稿日時: 投稿者:

RUbyのファイルの1行名に

1
#!/usr/bin/ruby

(シェバン)
があるが、それがあると
test.rbを実行するのにホームディレクトリ上で

1
ruby test.rb

でも起動するが、

1
/home/pi/test.rb

だけで起動する。

ファイル名のtest.rbはtestでもいい。Linuxは拡張子で判断していない。

実際やってみると以下のことでハマった。

1
2
#!/usr/bin/ruby
puts"Ruby start"

をなぜか1行目は空白で、2行名から書いていたので、ファイルが実行できず。1行名から書く。

ruby test.rbは、実際はファイルの位置を明記して

1
/home/pi/test.rb

として実行する。最初にrubyと書かなくていい。
もしくは、

1
./test.rb

で実行。
.はホームディレクトリをさす。

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

USBスピーカーの優先度を上げる

投稿日時: 投稿者:

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スピーカーの優先順位を上げる。

1
sudo nano/etc/modprobe.d/alsa-base.conf
1
options snd-usb-audio index=-2

1
options snd-usb-audio index=0

にする。
保存してリブート

1
sudo reboot

優先度を確認

1
cat/proc/asound/modules
1
2
0snd_usb_audio
1snd_bcm2835

となっていれば成功。
USBスピーカーから音がでました!

追伸
せっかくUSBスピーカーにしたのに音質が悪いです。他に問題があるのかもしれません。