示例#1
0
    public FMVoice(string name, FMSynthesizer parent)
    {
        Name = name;
        p    = parent.UI;

        eg         = new EnvelopeGenerator(name);
        eg.Attack  = p.Attack1;
        eg.Decay   = p.Decay1;
        eg.Sustain = p.Sustain1;
        eg.Release = p.Release1;

        eg2         = new EnvelopeGenerator(name);
        eg2.Attack  = p.Attack2;
        eg2.Decay   = p.Decay2;
        eg2.Sustain = p.Sustain2;
        eg2.Release = p.Release2;


        table = new float[Settings.SampleRate / 220];

        for (int i = 0; i < table.Length; i++)
        {
            table[i] = Mathf.Sin(TWO_PI * ((float)i / (float)(table.Length - 1))) * .8f;// + (Mathf.Pow( UnityEngine.Random.Range(0,1), 5 )*2-1);
            //Debug.Log(table[i]);
        }
        index = 0;
    }
示例#2
0
    public void EmitFMGrain(FMSynthesizer syn, float time)
    {
        var length     = (int)(time * this.SamplingRate);
        var realLength = Math.Min(length, this.Data.Length - this.nextIn);

        syn.GenerateGrain(this.Data, this.nextIn, realLength, this.SamplingRate);
        this.nextIn += realLength;
    }
示例#3
0
 void Start()
 {
     fm = new FMSynthesizer(this, 6);
     UpdateParams();
     ready = true;
 }