Exemplo n.º 1
0
        /// <summary>
        /// Returns current position in specified looping sound, or 0 if not looping sound.
        /// </summary>
        public long GetLoopPosition(CachedSound sound)
        {
            long position = 0;

            lock (_loops)
            {
                CachedSoundProvider provider = _loops
                                               .Where(p => p.Sound == sound)
                                               .FirstOrDefault();
                if (provider != null)
                {
                    position = provider.Position;
                }
            }
            return(position);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Fired when input has ended.  Allows restart of looped sounds.
        /// </summary>
        private void Mixer_MixerInputEnded(object sender, SampleProviderEventArgs e)
        {
            CachedSoundProvider provider = ((e.SampleProvider != null) && (e.SampleProvider is CachedSoundProvider)) ? (CachedSoundProvider)e.SampleProvider : null;

            if (provider == null)
            {
                return;
            }
            lock (_loops)
            {
                if (_loops.Contains(provider))
                {
                    provider.Reset();
                    AddMixerInput(provider);
                }
            }
        }
Exemplo n.º 3
0
        /// <summary>
        /// Plays a cached sound, looping forever until stop.  Keeps playing if already looping specified sound.
        /// </summary>
        public void PlayLoop(CachedSound sound, bool stopOtherLoops = true, long position = 0)
        {
            CachedSoundProvider provider;

            lock (_loops)
            {
                if (stopOtherLoops)
                {
                    _loops.Where(p => p.Sound != sound).ToList().ForEach(p => StopLoop(p.Sound));
                }
                if (_loops.Where(p => p.Sound == sound).Any())
                {
                    return;
                }
                provider = new CachedSoundProvider(sound, position);
                _loops.Add(provider);
            }
            AddMixerInput(provider);
        }