C# 播放声音文件

 class Media
{
    [DllImport("winmm.dll", SetLastError = true)]
    static extern bool PlaySound(string pszSound, UIntPtr hmod, uint fdwSound);
    [DllImport("winmm.dll", SetLastError = true)]
    static extern long mciSendString(string strCommand,
        StringBuilder strReturn, int iReturnLength, IntPtr hwndCallback);
    [DllImport("winmm.dll")]
    private static extern long sndPlaySound(string lpszSoundName, long uFlags);

    [Flags]
    public enum SoundFlags
    {
        /// <summary>play synchronously (default)</summary>
        SND_SYNC = 0x0000,
        /// <summary>play asynchronously</summary>
        SND_ASYNC = 0x0001,
        /// <summary>silence (!default) if sound not found</summary>
        SND_NODEFAULT = 0x0002,
        /// <summary>pszSound points to a memory file</summary>
        SND_MEMORY = 0x0004,
        /// <summary>loop the sound until next sndPlaySound</summary>
        SND_LOOP = 0x0008,
        /// <summary>don’t stop any currently playing sound</summary>
        SND_NOSTOP = 0x0010,
        /// <summary>Stop Playing Wave</summary>
        SND_PURGE = 0x40,
        /// <summary>don’t wait if the driver is busy</summary>
        SND_NOWAIT = 0x00002000,
        /// <summary>name is a registry alias</summary>
        SND_ALIAS = 0x00010000,
        /// <summary>alias is a predefined id</summary>
        SND_ALIAS_ID = 0x00110000,
        /// <summary>name is file name</summary>
        SND_FILENAME = 0x00020000,
        /// <summary>name is resource name or atom</summary>
        SND_RESOURCE = 0x00040004
    }


    public static void Play(string strFileName)
    {
        PlaySound(strFileName, UIntPtr.Zero,
           (uint)(SoundFlags.SND_FILENAME | SoundFlags.SND_SYNC | SoundFlags.SND_NOSTOP));
    }
    public static void mciPlay(string strFileName)
    {
        /*
        * open device_name type device_type alias device_alias  打开设备
        * device_name     要使用的设备名,通常是文件名。
        * type device_type  设备类型,例如mpegvideo或waveaudio,可省略。
        * alias device_alias 设备别名,指定后可在其他命令中代替设备名。
        */
        string playCommand = string.Format("open \"{0}\" alias MyWav",strFileName);
        mciSendString(playCommand, null, 0, IntPtr.Zero);
        /*
         * play device_alias from pos1 to pos2 wait repeat  开始设备播放
         * 若省略from则从当前磁道开始播放。
         * 若省略to则播放到结束。
         * 若指明wait则等到播放完毕命令才返回。即指明wait会产生线程阻塞,直到播放完毕
         * 若指明repeat则会不停的重复播放。
         * 若同时指明wait和repeat则命令不会返回,本线程产生堵塞,通常会引起程序失去响应。
         */
        mciSendString("play MyWav wait", null, 0, IntPtr.Zero);
        /*
         * close    关闭设备
         */
        mciSendString("close MyWav", null, 0, IntPtr.Zero);

    }
    public static void sndPlay(string strFileName)
    {
        sndPlaySound(strFileName, (long)(SoundFlags.SND_SYNC | SoundFlags.SND_FILENAME | SoundFlags.SND_NOSTOP));
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值