def echo_division(sig_):
    sig = sig_
    m1 = sf.Magnitude(+sig)
    if m1 == 0.0:
        return sig
    length = sf.Length(+sig)
    convol = sf.ReadFile("temp/swell.wav")
    sigW = convolve(+sig, convol[0])
    sig = realise(sig, sigW)
    c_log("Reference count:", sig.getReferenceCount())
    m2 = sf.Magnitude(+sig)
    sig = realise(sf.NumericVolume(sig, m1 / m2))
    return sig
def tremolate(sig_, rate, mag):
    sig = sig_
    m1 = sf.Magnitude(+sig)
    if m1 == 0.0:
        return sig
    length = sf.Length(+sig)
    ev = sf.NumericVolume(sf.MakeTriangle(sf.PhasedSineWave(length + 64, rate, random.random())), mag)
    ev = sf.Cut(0, length, ev)
    fv = sf.Pcnt2(+ev)
    ev = sf.DirectMix(1.0, ev)
    sig = sf.FrequencyModulate(sig, fv)
    sig = sf.Multiply(ev, sig)
    convol = sf.ReadFile("temp/swell.wav")
    sigW = convolve(+sig, convol[0])
    sig = mix(sig, sigW)
    m2 = sf.Magnitude(+sig)
    sig = realise(sf.NumericVolume(sig, m1 / m2))
    return sig
示例#3
0
    def play_string_clean(a,length,freq,whiteAmount,body):
        def rsd():
            return raw_string(length,freq)
        
        signal=0
        if(freq>500):
            signal=sf.FixSize(sf.Mix(rsd(),rsd(),rsd()))
        else:
            signal=sf.FixSize(sf.Mix(rsd(),rsd()))

        if not bright:
            if(freq>440):    
                signal=sf.ButterworthHighPass(signal,freq*0.5,6)
                signal=sf.ButterworthHighPass(signal,2000,1)
                signal=sf.ButterworthLowPass(signal,8000,1)
            if(freq<128):
                signal=sf.ButterworthHighPass(signal,freq*0.5,1)
                signal=sf.ButterworthHighPass(signal,500,1)
                signal=sf.ButterworthLowPass(signal,2000,1)
            else:
                signal=sf.ButterworthHighPass(signal,freq*0.5,3)
                signal=sf.ButterworthHighPass(signal,1500,1)
                signal=sf.ButterworthLowPass(signal,4000,1)
        
            signal=sf.ButterworthLowPass(signal,freq*10.0,1)
            
        signal=sf.Mix(
            sf.Pcnt25(+signal),
            sf.Pcnt75(sf.RBJNotch(signal,freq,0.5))
        )    

        white=sf.WhiteNoise(length)
        white=sf.ButterworthHighPass(white,freq*2.0,2)
        white=sf.ButterworthLowPass(white,freq*6.0,1)
        white=sf.FixSize(white)
        white=sf.Multiply(white,+signal)
        white=sf.NumericVolume(white,whiteAmount)
        signal=sf.NumericVolume(signal,1.0-whiteAmount)
        signal=sf.FixSize(sf.Mix(signal,white))
    
        sq=sf.Mix(
            sf.PhasedSineWave(length,freq*0.95,random.random()),
            sf.PhasedSineWave(length,freq*1.05,random.random())
        )
        envb=sf.NumericShape((0,0.25),(a,0),(length,0))
        sq=sf.Multiply(envb,sf.FixSize(sq))
    
        enva=sf.NumericShape((0,0.75),(a,1),(length,1))
        signal=sf.Multiply(enva,signal)
    
        signal=sf.Mix(sq,sf.FixSize(signal))
        
        sigs=[]
        bodies=[]
        if body is None:
            if(freq<128):
                bodies=bassIRs
            elif(freq<440):
                bodies=celloIRs
            else:
                bodies=violinIRs
        else:
            bodies={
                'bass'  : bassIRs,
                'cello' : celloIRs,
                'violin': violinIRs
            }[body]

        if bright:
            bs=[]
            for b in bodies:
                bs.append(sf.Power(b,1.25))
            bodies=bs
            if freq<256:
                signal=sf.Power(signal,1.5)
            elif freq<512:
                signal=sf.Power(signal,1.25)
            elif freq<1024:
                signal=sf.Power(signal,1.15)
            else:
                signal=sf.Power(signal,1.05)
        
        env=sf.NumericShape((0,0),(16,1),(length-16,1),(length,0))
        signal=sf.Multiply(env,signal)

        for body in bodies:
            sigs.append(convolve(+signal,+body))
            
        signal=sf.Mix(
             sf.FixSize(sf.Mix(sigs)),
             sf.NumericVolume(sf.FixSize(signal),0.05)
        )
        
        return sf.FixSize(sf.Clean(signal))