예제 #1
0
        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);
                }
            }
        }