コード例 #1
0
 private void CleanupFinishedGrains()
 {
     for (int i = this.grains.Count - 1; i >= 0; i--)
     {
         GranularAudioClip.Grain item = this.grains[i];
         if (item.finished)
         {
             Pool.Free <GranularAudioClip.Grain>(ref item);
             this.grains.RemoveAt(i);
         }
     }
 }
コード例 #2
0
    private void SpawnGrain()
    {
        if (this.grainFrequencySamples == 0)
        {
            return;
        }
        int start = Mathf.FloorToInt((this.sourceTime + ((float)(this.random.NextDouble() * (double)this.sourceTimeVariation * 2.0) - this.sourceTimeVariation)) * (float)this.sampleRate / (float)this.sourceChannels);

        GranularAudioClip.Grain grain = (GranularAudioClip.Grain)Pool.Get <GranularAudioClip.Grain>();
        grain.Init(this.sourceAudioData, start, this.grainAttackSamples, this.grainSustainSamples, this.grainReleaseSamples);
        this.grains.Add(grain);
        this.samplesUntilNextGrain = this.grainFrequencySamples;
    }
コード例 #3
0
 private void CleanupFinishedGrains()
 {
     for (int index = this.grains.Count - 1; index >= 0; --index)
     {
         GranularAudioClip.Grain grain = this.grains[index];
         if (grain.finished)
         {
             // ISSUE: cast to a reference type
             Pool.Free <GranularAudioClip.Grain>((M0&)ref grain);
             this.grains.RemoveAt(index);
         }
     }
 }