There are two ways to build the package.
"""Acoustic Echo Cancellation for wav files."""importwaveimportsysfromspeexdspimportEchoCancelleriflen(sys.argv)<4:print('Usage: {} near.wav far.wav out.wav'.format(sys.argv[0]))sys.exit(1)frame_size=256near=wave.open(sys.argv[1],'rb')far=wave.open(sys.argv[2],'rb')ifnear.getnchannels()>1orfar.getnchannels()>1:print('Only support mono channel')sys.exit(2)out=wave.open(sys.argv[3],'wb')out.setnchannels(near.getnchannels())out.setsampwidth(near.getsampwidth())out.setframerate(near.getframerate())print('near - rate: {}, channels: {}, length: {}'.format(near.getframerate(),near.getnchannels(),near.getnframes()/near.getframerate()))print('far - rate: {}, channels: {}'.format(far.getframerate(),far.getnchannels()))echo_canceller=EchoCanceller.create(frame_size,2048,near.getframerate())in_data_len=frame_sizein_data_bytes=frame_size*2out_data_len=frame_sizeout_data_bytes=frame_size*2whileTrue:in_data=near.readframes(in_data_len)out_data=far.readframes(out_data_len)iflen(in_data)!=in_data_bytesorlen(out_data)!=out_data_bytes:breakin_data=echo_canceller.process(in_data,out_data)out.writeframes(in_data)near.close()far.close()out.close()