NAO机器人远程音频问题

NAO机器人远程音频问题,第1张

NAO机器人远程音频问题

这是一个“小”样本

# -*- coding: utf-8 -*-############################################################ Retrieve robot audio buffer# Syntaxe:#    python scriptname --pip <ip> --pport <port># #    --pip <ip>: specify the ip of your robot (without specification it will use the NAO_IP defined some line below## Author: Alexandre Mazel###########################################################NAO_IP = "10.0.252.126" # Romeo on table#~ NAO_IP = "10.0.253.99" # Nao Alex Bluefrom optparse import OptionParserimport naoqiimport numpy as npimport timeimport sysclass SoundReceiverModule(naoqi.ALModule):    """    Use this object to get call back from the ALMemory of the naoqi world.    Your callback needs to be a method with two parameter (variable name, value).    """    def __init__( self, strModuleName, strNaoIp ):        try: naoqi.ALModule.__init__(self, strModuleName ); self.BIND_PYTHON( self.getName(),"callback" ); self.strNaoIp = strNaoIp; self.outfile = None; self.aOutfile = [None]*(4-1); # ASSUME max nbr channels = 4        except baseException, err: print( "ERR: abcdk.naoqitools.SoundReceiverModule: loading error: %s" % str(err) );    # __init__ - end    def __del__( self ):        print( "INF: abcdk.SoundReceiverModule.__del__: cleaning everything" );        self.stop();    def start( self ):        audio = naoqi.ALProxy( "ALAudioDevice", self.strNaoIp, 9559 );        nNbrChannelFlag = 0; # ALL_Channels: 0,  AL::LEFTCHANNEL: 1, AL::RIGHTCHANNEL: 2; AL::FRONTCHANNEL: 3  or AL::REARCHANNEL: 4.        nDeinterleave = 0;        nSampleRate = 48000;        audio.setClientPreferences( self.getName(),  nSampleRate, nNbrChannelFlag, nDeinterleave ); # setting same as default generate a bug !?!        audio.subscribe( self.getName() );        print( "INF: SoundReceiver: started!" );        # self.processRemote( 4, 128, [18,0], "A"*128*4*2 ); # for local test        # on romeo, here's the current order:        # 0: right;  1: rear;   2: left;   3: front,    def stop( self ):        print( "INF: SoundReceiver: stopping..." );        audio = naoqi.ALProxy( "ALAudioDevice", self.strNaoIp, 9559 );        audio.unsubscribe( self.getName() );     print( "INF: SoundReceiver: stopped!" );        if( self.outfile != None ): self.outfile.close();    def processRemote( self, nbOfChannels, nbrOfSamplesByChannel, aTimeStamp, buffer ):        """        This is THE method that receives all the sound buffers from the "ALAudioDevice" module        """        #~ print( "process!" );        #~ print( "processRemote: %s, %s, %s, lendata: %s, data0: %s (0x%x), data1: %s (0x%x)" % (nbOfChannels, nbrOfSamplesByChannel, aTimeStamp, len(buffer), buffer[0],ord(buffer[0]),buffer[1],ord(buffer[1])) );        #~ print( "raw data: " ),        #~ for i in range( 8 ): #~ print( "%s (0x%x), " % (buffer[i],ord(buffer[i])) ),        #~ print( "" );        aSoundDataInterlaced = np.fromstring( str(buffer), dtype=np.int16 );        #~ print( "len data: %s " % len( aSoundDataInterlaced ) );        #~ print( "data interlaced: " ),        #~ for i in range( 8 ): #~ print( "%d, " % (aSoundDataInterlaced[i]) ),        #~ print( "" );        aSoundData = np.reshape( aSoundDataInterlaced, (nbOfChannels, nbrOfSamplesByChannel), 'F' );        #~ print( "len data: %s " % len( aSoundData ) );        #~ print( "len data 0: %s " % len( aSoundData[0] ) );        if( False ): # compute average aAvgValue = np.mean( aSoundData, axis = 1 ); print( "avg: %s" % aAvgValue );        if( False ): # compute fft nBlockSize = nbrOfSamplesByChannel; signal = aSoundData[0] * np.hanning( nBlockSize ); aFft = ( np.fft.rfft(signal) / nBlockSize ); print aFft;        if( False ): # compute peak aPeakValue = np.max( aSoundData ); if( aPeakValue > 16000 ):     print( "Peak: %s" % aPeakValue );        if( True ): bSaveAll = True; # save to file if( self.outfile == None ):     strFilenameOut = "/out.raw";     print( "INF: Writing sound to '%s'" % strFilenameOut );     self.outfile = open( strFilenameOut, "wb" );     if( bSaveAll ):         for nNumChannel in range( 1, nbOfChannels ):  strFilenameOutChan = strFilenameOut.replace(".raw", "_%d.raw"%nNumChannel);  self.aOutfile[nNumChannel-1] = open( strFilenameOutChan, "wb" );  print( "INF: Writing other channel sound to '%s'" % strFilenameOutChan ); #~ aSoundDataInterlaced.tofile( self.outfile ); # wrote the 4 channels aSoundData[0].tofile( self.outfile ); # wrote only one channel #~ print( "aTimeStamp: %s" % aTimeStamp ); #~ print( "data wrotten: " ), #~ for i in range( 8 ):     #~ print( "%d, " % (aSoundData[0][i]) ), #~ print( "" );  #~ self.stop(); # make naoqi crashes if( bSaveAll ):     for nNumChannel in range( 1, nbOfChannels ):         aSoundData[nNumChannel].tofile( self.aOutfile[nNumChannel-1] );    # processRemote - end    def version( self ):        return "0.6";# SoundReceiver - enddef main():    """ Main entry point    """    parser = OptionParser()    parser.add_option("--pip",        help="Parent broker port. The IP address or your robot",        dest="pip")    parser.add_option("--pport",        help="Parent broker port. The port NAOqi is listening to",        dest="pport",        type="int")    parser.set_defaults(        pip=NAO_IP,        pport=9559)    (opts, args_) = parser.parse_args()    pip   = opts.pip    pport = opts.pport    # We need this broker to be able to construct    # NAOqi modules and subscribe to other modules    # The broker must stay alive until the program exists    myBroker = naoqi.ALBroker("myBroker",       "0.0.0.0",   # listen to anyone       0,# find a free port and use it       pip,         # parent broker IP       pport)       # parent broker port    # Warning: SoundReceiver must be a global variable    # The name given to the constructor must be the name of the    # variable    global SoundReceiver    SoundReceiver = SoundReceiverModule("SoundReceiver", pip)    SoundReceiver.start()    try:        while True: time.sleep(1)    except KeyboardInterrupt:        print        print "Interrupted by user, shutting down"        myBroker.shutdown()        sys.exit(0)if __name__ == "__main__":    main()


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5644553.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存