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; }
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; }
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; }
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; }
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; }
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; }