Exemplo n.º 1
0
        private double  FillBufferWithSamples(float[] buffer, int offset, int count)
        {
            int n    = 0;
            int time = 0;

            for (n = 0; n < count; n++)
            {
                buffer[n + offset] = _copyofNotPlayingSammplesCapture[n + offset];
            }
            bufferOverrideflag = true;
            //fadeState = FadeState.FullVolume;

            var mod = (count * 1000) % source.WaveFormat.SampleRate * source.WaveFormat.Channels;

            _nondivisibleFlag = mod != 0 ? true : false;
            if (_nondivisibleFlag)
            {
                offsetbytes         = count;
                copyofOffsetSamples = count;
            }
            else
            {
                time = (count * 1000) / source.WaveFormat.SampleRate * source.WaveFormat.Channels;
                //offsetbytes = 0;
                //copyofOffsetSamples = 0;
            }
            _copyofnonplayingsourceprovider = _copyofnonplayingsourceprovider.Skip(TimeSpan.FromMilliseconds(fadeDurationInMillis + time));
            return(fadeDurationInMillis + time);
        }
Exemplo n.º 2
0
        private void ExecuteWhenStateTransitionsToCrossFade(float[] buffer, int sampleCount)
        {
            fadeState = FadeState.FullVolume;

            if (!_nondivisibleFlag)
            {
                var time = bytesRead * 1000 / source.WaveFormat.SampleRate * source.WaveFormat.Channels;
                source = source.Skip(TimeSpan.FromMilliseconds(timetoSkip + time));
            }
            else
            {
                var tempBuffer = new float[copyofOffsetSamples];
                source = source.Skip(TimeSpan.FromMilliseconds(timetoSkip));

                try
                {
                    source.Read(tempBuffer, 0, copyofOffsetSamples);
                }
                catch { }

                var mod = bytesRead % sampleCount;
                if (mod == 0)
                {
                    var times = bytesRead / sampleCount;
                    for (int count = 0; count < times; count++)
                    {
                        source.Read(buffer, 0, sampleCount);
                    }
                }
                else
                {
                    // for wasapi exlusive and non-exclusive mode
                    while (bytesRead > sampleCount)
                    {
                        source.Read(buffer, 0, sampleCount);
                        bytesRead -= sampleCount;
                    }
                    source.Read(buffer, 0, bytesRead);
                }
            }
        }