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); } } }
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; }
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); } } }