Beispiel #1
0
def violin_filter(sig, length, freq):
    sigs=[]
    bodies = violinIRs
    for body in bodies:
        sigs.append(convolve(+sig,+body))
    sig = sf.Mix(
        sf.FixSize(sf.Clean(sf.Mix(sigs))),
        sig
    )
    
    if length > 250:
        # TODO feels a bit crushed - more stages?
        vibStart  = length*0.5  if length>600 else vibAbove*0.75
        vibMiddle = length*0.75 if length>600 else vibAbove
        vibAmount = 0.5 if length > 1000 else 0.25
        trueLen = sf.Length(+sig)
        l = trueLen
        env = sf.NumericShape((0, 0), (vibStart, 0), (vibMiddle, 1), (length, 0.75), (l, 0))
        env = sf.NumericVolume(env, vibAmount)
        trem = sf.SineWave(l,2.0 + random.random())
        trem = sf.Multiply(env, trem)
        vib = +trem
        trem = sf.DirectMix(1, sf.Pcnt50(trem))
        sig = sf.Multiply(trem, sig)
        vib = sf.DirectMix(1, sf.NumericVolume(vib, 0.01))
        sig = sf.Resample(vib, sig)

    return sf.FixSize(sf.Clean(sig))
Beispiel #2
0
def violin_filter(sig, freq):
    with SFMemoryZone():
        length = sf.Length(sig)
        sigs = []
        bodies = violinIRs
        for body in bodies:
            sigs.append(convolve(+sig, +body))
        sig = sf.Mix(sf.FixSize(sf.Clean(sf.Mix(sigs))), sig)

        vibAbove = 250
        if length > vibAbove:
            # TODO feels a bit crushed - more stages?
            vibStart = length * 0.5 if length > 600 else vibAbove * 0.75
            vibMiddle = length * 0.75 if length > 600 else vibAbove
            vibAmount = 0.5 if length > 1000 else 0.25
            trueLen = sf.Length(+sig)
            l = trueLen
            env = sf.LinearShape((0, 0), (vibStart, 0), (vibMiddle, 1),
                                 (length, 0.75), (l, 0))
            env = sf.LinearVolume(env, vibAmount)
            trem = sf.SineWave(l, 2.0 + random.random())
            trem = sf.Multiply(env, trem)
            vib = +trem
            trem = sf.DirectMix(1, sf.Pcnt50(trem))
            sig = sf.Multiply(trem, sig)
            vib = sf.DirectMix(1, sf.LinearVolume(vib, 0.01))
            sig = sf.Resample(vib, sig)

        return sf.FixSize(sf.Clean(sig)).keep()
Beispiel #3
0
def echo_division(sig_):
    sig = sig_
    m1 = sf.Magnitude(sig)
    if m1 == 0.0:
        return sig
    length = sf.Length(sig)
    convol = sf.ReadFile("temp/impulses/swell.wav")[0]
    sigW = None
    if sf.Length(sig) > sf.Length(convol) * 2.0:
        sigW = reverberate(sig, convol)
    else:
        sigW = convolve(sig, convol)
    sig = realise(sig, sigW)
    m2 = sf.Magnitude(sig)
    sig = realise(sf.LinearVolume(sig, m1 / m2))
    return sig
