void PoolBufferedSample(BufferedSample sample) { sample.Clear(); lock ( _pool ) { _pool.Push(sample); } }
public void Enqueue(BufferedSample sample) { if (last == null) { last = sample; last.next = null; } sample.next = head.next; head.next = sample; }
public void Enqueue(SampleQueue queue) { if (queue.last != null) { queue.last.next = head.next; head.next = queue.head.next; if (last == null) { last = queue.last; } } }
/// <summary> /// Plays the sample directly. /// Panning may be controlled through the provided /// AGATPanInfo instance. /// </summary> public IGATBufferedSampleOptions PlayData(GATData sample, AGATPanInfo panInfo, float gain = 1f, OnShouldMixSample mixCallback = null) { sample.Retain(); BufferedSample newSample = GetBufferedSample(); newSample.Init(sample, panInfo, mixCallback, gain); lock ( _samplesToEnqueue ) { _samplesToEnqueue.Enqueue(newSample); } return(newSample); }
public void Clear() { AudioData.Release(); _onShouldMixSample = null; IsLastChunk = false; next = null; AudioData = null; shouldBeRemoved = false; PanInfo = null; NextIndex = 0; _track = null; }
public void TrimAndKeepDiscarded(SampleQueue refQueue) { BufferedSample sample = null; BufferedSample discardedSample; refQueue.Clear(); while (head.next != null && head.next.shouldBeRemoved) { discardedSample = head.next; discardedSample.shouldBeRemoved = false; head.next = discardedSample.next; refQueue.Enqueue(discardedSample); //enqueue cached because enqueuing might set next to null if is last } if (head.next != null) { sample = head.next; while (sample.next != null) { if (sample.next.shouldBeRemoved) { discardedSample = sample.next; discardedSample.shouldBeRemoved = false; sample.next = discardedSample.next; refQueue.Enqueue(discardedSample); //enqueue cached because enqueuing might set next to null if is last } else { sample = sample.next; } } } if (head.next == null) { last = null; } else { last = sample; } }
public void TrimAndReleaseDiscarded() { BufferedSample sample = null; BufferedSample discardedSample; while (head.next != null && head.next.shouldBeRemoved) { discardedSample = head.next; head.next = discardedSample.next; _parentPlayer.PoolBufferedSample(discardedSample); } if (head.next != null) { sample = head.next; while (sample.next != null) { if (sample.next.shouldBeRemoved) { discardedSample = sample.next; sample.next = discardedSample.next; _parentPlayer.PoolBufferedSample(discardedSample); } else { sample = sample.next; } } } if (head.next == null) { last = null; } else { last = sample; } }
/// <summary> /// Plays the sample directly. /// Panning may be controlled through the provided /// AGATPanInfo instance. /// Note that dspTime must be greater or equal /// to AudioSettings.dspTime + GATInfo.AudioBufferDuration, or the sample will not be /// added to the playing queue. /// </summary> public IGATBufferedSampleOptions PlayDataScheduled(GATData sample, double dspTime, AGATPanInfo panInfo, float gain = 1f, OnShouldMixSample mixCallback = null) { if (dspTime < AudioSettings.dspTime + GATInfo.AudioBufferDuration) //Next buffer dspTime { #if GAT_DEBUG Debug.LogWarning("cannot play at such short notice."); #endif return(BufferedSample.VoidOptions); } sample.Retain(); BufferedSample newSample = GetBufferedSample(); newSample.scheduledDspTime = dspTime; newSample.Init(sample, panInfo, mixCallback, gain); lock ( _scheduledSamples ) { _scheduledSamples.Enqueue(newSample); } return(newSample); }
public void Clear() { head.next = null; last = null; }