一般ユーザで音声出力できても管理者IDで実行すると音が出ない理由とは
音声認識part1、part2で、Juliusをインストールして、音声認識にチャレンジしている60爺です。本日はお休みでブログを見ていましたが、書斎が妙に静かなのに気づきました。
うーーん、この静けさは何なのだろうか?
それは、いつも天気予報とニュースを話してくれるラズパイ君が、うんともすんとも言わないことでした。
これは一体どういうことでしょうか?理由はいろいろ考えられますので、ひとつずつ確認していくしかないようですね。
じっくりと腰を据えて実施していきましょう。
原因究明開始
まずは、crontabで時間起動のコマンドを見てみました。
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin
*/15 * * * * sudo sh /home/xxxxxx/python_pg/graph_data/display.sh
5 8,12,15,20,22 * * * python3 /home/xxxxxx/python_pg/open_jtalk/talk_weather_3.py
0 8,12,15,20,22 * * * python /home/xxxxxx/python_pg/weather_hacks_sense_hat.py
10 8,12,15,20,22 * * * python3 /home/xxxxxx/python_pg/clear.py
15 8,12,15,21 * * * php /home/xxxxxx/python_pg/open_jtalk/nhk_news_talk.php
これをみると、三行目で天気予報、六行目でニュースの指定をしています。
そこで、このコマンドを直接打って見ました。
root@raspberrypi:~# python3 /home/xxxxxx/python_pg/open_jtalk/talk_weather_3.py
すると・・・。
jsay 9月30日、17時23分0秒
/usr/local/bin/jsay 9月30日、17時23分0秒
ALSA lib pcm_dmix.c:1022:(snd_pcm_dmix_open) unable to open slave
aplay: main:722: audio open error: そのようなファイルやディレクトリはありません
jsay '神奈川県 横浜 の天気 今日の天気は晴れです。 明日の天気は晴時々曇です。 明 日の予想最高気温、26度、予想最低気温、17度です。'
ALSA lib pcm_dmix.c:1022:(snd_pcm_dmix_open) unable to open slave
aplay: main:722: audio open error: そのようなファイルやディレクトリはありません
最後の行で、次のエラーが発生していますね。
audio open error: そのようなファイルやディレクトリはありません
何でしょうかね、このエラー。今まで見たこともないエラーです。
そこで、管理者ID ではなく一般ユーザに戻ってこのコマンドを実行してみました。すると、何の問題も無く、天気予報をしゃべってくれるし、ニュースも普通にしゃべります。
つまり、一般ユーザで音声出力できても管理者IDで実行すると音が出ないのです!
どういうことでしょうか?60爺には荷の重いエラーがまたまた発生です!
管理者IDで音が出ない理由と対応
仕方がないので、いろいろとググりましたが、これと言った決定版にはぶつかりません。
ただ、音声認識でスピーカ周りをいじっているので、これらを設定した際に参考にした記事を見直ました。
で、結局、この記事の、ここに着目しました。
【ここに着目】⇒「この情報を~/.asoundrcに記載します。」・・・
つまりですね。
ユーザのホームディレクリにある .asoundrc に記載すると言っています。
即ち、管理者IDのホームディレクトリは、一般ユーザのホームディレクトリとは違うわけで、管理者IDのホームディレクトリにこのファイルが存在しないために、エラーが発生したと考えられます。
そこで、このファイルを管理者IDのホームディレクトリに作ってみます。
root@raspberrypi:~# vi .asoundrc
そして、一般ユーザ側にある .asoundrc の内容をコピーしました。
defaluts.pcm.card 1
defaults.ctl.card 0
pcm.!default {
type hw
card 1
}
ctl.!default {
type hw
card 0
}
実行テスト
それではテストしてみましょう。まずは、簡単なwavファイルからです。
root@raspberrypi:~# aplay /usr/share/sounds/alsa/Front_Center.wav
再生中
WAVE '/usr/share/sounds/alsa/Front_Center.wav'
: Signed 16 bit Little Endian, レート 48000 Hz, モノラル
エラーも発生せず、ちゃんと話してくれました。どうやら、上述の考えで良かったようです。
それでは、天気予報を話してもらいましょう。
root@raspberrypi:~# python3 /home/pi/python_pg/open_jtalk/talk_weather_3.py
jsay 9月30日、17時25分56秒
/usr/local/bin/jsay 9月30日、17時25分56秒
jsay '神奈川県 横浜 の天気 今日の天気は晴れです。 明日の天気は晴時々曇です。 明 日の予想最高気温、26度、予想最低気温、17度です。
こちらも問題なく話してくれました。さらに、NHKニュースも話してもらいましょう。
root@raspberrypi:~# php /home/pi/python_pg/open_jtalk/nhk_news_talk.php
sentence[0]--->2017年9月30日土曜日
sentence[1]--->17時23分時点の
sentence[2]--->日本放送協会NHKニュースをお伝えします
sentence[3]--->はじめに
sentence[4]--->首相まなじり決して戦い抜く全国幹事長会議でについてのニュースです
sentence[5]--->安倍総理大臣は
sentence[6]--->自民党の全国幹事長会議で
・
・
こちらも問題なく話してくれました。問題解決ですね。
最後に
ニュースや天気予報を離してくれるラズパイ君が沈黙していました。
原因を究明していくと、一般ユーザなら話してくれるのに、管理者で実施すると喋ってくれないということが分かりました。
いろいろと探しまくりましたが、ホームディレクトリにある.asoundrcというファイルに問題があることが分かりました。
その内容を一般ユーザと合わせることで問題解決となりました。
なぜ、今まで動いていたのかという疑問は解決していませんが…。
■思えば、「Julius音声認識」の記事も増えてきました
ディスカッション
コメント一覧
まだ、コメントがありません