Search code examples
compressionpyaudio

Pyaudio : how to compress audio stream


I'm currently developping a VOIP tool in python working as a client-server as follows :

CHUNK = 1024
p = pyaudio.PyAudio()
stream = p.open(format = pyaudio.paInt16,
        channels = 1,
        rate = 44100,
        input = True,
        frames_per_buffer = CHUNK)

while 1:
    connection.sendVoice(stream.read(CHUNK))

How could I proceed to compress the sent data to spare connection, maybe increase speed, ...


Solution

  • import time, sys,io
    import pymedia.audio.sound as sound
    import pymedia.audio.acodec as acodec
    import pymedia.muxer as muxer
    
    
    def voiceRecorder( secs, name ):
      f = open(name,'wb')
      secs = secs*5
      dm= muxer.Demuxer('mp3')
      snds= sound.getODevices()
      rt = 44100
      cparams= { 'id': acodec.getCodecID( 'mp3' ),
                 'bitrate': 128000/4,
                 'sample_rate': rt,
                 'channels': 2 } 
      ac= acodec.Encoder( cparams )
      snd= sound.Input( rt, 2, sound.AFMT_S16_LE )
      snd.start()
      start_time = time.time()
    
      while snd.getPosition()<= secs:
    
       s= snd.getData()
       if s and len( s ):
    
         for fr in ac.encode( s ):
           f.write( fr)
    
        else:
          time.sleep(.25)
    
    
    
      snd.stop()
    
    
    if __name__ == "__main__":
      if len( sys.argv )!= 3:
        print 'Usage: voice_recorder <seconds> <file_name>'
      else:
        voiceRecorder( int( sys.argv[ 1 ] ), sys.argv[ 2 ]  )