以前、作って運用しつつもブラッシュアップ中の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人が雑多に複数件登録する覚書的なメモです。
再生時にそれらと混ざると煩わしいと思われるので伝言機能は別途つくることにします。
ここでは、音声メモの登録、削除、再生は別々のスクリプトとし、メモ登録と削除には、Perlスクリプト、メモ再生には、シェルスクリプトを使うことにしました。
現時点の自作スマートスピーカー仕様の場合、操作待ちさせるウェイクワードを発した後は、ウェイクワードなしで任意に設定できる有効時間内に「メモして」、「メモとって」などの音声操作をした時に呼ばれるスクリプトを想定しています。
コールされると「15秒以内でどうぞ」の後、任意の音声を発して録音、ここでは、システムにあったポチャンのような効果音に続けて「メモを保存しました」というメッセージを以て録音完了とすることにしました。
ファイル名には、秒まで含むlocaltime値を数値の並びとして使うことで重複することなく、いくつでもメモを保存できるようにしてみました。
尤もあまりに数があると再生時、うざったいと思いますが。
[2019/06/02]
本機能を使用可能にする解決策OSS(既存PC版スマートスピーカー)、ALSA(ラズパイ版)からALSA/PulseAudioへの変更に伴い、arecordの-D(デバイス指定)オプションが不要に。
ちなみに音声操作と録音で音量を変更したかった為、解決策となるリンク先のpacmdによる事前設定に加え、PulseAudioのコマンドpactlで録音前後に音量調整する行を追加しました。
ウェイクワードを発した後、任意に設定できる有効時間内に「メモを削除して」、「メモを消して」などの音声操作をした時に呼ばれるスクリプトを想定しています。
コールされると「全てのメモを削除します」の後、ここでは、システムにあったポチャンのような効果音に続けて「完了しました」というメッセージを以て削除完了とすることにしました。
前後しましたが、音声メモ再生用のスクリプトはこれです。
ウェイクワードを発した後、任意に設定できる有効時間内に「メモを再生して」、「音声メモを再生して」、「音声メモ何かあったっけ」などの音声操作をした時に呼ばれるスクリプトを想定しています。
コールされると録音済み音声メモがある場合、「メモは$cnt件です全てのメモを再生します」というメッセージの後、録音済みのメモが1件ずつ読み上げられ、「メモは以上です」というメッセージを以て読み上げ完了とすることにしました。
録音した音声メモがない場合、「保存されたメモはありません」というメッセージが流れます。
日付をまたぐメモもあるだろうと思うと日付ごとにとか、今日とか昨日といった単位で読み上げるとか、やろうと思えばいろいろできるでしょう。
が、複雑になりますし、そもそも、音声でそこまでできたところでスマートスピーカー操作と相まってかえって煩わしそうなので、このあたりが限界かと。
/path/to/jsayについてや自作スマートスピーカーへの反映についての詳細は、冒頭の「自作スマートスピーカー」他、リンク先を参照してください。