代码改变世界

在 Windows Mobile 中播放音频文件

2008-05-13 13:02  Scott Wong  阅读(1158)  评论(0编辑  收藏  举报

如果是在 .NET Compact Framework 3.5 下开发,可以参考微软的这篇文章

如果是在 .NET Compact Framework 2.0 下开发,可以参考微软的这篇文章

下面的代码是在微软提供的代码上修改的,增加了一个方法,可以播放保存在资源中的音频文件。

public class Sound
{
    private byte[] m_soundBytes;
    private string m_fileName;

    private enum Flags {
        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.DLL", EntryPoint="PlaySound", SetLastError=true)]
    private extern static int WCE_PlaySound(string szSound, IntPtr hMod, int flags);

    [DllImport("CoreDll.DLL", EntryPoint="PlaySound", SetLastError=true)]
    private extern static int WCE_PlaySoundBytes (byte[] szSound, IntPtr hMod, int flags);

    /// <summary>
    /// Construct the Sound object to play sound data from the specified file.
    /// </summary>
    public Sound (string fileName) {
        m_fileName = fileName;
    }

    /// <summary>
    /// Construct the Sound object to play sound data from the specified stream.
    /// </summary>
    public Sound(Stream stream)    {
        // read the data from the stream
        m_soundBytes = new byte [stream.Length];
        stream.Read(m_soundBytes, 0,(int)stream.Length);
    }
    
    /// <summary>
    /// 用于播放保存在资源中的音频文件
    /// </summary>
    public Sound(byte[] soundBytes)    {
        m_soundBytes = soundBytes;
    }
        
    /// <summary>
    /// Play the sound
    /// </summary>
    public void Play () {
        // if a file name has been registered, call WCE_PlaySound,
        //  otherwise call WCE_PlaySoundBytes
        if (m_fileName != null)
            WCE_PlaySound(m_fileName, IntPtr.Zero, (int) (Flags.SND_ASYNC | Flags.SND_FILENAME));
        else
            WCE_PlaySoundBytes (m_soundBytes, IntPtr.Zero, (int) (Flags.SND_ASYNC | Flags.SND_MEMORY));
    }
}

将音频文件添加到资源中

 

播放资源中的音频文件

Sound sound = new Sound(Resources.ding)
sound.Play();