如何使用ALAudioDevice的“订阅”方法调用“过程”功能

时间:2019-06-07 16:13:26

标签: python nao-robot

我是NAO编程的新手,并且在有关ALAudioDevice API方面遇到一些麻烦。 我的问题是以下问题:我编写了一个python模块,该模块应该记录来自前置麦克风的原始数据。 ALAudioDevice API的文档说,方法“ subscribe(...)”自动调用函数“ process” 并定期将来自麦克风的原始数据作为输入。我编写了一个代码来执行此过程(请参见下面的内容),并且它运行时没有引发 错误标志。但是,订阅绕过了“过程”功能,该模块根本没有任何音频。 有人遇到过同样的问题吗?

import qi

class AudioModule(object):
    def __init__(self):
        super(AudioModule, self).__init__()
        self.moduleName = "AudioModule"

        try :
            self.ALAudioDevice = ALProxy("ALAudioDevice")
        except Exception, e:
            self.logger.error("Error when creating proxy on ALAudioDevice:")
            self.logger.error(e)

    def begin_stream(self):
        self.ALAudioDevice.setClientPreferences(self.moduleName, 16000, 3, 0)
        self.ALAudioDevice.subscribe(self.moduleName)

    def end_stream(self):
        self.ALAudioDevice.unsubscribe(self.moduleName)

    def processRemote( self, nbOfChannels, samplesByChannel, altimestamp, buffer ):
        nbOfChannels = nbOfChannels
        mylogger = qi.Logger("data")
        mylogger.info("It works !" + str(nbOfChannels))

class MyClass(GeneratedClass):
    def __init__(self):
        GeneratedClass.__init__(self, False)
        self.audio = AudioModule()

    def onLoad(self):
        self.serviceId = self.session().registerService("AudioModule", self.audio)
        pass

    def onUnload(self):
        if self.serviceId != -1:
            self.session().unregisterService(self.serviceId)
            self.serviceId = -1
        pass

    def onInput_onStart(self):
        self.audio.begin_stream()
        self.onInput_onStop()
        pass

    def onInput_onStop(self):
        self.audio.end_stream()
        self.onUnload
        self.onStopped()
        pass

1 个答案:

答案 0 :(得分:1)

您似乎正在从Choregraphe框中订阅音频。我不确定它是否应该工作。

但是在此配置中,Python代码是在与ALAudioDevice服务相同的过程中执行的。因此,您可能应该将回调命名为“ process”,而不是“ processRemote”。

否则,您仍然可以从a separate Python script执行此操作。