Exemplo n.º 1
0
        void PoolBufferedSample(BufferedSample sample)
        {
            sample.Clear();

            lock ( _pool )
            {
                _pool.Push(sample);
            }
        }
Exemplo n.º 2
0
            public void Enqueue(BufferedSample sample)
            {
                if (last == null)
                {
                    last      = sample;
                    last.next = null;
                }

                sample.next = head.next;
                head.next   = sample;
            }
Exemplo n.º 3
0
            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;
                    }
                }
            }
Exemplo n.º 4
0
        /// <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);
        }
Exemplo n.º 5
0
            public void Clear()
            {
                AudioData.Release();

                _onShouldMixSample = null;
                IsLastChunk        = false;

                next      = null;
                AudioData = null;

                shouldBeRemoved = false;

                PanInfo   = null;
                NextIndex = 0;

                _track = null;
            }
Exemplo n.º 6
0
            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;
                }
            }
Exemplo n.º 7
0
            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;
                }
            }
Exemplo n.º 8
0
        /// <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);
        }
Exemplo n.º 9
0
 public void Clear()
 {
     head.next = null;
     last      = null;
 }