# wierd eigensound approach - project into learned pca space # fft -> matrix -> ifft -> sound from magicsquares import * import numpy as np import scipy.io.wavfile import math source_dir = "../sound/source/" render_dir = "../sound/render/" def fadeinout(s,slength,elength): for i in range(0,slength): m = float(i)/slength; s[i]*=m for i in range(0,elength): m = float(i)/elength; s[(len(s)-1)-i]*=m return s def normalise(s): m = 0 p = 999999999999999999 for i in range(0,len(s)): if ms[i]: p=s[i] b = max(m,-p) if b>0: s/=float(b/10000.0) return s def arr_to_fv(a): vp = FloatVector(len(a)) for i in range(0,vp.Size()): vp[i]=float(a[i]) return vp def fv_to_arr(a): ret = np.zeros(a.Size(),dtype=np.float32) for i in range(0,a.Size()): ret[i]=a[i] return ret def build_pca(filename,s): pca = PCA(len(s[0])) for i,v in enumerate(s): print(i/float(len(s))*100.0) pca.AddFeature(arr_to_fv(v)) print("making eigenmatrix") pca.Calculate() print("saving eigenmatrix") f = OpenFile(filename, "wb") pca.Save(f) CloseFile(f) return pca def load_pca(filename): pca = PCA(1) f = OpenFile(filename, "rb") pca.Load(f) CloseFile(f) pca.Compress(2,40) return pca def synth_sound(s,pca): p = pca.Project(arr_to_fv(s)) #for i in range(0,p.Size()): # if i<50 and i>5: p[i]=0 # if i>100: p[i]=0 s = pca.Synth(p) return s def project_eigen_sound(pca,row,gain): return fv_to_arr(pca.GetEigenTransform().GetRowVector(row)*gain) def fftify(chopped): return map(lambda i: np.array(np.fft.fft(i),dtype=np.float32), chopped) def chop(wav,size,overlap): ret = [] pos = 0 seg = [] samples = wav[1] while (pos+size