PyWorldによる簡易ボイスチェンジャーのスクリプトを改良:キー入力で終了するようにした

以前の記事で紹介した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