【Python】PCのマイクで拾った音をPepperに送って再生させる【qi Framework】

Pocket

C#で試した内容をPythonでも確認しました、というだけの内容です。

 
2016/3/15追記: 本記事のプログラムはNuGetパッケージとして公開してるBaku.LibqiDotNetのver1.0.1では動作しますが、GitHubの最新コードやNuGetパッケージの最新版(2.0)では動作しません。ご注意下さい。
 

もくじ
1. はじめに
2. サンプルコード
3. まとめ

 
 

はじめに

今回は「Python/qi Frameworkを使ってPepperのマイクからストリーミングする」の対極となる処理、つまり手元のマイクに向かって喋った音をPepperに投げつけて再生させる、言い換えるとPepperの口を乗っ取る方法を紹介します。

 

本記事の内容はC#で全く同じ事をやったもののPython移植版になります。実装にあたってはC++の事例紹介であるアルデバラン社の方が非公式で試された方法紹介公式ドキュメントの当該箇所を参考にしていますが、特にポイントになる点は2点だけです。

  • Pythonでも他の言語と同様ALAudioDevicesendRemoteBufferToOutput関数を使って音声再生ができる
  • Pythonプログラムでマイク入力を受け取るにはPyAudioライブラリなどを使えばOK

 

Pythonでマイク入力を拾えるライブラリは他にもあるようですが、「Python/qi Frameworkを使ってPepperのマイクからストリーミングする」とライブラリが揃ってる方が何かと便利そうだったため、今回は同じものを使っています。

 
 

サンプルコード

コマンドラインからIPやらポートやら指定できる機能(argparseの部分のコードはqi Frameworkの公式ドキュメントのサンプルコピペをもとにしています)などをつけて、こんな感じに書けます。

 

実行時には下記のようにIPとポートを引数で指定して実行します。

 

うまく行けばマイクに向かって喋った音がPepperから再生されます。

 
 

まとめ

マイクの入出力が両方とも拾えるようになったので、適切に組み合わせればPepperを経由した会話が本体のAPI主体で(タブレットに頼らないでも)可能になることが分かりました。本ブログではC#とPythonに関しての紹介になりましたが当然Java(というかAndroid)等でも同様に出来るはずです。音声合成にこだわらないのであれば、ちょっと特殊なアプリケーション作成に役立つのではないかなあ、と思います。

 
 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です