private void InternalSourceCallback(IntPtr userdata, IntPtr buffer, int bufferSize) { unsafe { var span = new Span <byte>( SoundSample->buffer.ToPointer(), (int)SoundSample->buffer_size ); for (var i = 0; i < Filters.Count; i++) { Filters[i]?.Invoke(span, AudioFormat.FromSdlFormat(SoundSample->actual.format)); } _originalSourceCallback(userdata, buffer, bufferSize); if (Source->eof > 0) { if (!IsLooping) { Pause(); Status = PlaybackStatus.Stopped; } Rewind(); AudioManager.Instance.OnAudioSourceFinished(this, IsLooping); } } }