Example #1
0
        private void InternalStop()
        {
            if (!IsInitialized)
                ThrowException(Res.SndRecException_Uninitialized);

            if (!IsWorking && !IsPaused)
                return; // do nothing

            IntPtr ptr = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(API.MCI_GENERIC_PARMS)));
            Marshal.StructureToPtr(_parmsGeneric, ptr, false);
            _err = API.mciSendCommand(_deviceID, API.MCI_STOP, (API.MCI_WAIT), ptr);
            Marshal.FreeHGlobal(ptr);

            if (0 != _err)
                ThrowException(_err);

            _status = SndStatus.Normal;
        }
Example #2
0
        private void InternalStart(int length, bool async)
        {
            if (!IsInitialized)
                ThrowException(Res.SndRecException_Uninitialized);

            if (length < 0)
                ThrowException(new ArgumentOutOfRangeException("length", Properties.Resources.ArgumentOutOfRangeException_Length));

            if (length > 0)
                _parmsRecord.dwTo = (uint)length;

            _parmsRecord.dwTo = (uint)length;
            _parmsRecord.dwCallback = _handle;

            IntPtr ptr = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(API.MCI_RECORD_PARMS)));
            Marshal.StructureToPtr(_parmsRecord, ptr, false);
            _err = API.mciSendCommand(_deviceID, API.MCI_RECORD, (length != 0 ? API.MCI_NOTIFY : 0) | (async ? 0 : API.MCI_WAIT) | (length > 0 ? API.MCI_TO : 0), ptr);
            Marshal.FreeHGlobal(ptr);

            if (0 != _err)
                ThrowException(_err);

            _status = SndStatus.Working;
        }
Example #3
0
        private void InternalResume()
        {
            if (!IsInitialized)
                ThrowException(Res.SndRecException_Uninitialized);

            if (!IsPaused)
                ThrowException(Res.SndRecException_InvalidOperation);

            IntPtr ptr = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(API.MCI_GENERIC_PARMS)));
            Marshal.StructureToPtr(_parmsGeneric, ptr, false);
            _err = API.mciSendCommand(_deviceID, API.MCI_RESUME, (API.MCI_WAIT), ptr);
            Marshal.FreeHGlobal(ptr);

            if (0 != _err)
                ThrowException(_err);

            _status = SndStatus.Working;
        }
Example #4
0
        private void InternalInitialize()
        {
            _parmsOpen.wDeviceID = 0;
            _parmsOpen.lpstrDeviceType = Marshal.StringToHGlobalAnsi(API.WaveAudio);
            _parmsOpen.lpstrElementName = Marshal.StringToHGlobalAnsi(String.Empty);

            IntPtr ptr = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(API.MCI_OPEN_PARMS)));
            Marshal.StructureToPtr(_parmsOpen, ptr, false);

            _err = API.mciSendCommand(0, API.MCI_OPEN, API.MCI_WAIT | API.MCI_OPEN_TYPE | API.MCI_OPEN_ELEMENT, ptr);

            _parmsOpen = (API.MCI_OPEN_PARMS)Marshal.PtrToStructure(ptr, typeof(API.MCI_OPEN_PARMS));

            Marshal.FreeHGlobal(_parmsOpen.lpstrDeviceType);
            Marshal.FreeHGlobal(_parmsOpen.lpstrElementName);

            if (0 != _err)
                ThrowException(_err);

            _deviceID = _parmsOpen.wDeviceID;

            _status = SndStatus.Normal;
        }
Example #5
0
        private void InternalClose()
        {
            if (!IsInitialized)
                return;

            if (IsWorking || IsPaused)
                Stop();

            IntPtr ptr = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(API.MCI_GENERIC_PARMS)));
            Marshal.StructureToPtr(_parmsGeneric, ptr, false);
            _err = API.mciSendCommand(_deviceID, API.MCI_CLOSE, (API.MCI_WAIT), ptr);
            Marshal.FreeHGlobal(ptr);

            if (0 != _err)
                ThrowException(_err);

            _status = SndStatus.Uninitialized;
        }
Example #6
0
        private void InternalStart(bool async)
        {
            if (!IsInitialized)
                ThrowException(Res.SndRecException_Uninitialized);

            _parmsPlay.dwCallback = _handle;

            IntPtr ptr = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(API.MCI_PLAY_PARMS)));
            Marshal.StructureToPtr(_parmsPlay, ptr, false);
            _err = API.mciSendCommand(_deviceID, API.MCI_PLAY, (async ? API.MCI_NOTIFY : API.MCI_WAIT), ptr);
            Marshal.FreeHGlobal(ptr);

            if (0 != _err)
                ThrowException(_err);

            _status = SndStatus.Working;
        }