#はじめに
Pepperのマイクからの音声をPython経由でPC/Mac上にファイルとして取得してみました。マイクロフォンのドライバから音声をとってGoogleさんの音声認識を実行するページが大変参考になりましたが、ちょっと敷居が高かったのでPythonSDKのみで実行できるものにしてみました。
※テストはMac上のPythonでしか行っていません。
下記ソース利用時にはPEPPER_IPを自分のIPアドレスに変えてください。
保存されるファイル名が「pepper_record.raw」となっていますので、こちらも適宜変えてください。
#ソース
pepperRecord.py
# encoding:UTF-8
import sys
import time
from naoqi import (ALProxy, ALBroker, ALModule)
PEPPER_IP = "192.168.0.15"
PepperModule = None
memory = None
class PepperModuleClass(ALModule):
def __init__(self, name):
ALModule.__init__(self, name)
#
self.BIND_PYTHON( self.getName(),"callback" );
self.tts = ALProxy("ALTextToSpeech", PEPPER_IP, 9559)
#
print "PepperModule Initialyze"
def startRecord(self):
self.tts.say("録音を開始します")
#
# ファイルの保存先設定
self.saveFile = open("pepper_record.raw","wb")
self.pepperMicrophone = ALProxy("ALAudioDevice", PEPPER_IP, 9559)
#
# 16KHzのモノラル音声でFront(3)マイク1つのみを指定
self.pepperMicrophone.setClientPreferences(self.getName(), 16000, 3, 0)
#
# 録音開始
self.pepperMicrophone.subscribe(self.getName())
def processRemote(self, inputChannels, inputSamples, timeStamp, inputBuff):
# 録音バッファを保存
self.saveFile.write(inputBuff)
def stopRecord(self):
# 録音終了
self.pepperMicrophone.unsubscribe(self.getName())
time.sleep(1)
self.tts.say("録音を終了しました")
self.saveFile.close()
def main():
myBroker = ALBroker("myBroker","0.0.0.0",0,PEPPER_IP,9559)
global PepperModule
PepperModule = PepperModuleClass("PepperModule")
try:
print "録音開始"
PepperModule.startRecord()
while True:
time.sleep(1)
except KeyboardInterrupt:
print "録音終了"
PepperModule.stopRecord()
myBroker.shutdown()
sys.exit(0)
if __name__ == "__main__":
main()
###ポイントは
・self.BIND_PYTHON( self.getName(),"callback" );
↑ callbackの設定
・processRemote(self, inputChannels, inputSamples, timeStamp, inputBuff):
↑ ドキュメントではprocessのみですが、processRemoteで取得できました。
↑ processとprocessRemoteでは最後の2つの引数の順番が違っていました。(C++APIのヘッダーにて確認)
#最後に
録音した音声は16KHz/16bitのモノラル、リトルインディアンのPCM音声となります。
単体マイクだと意外に本体のノイズがのっているだなと思いました。