Beispiel #1
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="synchronized"></param>
 private void Play(Boolean synchronized)
 {
     if (m_DeviceID == 0)
     {
         Load();
     }
     // Play current audio file or resume playing
     if (m_DeviceID != 0)
     {
         if (m_Paused)
         {
             // Play from current position
             MCI_PLAY_PARMS pp = new MCI_PLAY_PARMS();
             pp.dwCallback = IntPtr.Zero;
             IntPtr ppPointer = Marshal.AllocHGlobal(Marshal.SizeOf(pp));
             try
             {
                 Marshal.StructureToPtr(pp, ppPointer, false);
                 UInt32 errorCode = mciSendCommand(m_DeviceID, (UInt32)MCI_Command.MCI_PLAY, (UInt32)(synchronized ? MCI_OpenFlags.MCI_WAIT : MCI_OpenFlags.MCI_NOTIFY), ppPointer);
                 CheckError(errorCode);
                 m_Paused = false;
                 return;
             }
             finally
             {
                 Marshal.FreeHGlobal(ppPointer);
             }
         }
         else
         {
             //Stop();
             MCI_PLAY_PARMS pp = new MCI_PLAY_PARMS();
             pp.dwCallback = IntPtr.Zero;
             pp.dwFrom     = 0;
             IntPtr ppPointer = Marshal.AllocHGlobal(Marshal.SizeOf(pp));
             try
             {
                 Marshal.StructureToPtr(pp, ppPointer, false);
                 UInt32 errorCode = mciSendCommand(m_DeviceID, (UInt32)MCI_Command.MCI_PLAY, (UInt32)((synchronized ? MCI_OpenFlags.MCI_WAIT : MCI_OpenFlags.MCI_NOTIFY) | MCI_OpenFlags.MCI_FROM), ppPointer);
                 CheckError(errorCode);
                 m_IsPlaying = true;
                 return;
             }
             finally
             {
                 Marshal.FreeHGlobal(ppPointer);
             }
         }
     }
     else
     {
         throw new InvalidOperationException("Sound device has already closed.");
     }
 }
        /// <summary>
        /// 从当前位置开始或在一个指定区段播放多媒体文件。
        /// </summary>
        public void Play()
        {
            int err;
            int flags = 0;
            StringBuilder buf = new StringBuilder(1000);

            if (deviceID > 0 && PlayState != PlayState.Play)
            {
                if ((devCaps & DevCaps.CanPlay) == DevCaps.CanPlay)
                {
                    if (deviceType == DeviceType.CDAudio || deviceType == DeviceType.VideoDisc)
                    {
                        if (GetStatus(MCI_STATUS_MEDIA_PRESENT) <= 0)
                        {
                            //throw new ApplicationException("设备中没有光盘,请先放入光盘。");
                        }
                    }
                    if ((int)timer.Tag == 0)
                    {
                        timer.Tag = 1;
                        timer.Start();
                    }
                    MCI_PLAY_PARMS mciplay = new MCI_PLAY_PARMS();

                    if (useFrom && startPos != 0)
                    {
                        mciplay.dwFrom = startPos;
                        flags |= MCI_FROM;
                        useFrom = false;
                    }

                    if (useTo && endPos != 0)
                    {
                        mciplay.dwTo = endPos;
                        flags |= MCI_TO;
                        useTo = false;
                    }

                    err = mciSendCommandA(deviceID, MCI_PLAY, flags, ref mciplay);
                    if (err != 0)
                    {
                        mciGetErrorStringA(err, buf, 1000);
                        //throw new ApplicationException("播放出错," + buf.ToString());
                    }
                    else
                    {
                        if (hWndDisplay == IntPtr.Zero)
                            rect = new Rectangle(0, 0, VideoSize.Width, VideoSize.Height);
                        ShowDisplay(rect);
                    }
                }
                else
                {
                    Close();
                    //throw new ApplicationException("播放出错,该文件不能播放。");
                }
            }
        }
Beispiel #3
0
 public static extern Int32 mciSendCommand(UInt32 wDeviceID,
                                           e_MSI_CONMMAND uMsg, UInt32 fdwCommand, ref MCI_PLAY_PARMS dwParam);
 private static extern int mciSendCommandA(
     Int32 wDeviceID,
     UInt32 uMessage,
     Int32 dwParam,
     ref  MCI_PLAY_PARMS Any);