以前、作って運用しつつもブラッシュアップ中のRaspberry Pi 3 Model B+とJulius、Open JTalkベースの自作スマートスピーカーがあります。
主な機能は、
尚、ラズパイ用ACアダプタを挿したスイッチ付きコンセントでのON/OFFとは別にラズパイ用boot/reboot/shutdown物理ボタン付き。
音声認識にJuliusを使った自作スマートスピーカーに伝言とメモの機能を実装するにあたり、マイクとスピーカーを専有してしまうOSSやALSAからPulseAudioに移行しました。
ちなみに便利なのでラズパイだけでなく、PC/Debianにも自作スマートスピーカー機能を搭載しています。
自ずとモニタ付きとなるPC版スマートスピーカーには、PC及びラズパイ双方のスマートスピーカー機能のデスクトップアプリとしてPyQt5/Qt Designerによる操作パネルも作成しました。
[2019/05/30]
現在、音声メモは、機能しません。(スクリプトでは可、スマートスピーカーでは不可)
原因は特定済み、解決策模索中。
[2019/06/02]
ALSA/PulseAudio使用で解決
スクリプトの実行、Linuxパソコン版スマートスピーカー、ラズパイ版スマートスピーカーで機能することを確認済みです。
今回は、伝言メッセージ機能を追加してみました。
伝言メッセージ機能は、伝言に特化(して音声メモとは別のパスに音源を保存)することで再生時、音声メモと混ざらないことを意図しているだけで基本、音声メモと同じです。
ちなみに1人なら外出前に帰宅後に忘れずにやるべきことを録音、帰宅後、再生、2人なら一方のメッセージを他方が聞き、必要なら返事を録音、もしくは、複数人で利用するも基本、メッセージを残すのは、ほぼ特定の1人で聴くのは、その他大勢といったような状況を想定しました。
現時点の自作スマートスピーカー仕様の場合、操作待ちさせるウェイクワードを発した後は、ウェイクワードなしで任意に設定できる有効時間内に「伝言を録音して」、「伝言入れて」などの音声操作をした時に呼ばれるスクリプトを想定しています。
コールされると「15秒以内で伝言をどうぞ」の後、任意の音声を発して録音、ここでは、システムにあったポチャンのような効果音に続けて「伝言を保存しました」というメッセージを以て録音完了とすることにしました。
ファイル名には、秒まで含むlocaltime値を数値の並びとして使うことで重複することなく、いくつでもメモを保存できるようにしてみました。
たいていは、1件で十分と思われますが、時間切れで複数録音する可能性もあるかなと。
一定の時間を決めて割り切ることができれば、誰かが1件入れ、他の誰かが聴くだけで次回録音時、もしくは、返事をする場合は、上書き(保存ファイル名は固定)でもよいでしょう。
[2019/06/02]
本機能を使用可能にする解決策OSS(既存PC版スマートスピーカー)、ALSA(ラズパイ版)からALSA/PulseAudioへの変更に伴い、arecordの-D(デバイス指定)オプションが不要に。
ちなみに音声操作と録音で音量を変更したかった為、解決策となるリンク先のpacmdによる事前設定に加え、PulseAudioのコマンドpactlで録音前後に音量調整する行を追加しました。
ウェイクワードを発した後、任意に設定できる有効時間内に「伝言を削除して」、「伝言を消して」などの音声操作をした時に呼ばれるスクリプトを想定しています。
コールされると「全ての伝言を削除します」の後、ここでは、システムにあったポチャンのような効果音に続けて「完了しました」というメッセージを以て削除完了とすることにしました。
前後しましたが、伝言メッセージ再生用のスクリプトはこれです。
ウェイクワードを発した後、任意に設定できる有効時間内に「伝言を再生して」、「伝言メッセージを再生して」、「伝言何かあったっけ」、「伝言メッセージ何かあったっけ」などの音声操作をした時に呼ばれるスクリプトを想定しています。
コールされると録音済み伝言メッセージがある場合、「伝言はx件です全ての伝言を再生します」というメッセージの後、録音済みメッセージが1件ずつ読み上げられ、「メモは以上です」というメッセージを以て読み上げ完了とすることにしました。
録音した伝言メッセージがない場合、「保存された伝言はありません」というメッセージが流れます。
やろうと思えば、他にもいろいろできるでしょうが、Simple is best.ということで。
/path/to/jsayについてや自作スマートスピーカーへの反映についての詳細は、冒頭の「自作スマートスピーカー」他、リンク先を参照してください。