以前の記事で紹介したPyWorldによるスクリプトは、実行を終了するときはCommand + Cなどの強制終了が必要だったが、あまりスマートなやり方ではなかった。
tam5917.hatenablog.com
そこで、キー入力を監視して、特定のキー(ESC or 'q')が押下されたらスクリプトを終了するように改良した、という話。
実行環境はMac 10.13.6。Python 3.7.3。PyAudio, PyWorld, Numpyは導入済み。
キー入力監視にはライブラリpynput を用いる。
pip3 install pynput
改良したスクリプト(real_time_vc_keylog.py)は以下。
gist.github.com
MacOSのターミナルで上記のスクリプトを実行する際の注意点として、
- sudo による実行:これはMacOSのセキュリティ上の制約から来ている
- 標準エラーに大量の警告:これはthreadingのライブラリ由来かと。とりあえず/dev/nullに捨てる。
というわけで、以下のコマンドラインで実行すると、音声を変換しつつ、キー入力を監視し続ける。冒頭に述べたとおり、ESC or 'q' で 終了になる。
sudo python3 real_time_vc_keylog.py 2> /dev/null
グローバル変数を使うので、これもまたスマートではないが、とりあえず動作したので良しとする。
本スクリプトで実装したキー入力の監視機能は以下を参考にしました。ありがとうございました。
PyAudioとpyworldの連携ができますた^^ · GitHub