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); }
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); } } }