+from scipy.io import wavfile
+from scipy.signal import resample
+ print("usage: %s <in_file> <out_file> <pitch_percent> <robot>\n"%(sys.argv[0]));
+srate, din = wavfile.read(sys.argv[1])
+dout = np.zeros(din.size)
+coeff=float(sys.argv[3])/100
+fpb = srate/ws # frequency per bin
+exp = 2*np.pi*ss/ws # expected phase
+k = np.linspace(1, ws/2+1, ws/2+1) # ramp
+lph = np.zeros(ws/2+1) # last phase
+sum_phase = np.zeros(ws/2+1)
+num_bl = int(din.size/ss)
+for i in range(int((din.size-ws)/ss)):
+ b = (din[i*ss:i*ss+ws] / 2**16) * w
+ # --------------------------------
+ magn = 2.0 * np.sqrt(re**2+im**2)
+ phase = np.arctan2(im, re)
+ # subtract expected phase diff
+ while len(freq[freq<-np.pi]): freq[freq<-np.pi]+=2*np.pi
+ while len(freq[freq>np.pi]): freq[freq>np.pi]-=2*np.pi
+ # get deviation from bin
+ freq = overlap*freq/2.0/np.pi
+ # get partial's true freq
+ freq = k*fpb + freq*fpb
+ magn[idx] = synfr[ii]*coeff * (np.random.random())
+ if sys.argv[4][0]=='1':
+ freq = np.zeros(freq.size)
+ # --------------------------------
+ # subtract the bin mid freq
+ freq = 2.0*np.pi*freq/overlap
+ # add the overlap phase advance
+ # accumulate delta phase
+ ff = magn*np.cos(sum_phase) + magn*np.sin(sum_phase)*1j
+ dout[i*ss:i*ss+ws] += b*w
+wavfile.write(sys.argv[2], srate, dout)