A class to play sound on netcf in CSharp (二)

原创 2006年06月22日 12:28:00

在实际测试中发现上一片文章(A class to play sound on netcf in CSharp)中介绍的播放声音的类在pda中运行正常,但却无法在pc中工作,简单分析了一下原因,发现是dll的问题,pc和pda播放声音时用的dll不同。pc中是winmm,而pda中则是coredll,项目需要在pc和pda上都可以运行,因此加入了动态判断功能,识别程序运行在pc还是pda中,从而加载不同的dll来播放声音,下面对是该类的一个封装:

using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;

namespace MiniCafe.Util
{
    internal class NetHelpers
    {
        [Flags]
        public enum PlaySoundFlags : int
        {
            SND_SYNC = 0x0000, /* play synchronously (default) */
            SND_ASYNC = 0x0001, /* play asynchronously */
            SND_NODEFAULT = 0x0002, /* silence (!default) if sound not found */
            SND_MEMORY = 0x0004, /* pszSound points to a memory file */
            SND_LOOP = 0x0008, /* loop the sound until next sndPlaySound */
            SND_NOSTOP = 0x0010, /* don't stop any currently playing sound */
            SND_NOWAIT = 0x00002000, /* don't wait if the driver is busy */
            SND_ALIAS = 0x00010000, /* name is a registry alias */
            SND_ALIAS_ID = 0x00110000, /* alias is a predefined ID */
            SND_FILENAME = 0x00020000, /* name is file name */
            SND_RESOURCE = 0x00040004 /* name is resource name or atom */
        }

        [DllImport("winmm")]
        public static extern bool PlaySound(string szSound, IntPtr hMod, PlaySoundFlags flags);
    }
    internal class NetCFHelpers
    {
        [Flags]
        public enum PlaySoundFlags : int
        {
            SND_SYNC = 0x0000, /* play synchronously (default) */
            SND_ASYNC = 0x0001, /* play asynchronously */
            SND_NODEFAULT = 0x0002, /* silence (!default) if sound not found */
            SND_MEMORY = 0x0004, /* pszSound points to a memory file */
            SND_LOOP = 0x0008, /* loop the sound until next sndPlaySound */
            SND_NOSTOP = 0x0010, /* don't stop any currently playing sound */
            SND_NOWAIT = 0x00002000, /* don't wait if the driver is busy */
            SND_ALIAS = 0x00010000, /* name is a registry alias */
            SND_ALIAS_ID = 0x00110000, /* alias is a predefined ID */
            SND_FILENAME = 0x00020000, /* name is file name */
            SND_RESOURCE = 0x00040004 /* name is resource name or atom */
        }

        [DllImport("coredll")]
        public static extern bool PlaySound(string szSound, IntPtr hMod,PlaySoundFlags flags);
    }
    public class Sound
    {
        public static void Play(string strFileName)
        {
            if (Framework.IsNetCF)
            {
                //for pda
                NetCFHelpers.PlaySound(strFileName, IntPtr.Zero,
                NetCFHelpers.PlaySoundFlags.SND_FILENAME | NetCFHelpers.PlaySoundFlags.SND_ASYNC);
            }
            else
            {
                //for pc
                NetHelpers.PlaySound(strFileName, IntPtr.Zero,
                NetHelpers.PlaySoundFlags.SND_FILENAME | NetHelpers.PlaySoundFlags.SND_ASYNC);
            }
        }
    }

}

相关文章推荐

What is reflection and how to use it in CSharp ?

What is reflection and how to use it in CSharp ?

How to play an AVI in a status bar.

  • 2006年02月23日 09:05
  • 119KB
  • 下载

How to play BreakerBall game on DragonBoard 410c ?

基本配置要求 1、一个大于1G的SD卡(用来在DragonBoard 410c上安装Debian); 2、DragonBoard410C 3、HDMI线缆 4、USB 键盘、USB鼠标一套 5、U盘一...

csharp:Learn how to post JSON string to generic Handler using jQuery in ASP.Net C

/// ///參考: http://james.newtonking.com/json/help/index.html# /// 塗聚文(Geovin Du) 20141228 ...

How to play video in cocos2dx with DirectShow

How to play video in cocos2dx with DirectShow   The purpose of this article is to illustrate how to ...

How to Play, Record, and Edit Videos in iOS

This is a blog post by iOS Tutorial Team member Abdul Azeem, software architect and co-founder at ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:A class to play sound on netcf in CSharp (二)
举报原因:
原因补充:

(最多只允许输入30个字)