Exemplo n.º 1
0
 /// <summary>
 /// 定位音频播放位置
 /// </summary>
 /// <param name="position">音频播放位置</param>
 public void Seek(TimeSpan position)
 {
     if (m_DeviceID != 0)
     {
         MCI_SEEK_PARMS sp = new MCI_SEEK_PARMS();
         sp.dwCallback = IntPtr.Zero;
         sp.dwTo       = Convert.ToUInt32(position.TotalMilliseconds);
         IntPtr spPointer = Marshal.AllocHGlobal(Marshal.SizeOf(sp));
         try
         {
             Marshal.StructureToPtr(sp, spPointer, false);
             UInt32 errorCode = mciSendCommand(m_DeviceID, (UInt32)MCI_Command.MCI_SEEK, (UInt32)(MCI_SeekFlags.MCI_WAIT | MCI_SeekFlags.MCI_TO), spPointer);
             CheckError(errorCode);
             if (Paused == true)
             {
                 return;
             }
             else
             {
                 m_Paused = true;
                 Play();
             }
         }
         finally
         {
             Marshal.FreeHGlobal(spPointer);
         }
     }
     else
     {
         throw new InvalidOperationException("Sound device has already closed.");
     }
 }
        private void SeekToAny(int Value)
        {
            int err;
            StringBuilder buf = new StringBuilder(1000);
            MCI_SEEK_PARMS SeekParms = new MCI_SEEK_PARMS();

            if (deviceID > 0)
            {
                if (Value > 0 && Value < Length)
                {
                    SeekParms.dwTo = Value;
                    //跳转的目标时间,时间单位为毫秒
                    err = mciSendCommandA(deviceID, MCI_SEEK, MCI_TO | MCI_WAIT, ref SeekParms);
                    if (err != 0)
                    {
                        mciGetErrorStringA(err, buf, 1000);
                        //throw new ApplicationException(buf.ToString());
                    }

                    Play();
                }
                else if (Value >= Length)
                    Next();
                else
                    Previous();
            }
        }
Exemplo n.º 3
0
 private static extern int mciSendCommandSeek(int wDeviceID, int uMessage, int dwParam1, ref MCI_SEEK_PARMS dwParam2);
 private static extern int mciSendCommandA(
     Int32 wDeviceID,
     UInt32 uMessage,
     Int32 dwParam,
     ref  MCI_SEEK_PARMS Any);