Пример #1
0
            /// <summary> Dispose of it to log it to the PerfMonitor </summary>
            public void Dispose()
            {
                if (_valid == false)
                {
                    return;
                }

                TimeSpan start = _timer.InitTime;
                double   ms    = _timer.Elapsed.TotalMilliseconds;

                long?deltaMem = null;

                                #if GC_THREADMEM_SUPPORT
                if (_mem.HasValue)
                {
                    deltaMem = System.GC.GetAllocatedBytesForCurrentThread() - _mem.Value;
                }
                                #endif
                var sampleInstance = new SampleInstance(_id, _depth, start, ms, deltaMem);
                if (_customDepth == false)
                {
                    _target.Depth--;
                }
                _target.Add(sampleInstance);
            }
 // Use this for initialization
 void Start()
 {
     sampleInstances = new List <SampleInstance>();
     foreach (Sample s in samples)
     {
         var instance = new SampleInstance();
         instance.sample = s;
         instance.source = gameObject.AddComponent <AudioSource>();
         instance.source.outputAudioMixerGroup = group;
         instance.source.volume = 0f;
         instance.source.clip   = s.clip;
         instance.source.Play();
         instance.source.loop   = true;
         instance.sample.volume = DbToLinear(instance.sample.volume);
         sampleInstances.Add(instance);
     }
 }
    public void SetRPM(float rpm)
    {
        if (sampleInstances == null)
        {
            return;
        }

        for (int i = 0; i < sampleInstances.Count; i++)
        {
            SampleInstance instance = sampleInstances[i];
            if (rpm < instance.sample.minRpm || rpm > instance.sample.maxRpm)
            {
                instance.source.volume = 0f;
            }
            else
            {
                //crossfade
                if (i >= 1 && sampleInstances[i - 1].sample.maxRpm > rpm)
                {
                    var   prevInstance = sampleInstances[i - 1];
                    float max          = prevInstance.sample.maxRpm;
                    float min          = instance.sample.minRpm;
                    float t            = (rpm - min) / (max - min);
                    instance.source.volume     = fadeCurve.Evaluate(t) * instance.sample.volume;
                    prevInstance.source.volume = fadeCurve.Evaluate(1 - t) * prevInstance.sample.volume;
                }
                else
                {
                    instance.source.volume = instance.sample.volume;
                }
                //autopitch
                float pitch = (1 / (instance.sample.autoPitchRoot)) * rpm;
                instance.source.pitch = pitch;
            }
        }
    }