public void StartSound()
        {
            BufferSizeSamples = Sound.MillisecondsToSamples(Global.Config.SoundBufferSizeMs);
            MaxSamplesDeficit = BufferSizeSamples;

            _lastWriteTime = 0;
        }
示例#2
0
        public void StartSound()
        {
            BufferSizeSamples = Sound.MillisecondsToSamples(GlobalWin.Config.SoundBufferSizeMs);
            MaxSamplesDeficit = BufferSizeSamples;

            _sourceID = AL.GenSource();

            _bufferPool           = new BufferPool();
            _currentSamplesQueued = 0;
        }
示例#3
0
        public void StartSound()
        {
            BufferSizeSamples = Sound.MillisecondsToSamples(GlobalWin.Config.SoundBufferSizeMs);

            // 35 to 65 milliseconds depending on how big the buffer is. This is a trade-off
            // between more frequent but less severe glitches (i.e. catching underruns before
            // they happen and filling the buffer with silence) or less frequent but more
            // severe glitches. At least on my Windows 8 machines, the distance between the
            // play and write cursors can be up to 30 milliseconds, so that would be the
            // absolute minimum we could use here.
            int minBufferFullnessMs = Math.Min(35 + ((GlobalWin.Config.SoundBufferSizeMs - 60) / 2), 65);

            MaxSamplesDeficit = BufferSizeSamples - Sound.MillisecondsToSamples(minBufferFullnessMs);

            StartPlaying();
        }
示例#4
0
        public void StartSound()
        {
            BufferSizeSamples = Sound.MillisecondsToSamples(Global.Config.SoundBufferSizeMs);

            // 35 to 65 milliseconds depending on how big the buffer is. This is a trade-off
            // between more frequent but less severe glitches (i.e. catching underruns before
            // they happen and filling the buffer with silence) or less frequent but more
            // severe glitches. At least on my Windows 8 machines, the distance between the
            // play and write cursors can be up to 30 milliseconds, so that would be the
            // absolute minimum we could use here.
            int minBufferFullnessMs = Math.Min(35 + ((Global.Config.SoundBufferSizeMs - 60) / 2), 65);

            MaxSamplesDeficit = BufferSizeSamples - Sound.MillisecondsToSamples(minBufferFullnessMs);

            var format = new WaveFormat
            {
                SamplesPerSecond      = Sound.SampleRate,
                BitsPerSample         = Sound.BytesPerSample * 8,
                Channels              = Sound.ChannelCount,
                FormatTag             = WaveFormatTag.Pcm,
                BlockAlignment        = Sound.BlockAlign,
                AverageBytesPerSecond = Sound.SampleRate * Sound.BlockAlign
            };

            var desc = new SoundBufferDescription
            {
                Format = format,
                Flags  =
                    BufferFlags.GlobalFocus |
                    BufferFlags.Software |
                    BufferFlags.GetCurrentPosition2 |
                    BufferFlags.ControlVolume,
                SizeInBytes = BufferSizeBytes
            };

            _deviceBuffer = new SecondarySoundBuffer(_device, desc);

            _actualWriteOffsetBytes = -1;
            _filledBufferSizeBytes  = 0;
            _lastWriteTime          = 0;
            _lastWriteCursor        = 0;

            _deviceBuffer.Play(0, PlayFlags.Looping);
        }
示例#5
0
        public void StartSound()
        {
            BufferSizeSamples = Sound.MillisecondsToSamples(Global.Config.SoundBufferSizeMs);
            MaxSamplesDeficit = BufferSizeSamples;

            var format = new WaveFormat
            {
                SamplesPerSecond      = Sound.SampleRate,
                BitsPerSample         = Sound.BytesPerSample * 8,
                Channels              = Sound.ChannelCount,
                FormatTag             = WaveFormatTag.Pcm,
                BlockAlignment        = Sound.BlockAlign,
                AverageBytesPerSecond = Sound.SampleRate * Sound.BlockAlign
            };

            _sourceVoice = new SourceVoice(_device, format);

            _bufferPool           = new BufferPool();
            _runningSamplesQueued = 0;

            _sourceVoice.Start();
        }