一般ユーザで音声出力できても管理者IDで実行すると音が出ない理由とは

2017年11月1日

音声認識part1part2で、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で音が出ない理由と対応

仕方がないので、いろいろとググりましたが、これと言った決定版にはぶつかりません。

ただ、音声認識でスピーカ周りをいじっているので、これらを設定した際に参考にした記事を見直ました。

で、結局、この記事の、ここに着目しました。

Raspberry Piで音声認識

【ここに着目】⇒「この情報を~/.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音声認識」の記事も増えてきました

スポンサーリンク
この記事を書いた人

60爺

60路を越え、RaspberryPi と出会い、その関係でブログ開設(2017/2~)となりました。始めてみると、コツコツやるのが性に合ってしまい、漢字の記事から家の補修・将棋・windows10関係・別名・言い方などジャンルを拡大して今に至ってます。まだまだ、元気なので新たな話題を見つけて皆様に提供できればと思っています。「プロフィールはこちら

Julius音声認識

Posted by 60爺