def echo_division(sig_):
    sig = sig_
    m1=sf.Magnitude(sig)
    if m1 == 0.0:
        return sig
    length=sf.Length(sig)
    convol=sf.ReadFile("temp/impulses/swell.wav")[0]
    sigW = None
    if sf.Length(sig) > sf.Length(convol) * 2.0:
        sigW = reverberate(sig, convol)
    else:
        sigW = convolve(sig, convol)
    sig = realise(sig, sigW)
    m2 = sf.Magnitude(sig)
    sig = realise(sf.LinearVolume(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.LinearVolume(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/impulses/swell.wav")[0]
    sigW = None
    if sf.Length(sig) > sf.Length(convol) * 2.0:
        sigW = reverberate(sig, convol)
    else:
        sigW = convolve(sig, convol)
    sig=mix(sig, sigW)
    m2=sf.Magnitude(sig)
    sig=realise(sf.LinearVolume(sig, m1/m2))
    return sig
Beispiel #6
0
def tremolate(sig_, rate, mag):
    sig = sig_
    m1 = sf.Magnitude(sig)
    if m1 == 0.0:
        return sig
    length = sf.Length(sig)
    ev = sf.LinearVolume(
        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/impulses/swell.wav")[0]
    sigW = None
    if sf.Length(sig) > sf.Length(convol) * 2.0:
        sigW = reverberate(sig, convol)
    else:
        sigW = convolve(sig, convol)
    sig = mix(sig, sigW)
    m2 = sf.Magnitude(sig)
    sig = realise(sf.LinearVolume(sig, m1 / m2))
    return sig
Beispiel #7
0
def sing(
        hint,
        pitch,
        lengthIn,
        v,
        vl,
        vr,
        voice,
        velocity_correct_,
        quick_factor,
        sub_bass,
        flat_env,
        pure,
        raw_bass,
        decay,
        bend,
        mellow,
        smooth,
        slope,
    ):
    if pitch > 20000:
        raise ValueError('Pitch too great {0}'.format(pitch))
    with SFMemoryZone():
        velocity_correct=velocity_correct_
        length=lengthIn
        tp=0

        # minimum play time
        if length<192:
            length=192
            tp=0
        elif length<363:
            length+=128
            tp=1
        elif length<512:
            length+=256
            tp=2
        elif length<1024:
            length+=128
            tp=3
        else:
            tp=4

        sig=[]
        if pure:
            x=1
        else:
            if pitch<330:
                x=5
            elif pitch<880:
                x=6
            else:
                x=3
        for x in range(0,x):
            vc=voice(length,pitch*(1.0+random.random()*0.005))
            if quick_factor:
                vc=sf.Multiply(
                    linearEnv(
                        vc,
                        [
                            (0,0),
                            (24,1),
                            (sf.Length(vc)-24,1),
                            (sf.Length(vc),0)
                        ]
                    ),
                    vc
                )
                sig.append(
                    sf.LinearVolume(
                        sf.Concatenate(
                            sf.Silence(24*random.random()),
                            vc
                        )
                        ,random.random()+0.25
                    )
                )
            else:
                sig.append(sf.LinearVolume(vc, random.random()+0.25))

        sig = sf.FixSize(sf.Mix(sig))
        length=sf.Length(sig)

        if decay:
            # -60 db at 1 minute
            dbs=-60.0*float(length)/float(decay)
            env=sf.ExponentialShape((0,0),(length,dbs))
            sig=sf.Multiply(sig,env)

        pHint = hint[0]
        nHint = hint[1]
        shine = False
        env = None
        if quick_factor:
            if tp==0:
                if pHint=="T":
                    q=32
                else:
                    q=64
                if nHint=="T":
                    p=32
                else:
                    p=64
                q*=quick_factor
                env=linearEnv(sig,[(0,0),(q,1),(192-p,0.5),(length,0)])
                if hint=="TT":
                    velocity_correct*=0.8
                elif hint=="NN" and pitch>660:
                    shine=True
                    velocity_correct*=0.5
            elif tp==1 or flat_env:
                if pHint=="T":
                    q=48
                else:
                    q=96
                if nHint=="T":
                    p=64
                else:
                    p=128
                q*=quick_factor
                env=linearEnv(sig,[(0,0),(q,0.75),(length-p,1.0),(length,0)])
                if hint=="TT":
                    velocity_correct*=0.8
                if hint=="TT":
                    velocity_correct*=0.8
                elif hint=="NN" and pitch>880:
                    shine=True
                    velocity_correct*=0.6
            elif tp==2:
                env=linearEnv(sig,[(0,0),(96*quick_factor,0.75),(length-256,1.0),(length,0)])
            elif tp==3:
                if length<1280:
                    env=linearEnv(sig,[(0,0),(64*quick_factor,0.5),(256,1),(512,0.75),((length-512)/2.0+512,0.5),(length,0)])
                else:
                    env=linearEnv(sig,[(0,0),(64*quick_factor,0.5),(256,1),(512,0.75),(length-512,0.75),(length,0)])
            else:
                env=linearEnv(sig,[(0,0),(64*quick_factor,0.25),(512,1),(length/2,0.75),(length,0)])

        if bend:
            mod=sf.LinearShape((0,0.995),(length,1.005))
            if env:
                mod=sf.Mix(mod,sf.LinearVolume(+env,0.01))
            # if we have envelope extension then we don't do this as
            # it get really hard to get the lengths correct and make
            # sense of what we are trying to do. KISS
            if sf.Length(+sig)==sf.Length(+mod):
                sig=sf.FrequencyModulate(sig,mod)

        sig=sf.FixSize(sig)
        if mellow:
            if pitch<256:
                if sub_bass:
                    if pitch < 128:
                        sig=sf.Mix(
                            granular_reverberate(+sig,ratio=0.501 ,delay=256,density=32,length=256,stretch=1,vol=0.20),
                            granular_reverberate(+sig,ratio=0.2495,delay=256,density=32,length=256,stretch=1,vol=0.10),
                            sig
                        )
                    elif pitch < 192:
                        sig=sf.Mix(
                            granular_reverberate(+sig,ratio=0.501,delay=256,density=32,length=256,stretch=1,vol=0.25),
                            sig
                        )
                    else:
                        sig=sf.Mix(
                            granular_reverberate(+sig,ratio=0.501,delay=256,density=32,length=256,stretch=1,vol=0.15),
                            sig
                        )
                if raw_bass:
                    sig=sf.BesselLowPass(sig,pitch*8.0,1)
                else:
                    sig=sf.BesselLowPass(sig,pitch*8.0,2)
            if pitch<392:
                sig=sf.BesselLowPass(sig,pitch*6.0,2)
            elif pitch<512:
                sig=sf.Mix(
                    sf.BesselLowPass(+sig,pitch*6.0, 2),
                    sf.BesselLowPass( sig,pitch*3.0, 2)
                )
            elif pitch<640:
                sig=sf.BesselLowPass(sig,pitch*3.5, 2)
            elif pitch<1280:
                sig=sf.Mix(
                    sf.BesselLowPass(+sig,pitch*3.5, 2),
                    sf.BesselLowPass( sig,pitch*5.0, 2)
                )
            else:
                sig=sf.Mix(
                    sf.BesselLowPass(+sig,pitch*5, 2),
                    sf.BesselLowPass( sig,5000,    1)
                )

        if env:
            sig=sf.Multiply(sig,env)
        # Aggressively clean up an dc offset or other issue on the tail.
        sig = sf.RTrim(sig)
        length = sf.Length(sig)
        sig = sf.Multiply(
            sf.LinearShape(((0,1), (length - 10, 1), (length, 0))),
            sig
            )
        sig=sf.FixSize(sig)

        if smooth:
            cnv=sf.WhiteNoise(10240)
            cnv=sf.ButterworthHighPass(cnv,32,4)
            if shine:
                q=640
                print "Shine"
            else:
                q=256
            cnv=sf.Cut(5000,5000+q,cnv)
            cnv=sf.Multiply(cnv,sf.LinearShape((0,0),(32,1),(q,0)))
            sigr=convolve(+sig,cnv)
            length = sf.Length(sigr)
            env = None
            if length > 300:
                env = linearEnv(sigr,[(0,0),(256,1),( length - 20,1.5), (length, 0)])
            else:
                env = linearEnv(sigr,[(0,0),(length / 2.0, 1), (length, 0)])
            sigr=sf.Multiply(env, sigr)
            sig=sf.Mix(
                sf.Pcnt20(sigr),
                sf.Pcnt80(sig)
            )
            slopeEnv = sf.ExponentialShape(slope)
            velocity_correct *= sf.ValueAt(slopeEnv, pitch)
            print 'VCorrect: {0}'.format(velocity_correct)
        note  = sf.LinearVolume(sf.FixSize(sig), v)
        notel = sf.LinearVolume(note, vl*velocity_correct).keep()
        noter = sf.LinearVolume(note, vr*velocity_correct).keep()
        return notel, noter
Beispiel #8
0
def sing(
    hint,
    pitch,
    lengthIn,
    v,
    vl,
    vr,
    voice,
    velocity_correct_,
    quick_factor,
    sub_bass,
    flat_env,
    pure,
    raw_bass,
    decay,
    bend,
    mellow,
    smooth,
    slope,
):
    if pitch > 20000:
        raise ValueError('Pitch too great {0}'.format(pitch))
    with SFMemoryZone():
        velocity_correct = velocity_correct_
        length = lengthIn
        tp = 0

        # minimum play time
        if length < 192:
            length = 192
            tp = 0
        elif length < 363:
            length += 128
            tp = 1
        elif length < 512:
            length += 256
            tp = 2
        elif length < 1024:
            length += 128
            tp = 3
        else:
            tp = 4

        sig = []
        if pure:
            x = 1
        else:
            if pitch < 330:
                x = 5
            elif pitch < 880:
                x = 6
            else:
                x = 3
        for x in range(0, x):
            vc = voice(length, pitch * (1.0 + random.random() * 0.005))
            if quick_factor:
                vc = sf.Multiply(
                    linearEnv(vc, [(0, 0), (24, 1), (sf.Length(vc) - 24, 1),
                                   (sf.Length(vc), 0)]), vc)
                sig.append(
                    sf.LinearVolume(
                        sf.Concatenate(sf.Silence(24 * random.random()), vc),
                        random.random() + 0.25))
            else:
                sig.append(sf.LinearVolume(vc, random.random() + 0.25))

        sig = sf.FixSize(sf.Mix(sig))
        length = sf.Length(sig)

        if decay:
            # -60 db at 1 minute
            dbs = -60.0 * float(length) / float(decay)
            env = sf.ExponentialShape((0, 0), (length, dbs))
            sig = sf.Multiply(sig, env)

        pHint = hint[0]
        nHint = hint[1]
        shine = False
        env = None
        if quick_factor:
            if tp == 0:
                if pHint == "T":
                    q = 32
                else:
                    q = 64
                if nHint == "T":
                    p = 32
                else:
                    p = 64
                q *= quick_factor
                env = linearEnv(sig, [(0, 0), (q, 1), (192 - p, 0.5),
                                      (length, 0)])
                if hint == "TT":
                    velocity_correct *= 0.8
                elif hint == "NN" and pitch > 660:
                    shine = True
                    velocity_correct *= 0.5
            elif tp == 1 or flat_env:
                if pHint == "T":
                    q = 48
                else:
                    q = 96
                if nHint == "T":
                    p = 64
                else:
                    p = 128
                q *= quick_factor
                env = linearEnv(sig, [(0, 0), (q, 0.75), (length - p, 1.0),
                                      (length, 0)])
                if hint == "TT":
                    velocity_correct *= 0.8
                if hint == "TT":
                    velocity_correct *= 0.8
                elif hint == "NN" and pitch > 880:
                    shine = True
                    velocity_correct *= 0.6
            elif tp == 2:
                env = linearEnv(sig, [(0, 0), (96 * quick_factor, 0.75),
                                      (length - 256, 1.0), (length, 0)])
            elif tp == 3:
                if length < 1280:
                    env = linearEnv(sig, [(0, 0), (64 * quick_factor, 0.5),
                                          (256, 1), (512, 0.75),
                                          ((length - 512) / 2.0 + 512, 0.5),
                                          (length, 0)])
                else:
                    env = linearEnv(sig, [(0, 0), (64 * quick_factor, 0.5),
                                          (256, 1), (512, 0.75),
                                          (length - 512, 0.75), (length, 0)])
            else:
                env = linearEnv(sig, [(0, 0), (64 * quick_factor, 0.25),
                                      (512, 1), (length / 2, 0.75),
                                      (length, 0)])

        if bend:
            mod = sf.LinearShape((0, 0.995), (length, 1.005))
            if env:
                mod = sf.Mix(mod, sf.LinearVolume(+env, 0.01))
            # if we have envelope extension then we don't do this as
            # it get really hard to get the lengths correct and make
            # sense of what we are trying to do. KISS
            if sf.Length(+sig) == sf.Length(+mod):
                sig = sf.FrequencyModulate(sig, mod)

        sig = sf.FixSize(sig)
        if mellow:
            if pitch < 256:
                if sub_bass:
                    if pitch < 128:
                        sig = sf.Mix(
                            granular_reverberate(+sig,
                                                 ratio=0.501,
                                                 delay=256,
                                                 density=32,
                                                 length=256,
                                                 stretch=1,
                                                 vol=0.20),
                            granular_reverberate(+sig,
                                                 ratio=0.2495,
                                                 delay=256,
                                                 density=32,
                                                 length=256,
                                                 stretch=1,
                                                 vol=0.10), sig)
                    elif pitch < 192:
                        sig = sf.Mix(
                            granular_reverberate(+sig,
                                                 ratio=0.501,
                                                 delay=256,
                                                 density=32,
                                                 length=256,
                                                 stretch=1,
                                                 vol=0.25), sig)
                    else:
                        sig = sf.Mix(
                            granular_reverberate(+sig,
                                                 ratio=0.501,
                                                 delay=256,
                                                 density=32,
                                                 length=256,
                                                 stretch=1,
                                                 vol=0.15), sig)
                if raw_bass:
                    sig = sf.BesselLowPass(sig, pitch * 8.0, 1)
                else:
                    sig = sf.BesselLowPass(sig, pitch * 8.0, 2)
            if pitch < 392:
                sig = sf.BesselLowPass(sig, pitch * 6.0, 2)
            elif pitch < 512:
                sig = sf.Mix(sf.BesselLowPass(+sig, pitch * 6.0, 2),
                             sf.BesselLowPass(sig, pitch * 3.0, 2))
            elif pitch < 640:
                sig = sf.BesselLowPass(sig, pitch * 3.5, 2)
            elif pitch < 1280:
                sig = sf.Mix(sf.BesselLowPass(+sig, pitch * 3.5, 2),
                             sf.BesselLowPass(sig, pitch * 5.0, 2))
            else:
                sig = sf.Mix(sf.BesselLowPass(+sig, pitch * 5, 2),
                             sf.BesselLowPass(sig, 5000, 1))

        if env:
            sig = sf.Multiply(sig, env)
        # Aggressively clean up an dc offset or other issue on the tail.
        sig = sf.RTrim(sig)
        length = sf.Length(sig)
        sig = sf.Multiply(
            sf.LinearShape(((0, 1), (length - 10, 1), (length, 0))), sig)
        sig = sf.FixSize(sig)

        if smooth:
            cnv = sf.WhiteNoise(10240)
            cnv = sf.ButterworthHighPass(cnv, 32, 4)
            if shine:
                q = 640
                print "Shine"
            else:
                q = 256
            cnv = sf.Cut(5000, 5000 + q, cnv)
            cnv = sf.Multiply(cnv, sf.LinearShape((0, 0), (32, 1), (q, 0)))
            sigr = convolve(+sig, cnv)
            length = sf.Length(sigr)
            env = None
            if length > 300:
                env = linearEnv(sigr, [(0, 0), (256, 1), (length - 20, 1.5),
                                       (length, 0)])
            else:
                env = linearEnv(sigr, [(0, 0), (length / 2.0, 1), (length, 0)])
            sigr = sf.Multiply(env, sigr)
            sig = sf.Mix(sf.Pcnt20(sigr), sf.Pcnt80(sig))
            slopeEnv = sf.ExponentialShape(slope)
            velocity_correct *= sf.ValueAt(slopeEnv, pitch)
            print 'VCorrect: {0}'.format(velocity_correct)
        note = sf.LinearVolume(sf.FixSize(sig), v)
        notel = sf.LinearVolume(note, vl * velocity_correct).keep()
        noter = sf.LinearVolume(note, vr * velocity_correct).keep()
        return notel, noter
Beispiel #9
0
def sing(hint,pitch,lengthIn,v,vl,vr,voice,velocity_correct_,quick_factor,
         sub_bass,flat_env,pure,raw_bass,decay,bend,mellow):
         
    d_log('Playing note:',NOTE_COUNTER.incrementAndGet(),voice)
    velocity_correct=velocity_correct_
    length=lengthIn
    tp=0
    
    # minimum play time
    if length<192:
        length=192
        tp=0  
    elif length<363:
        length+=128
        tp=1
    elif length<512:
        length+=256
        tp=2
    elif length<1024:
        length+=128
        tp=3
    else:
        tp=4

    sig=[]
    if pure:
        x=1
    else:
        if pitch<330:
            x=5
        elif pitch<880:
            x=6
        else:
            x=3
    for x in range(0,x):
        vc=voice(length,pitch*(1.0+random.random()*0.005))
        vc=sf.Multiply(
            safe_env(
                vc,
                [
                    (0,0),
                    (24,1),
                    (sf.Length(+vc)-24,1),
                    (sf.Length(+vc),0)
                ]
            ),
            vc
        )
        sig.append(
            sf.NumericVolume(
                sf.Concatenate(
                    sf.Silence(24*random.random()),
                    vc
                )
                ,random.random()+0.25
            )
        )
    sig=sf.Realise(sf.Mix(sig))
    
    sig = sf.FixSize(sig)
    length=sf.Length(+sig)
    
    if decay:
        # -60 db at 1 minute
        dbs=-60.0*float(length)/float(decay)
        env=sf.SimpleShape((0,0),(length,dbs))
        sig=sf.Multiply(sig,env)
    
    pHint=hint[0]
    nHint=hint[1]
    shine=False
    if quick_factor:
        if tp==0:
            if pHint=="T":
                q=32
            else:
                q=64
            if nHint=="T":
                p=32
            else:
                p=64
            q*=quick_factor
            env=safe_env(sig,[(0,0),(q,1),(192-p,0.5),(length,0)])
            if hint=="TT":
                velocity_correct*=0.8
            elif hint=="NN" and pitch>660:
                shine=True
                velocity_correct*=0.5        
        elif tp==1 or flat_env:
            if pHint=="T":
                q=48
            else:
                q=96
            if nHint=="T":
                p=64
            else:
                p=128
            q*=quick_factor
            env=safe_env(sig,[(0,0),(q,0.75),(length-p,1.0),(length,0)])
            if hint=="TT":
                velocity_correct*=0.8            
            if hint=="TT":
                velocity_correct*=0.8
            elif hint=="NN" and pitch>880:
                shine=True
                velocity_correct*=0.6
        elif tp==2:
            env=safe_env(sig,[(0,0),(96*quick_factor,0.75),(length-256,1.0),(length,0)])
        elif tp==3:
            if length<1280:
                env=safe_env(sig,[(0,0),(64*quick_factor,0.5),(256,1),(512,0.75),((length-512)/2.0+512,0.5),(length,0)])
            else:
                env=safe_env(sig,[(0,0),(64*quick_factor,0.5),(256,1),(512,0.75),(length-512,0.75),(length,0)])
        else:
            env=safe_env(sig,[(0,0),(64*quick_factor,0.25),(512,1),(length/2,0.75),(length,0)])
    else:
        env=safe_env(sig,[(0,1),(length,1)])

    if bend:
        mod=sf.NumericShape((0,0.995),(length,1.005))
        mod=sf.Mix(mod,sf.NumericVolume(+env,0.01))
        # if we have envelope extension then we don't do this as
        # it get really hard to get the lengths correct and make 
        # sense of what we are trying to do. KISS
        if sf.Length(+sig)==sf.Length(+mod):
            sig=sf.FrequencyModulate(sig,mod)  
        else:
            -mod

    sig=sf.FixSize(sig)
    if mellow:
        if pitch<256:
            if sub_bass:
                if pitch < 128:
                    sig=sf.Mix(
                        granular_reverberate(+sig,ratio=0.501 ,delay=256,density=32,length=256,stretch=1,vol=0.20),
                        granular_reverberate(+sig,ratio=0.2495,delay=256,density=32,length=256,stretch=1,vol=0.10),
                        sig
                    )
                elif pitch < 192:
                    sig=sf.Mix(
                        granular_reverberate(+sig,ratio=0.501,delay=256,density=32,length=256,stretch=1,vol=0.25),
                        sig
                    )
                else:
                    sig=sf.Mix(
                        granular_reverberate(+sig,ratio=0.501,delay=256,density=32,length=256,stretch=1,vol=0.15),
                        sig
                    )
            if raw_bass:
                sig=sf.BesselLowPass(sig,pitch*8.0,1)
            else:        
                sig=sf.BesselLowPass(sig,pitch*8.0,2)
        if pitch<392:
            sig=sf.BesselLowPass(sig,pitch*6.0,2)
        elif pitch<512:
            sig=sf.Mix(
                sf.BesselLowPass(+sig,pitch*6.0, 2),
                sf.BesselLowPass( sig,pitch*3.0, 2)
            )                
        elif pitch<640:
            sig=sf.BesselLowPass(sig,pitch*3.5, 2)
        elif pitch<1280:
            sig=sf.Mix(
                sf.BesselLowPass(+sig,pitch*3.5, 2),
                sf.BesselLowPass( sig,pitch*5.0, 2)
            )                
        else:
            sig=sf.Mix(
                sf.BesselLowPass(+sig,pitch*5, 2),
                sf.BesselLowPass( sig,5000,    1)
            )

    sig=sf.Multiply(sig,env)                     
    sig=sf.FixSize(sig)
    
    cnv=sf.WhiteNoise(10240)
    cnv=sf.ButterworthHighPass(cnv,32,4)
    if shine:
        q=640
        print "Shine"
    else:
        q=256
    cnv=sf.Cut(5000,5000+q,cnv)
    cnv=sf.Multiply(cnv,sf.NumericShape((0,0),(32,1),(q,0)))
    sigr=convolve(+sig,cnv)
    sigr=sf.Multiply(
        safe_env(sigr,[(0,0),(256,1),(sf.Length(+sigr),1.5)]),
        sigr
    )
    sig=sf.Mix(
        sf.Pcnt20(sigr),
        sf.Pcnt80(sig)
    )
    
    note=sf.NumericVolume(sf.FixSize(sig),v)
    notel=sf.Realise(sf.NumericVolume(+note,vl*velocity_correct))
    noter=sf.Realise(sf.NumericVolume( note,vr*velocity_correct))
    return notel,noter
Beispiel #10
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.LinearVolume(white, whiteAmount)
        signal = sf.LinearVolume(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.LinearShape((0, 0.25), (a, 0), (length, 0))
        sq = sf.Multiply(envb, sf.FixSize(sq))

        enva = sf.LinearShape((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.LinearShape((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.LinearVolume(sf.FixSize(signal), 0.05))

        return sf.FixSize(sf.Clean(signal))
Beispiel #11
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.LinearVolume(white,whiteAmount)
        signal=sf.LinearVolume(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.LinearShape((0,0.25),(a,0),(length,0))
        sq=sf.Multiply(envb,sf.FixSize(sq))
    
        enva=sf.LinearShape((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.LinearShape((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.LinearVolume(sf.FixSize(signal),0.05)
        )
        
        return sf.FixSize(sf.Clean(signal))