播放嵌入資源的聲音檔案

freshairpeng發表於2009-03-04

摘要:本文闡述了在Windows Mobile中如何播放潛入資源的聲音檔案
Keywords
PlaySound, Windows Mobile, Embedded Resources, p/invoke

要在Windows Mobile上播放嵌入資源(Embedded Resource)的聲音檔案,該怎麼辦呢?顯然是要用到反射的,我查了一下MSDN,還好GetManifestResourceStream對移動裝置是可用的。

首先我們需要一個類,通過P/invoke來幫助我們實現播放聲音的功能:

   [Flags]
    
enum SoundFlags
    
{
        Alias 
= 0x00010000,
        Filename 
= 0x00020000,
        Synchronous 
= 0x00000000,
        Asynchronous 
= 0x00000001,
        Memory 
= 0x00000004,
        Loop 
= 0x00000008,
        NoStop 
= 0x00000010
    }


    
class PlayNativeRef
    
{
        [DllImport(
"CoreDll.DLL", EntryPoint = "PlaySound", SetLastError = true)]
        
public extern static int PlaySound(byte[] szSound, IntPtr hMod, SoundFlags flags);
    }

呼叫的時候,我們先要將該聲音資源從程式集載入到記憶體中:

 MemoryStream ms =(MemoryStream) Assembly.GetExecutingAssembly().GetManifestResourceStream("PlayEmbeddedAudio.Resources.yuyinlangdu.wav");

Tips這裡的資源名字,一定不要弄錯,如果你不確信的話,可以通過GetManifestResourceNames方法來檢視資源的名稱。

然後,我們就可以呼叫PlaySound方法來播放了:

                PlayNativeRef.PlaySound(
                     ms.GetBuffer(),
                     IntPtr.Zero,
                     SoundFlags.Synchronous 
| SoundFlags.Memory);   


注意這裡的SoundFlag要記得把Memory加上,表示第一個引數是指向記憶體中的聲音檔案映象。播放的時候從記憶體中載入資源。

不過有一點要注意的,嵌入的聲音檔案不宜太多,否則會讓程式集變得很龐大。

程式碼在這裡下載

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/14766526/viewspace-561432/,如需轉載,請註明出處,否則將追究法律責任。

相關文章