コード例 #1
0
        void Loop()
        {
            int padding = 0;

            _IAudioClient.GetCurrentPadding(out padding);

            int waitTime = (int)((ulong)padding / (_SampleRate / 1000) / 2);

            while (true)
            {
                IntPtr pBuffer;
                System.Threading.Thread.Sleep((int)(waitTime));
                lock (this)
                {
                    _IAudioClient.GetCurrentPadding(out padding);
                    int count = _Stream.Read(_FullBuffer, 0, (((int)_BufferFrameCount - padding) * _FrameSize));
                    if (count > ((int)_BufferFrameCount - padding) * _FrameSize)
                    {
                        throw new Exception("More data provided by than asked for");
                    }
                    if (count > 0)
                    {
                        _IAudioRenderClient.GetBuffer(count / _FrameSize, out pBuffer);
                        System.Runtime.InteropServices.Marshal.Copy(_FullBuffer, 0, pBuffer, count);
                        _IAudioRenderClient.ReleaseBuffer(count / _FrameSize, 0);
                        waitTime = (int)((ulong)(padding + count / _FrameSize) / (_SampleRate / 1000)) / 2;
                    }
                    if (waitTime == 0 && count == 0)
                    {
                        waitTime = 20;
                    }
                }
            }
        }
コード例 #2
0
        protected int GetCurrentPadding()
        {
            int padding;

            audioClient.GetCurrentPadding(out padding);
            return(padding);
        }