Pyaudio:如何压缩音频流

时间:2014-09-16 13:48:14

标签: compression pyaudio

我目前正在python中开发一个VOIP工具,作为客户端 - 服务器,如下所示:

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))

我怎样才能将发送的数据压缩到备用连接,可能会提高速度......

2 个答案:

答案 0 :(得分:3)

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 ]  )

答案 1 :(得分:1)

哇我的计算是你发送了2KB多一点,确切地说是每个循环的2.0480KB音频到你的套接字连接:

(16 * 44.1 / 8)  * 1024/44100 = 2.0480

如果您将块更改为chunk,那么发送较少数据的一种简单方法是减少512大小,现在您只发送1KB以上的数据。

另一种方法是在python中使用zlib包在通过套接字发送后压缩stream.read数据,但是不要忘记在另一端解压缩。