/// <summary> /// Request an audio fill /// </summary> /// <param name="buffer"></param> protected void OnFillBuffer(double[] buffer) { EventHandler <FillBufferEventArgs> tmpCopy = this.FillBuffer; FillBufferEventArgs e = new FillBufferEventArgs(buffer); tmpCopy?.Invoke(this, e); }
/// <summary> /// Fills the provided buffer with audio data. Stereo 16-bits data is required. /// </summary> /// <param name="sender">Streamer object.</param> /// <param name="instr">FillBufferEventArgs.</param> private void OnFillBuffer(object sender, FillBufferEventArgs e) { if (this.playState == PlayStatus.Playing) { long remainingSamples = e.Buffer.LongLength; long samplesToCopy = 0; long currPos = 0; while (remainingSamples > 0) { if ((lastTickBuf == null) || (lastTickBuf.Length - lastTickBufPosition == 0)) { lastTickBuf = getTick(); lastTickBufPosition = 0; } // Hay samples pendientes de copiar del ultimo tick!! samplesToCopy = Math.Min(lastTickBuf.Length - lastTickBufPosition, remainingSamples); Array.Copy(lastTickBuf, lastTickBufPosition, e.Buffer, currPos, samplesToCopy); remainingSamples -= samplesToCopy; lastTickBufPosition += samplesToCopy; currPos += samplesToCopy; } } else { Array.Copy(new UInt16[e.Buffer.Length], e.Buffer, e.Buffer.Length); } }
/// <summary> /// Request an audio fill /// </summary> /// <param name="buffer"></param> protected void OnFillBuffer(double[] buffer) { EventHandler <FillBufferEventArgs> tmpCopy = this.FillBuffer; FillBufferEventArgs e = new FillBufferEventArgs(buffer); if (tmpCopy != null) { tmpCopy(this, e); } }
/// <summary> /// Request an audio fill /// </summary> /// <param name="buffer"></param> protected void OnFillBuffer(double[] buffer) { EventHandler<FillBufferEventArgs> tmpCopy = this.FillBuffer; FillBufferEventArgs e = new FillBufferEventArgs(buffer); if (tmpCopy != null) { tmpCopy(this, e); } }