Пример #1
0
        public void CanPlayMonoToStereoSourceTest()
        {
            var source = new StereoToMonoSource(CodecFactory.Instance.GetCodec(testfile));
            Assert.AreEqual(1, source.WaveFormat.Channels);

            var monoSource = new MonoToStereoSource(source);
            Assert.AreEqual(2, monoSource.WaveFormat.Channels);

            ISoundOut soundOut;
            if (WasapiOut.IsSupportedOnCurrentPlatform)
                soundOut = new WasapiOut();
            else
                soundOut = new DirectSoundOut();

            soundOut.Initialize(monoSource.ToWaveSource(16));
            soundOut.Play();

            Thread.Sleep((int)Math.Min(source.GetMilliseconds(source.Length), 60000));

            soundOut.Dispose();
        }
Пример #2
0
        public bool OpenFile(string filename, Func<IWaveSource, IWaveSource> oninitcallback)
        {
            if (String.IsNullOrWhiteSpace(filename))
                throw new ArgumentException("filename");

            try
            {
                var source = CodecFactory.Instance.GetCodec(filename);
                source = new LoopStream(source);
                (source as LoopStream).EnableLoop = false;

                if (source.WaveFormat.Channels == 1)
                    source = new MonoToStereoSource(source).ToWaveSource(16);
                _panSource = new PanSource(source) { Pan = this.Pan };
                var _notification = new SimpleNotificationSource(_panSource);
                _notification.DataRead += OnNotification;

                source = _notification.ToWaveSource(16);
                //source = new BufferSource(source, source.WaveFormat.BytesPerSecond * 2);

                _source = source;

                if (oninitcallback != null)
                    SoundOutManager.Initialize(oninitcallback(source));
                else
                    SoundOutManager.Initialize(source);
            }
            catch (Exception)
            {
                return false;
            }
            RaiseUpdated();
            return true;
        }