日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

『原创』+『参考』亲手实验:使用C#在PPC中播放声音

發(fā)布時間:2025/3/15 C# 55 豆豆
生活随笔 收集整理的這篇文章主要介紹了 『原创』+『参考』亲手实验:使用C#在PPC中播放声音 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

  今天,項目中要求用聲音來提示用戶程序的某個狀態(tài)被激活了,發(fā)現(xiàn),.Net CF下沒有System.Media這種好東東鳥~,于是乎,股溝、百毒最后再來個ZZK,發(fā)現(xiàn)MSDN和小鎮(zhèn)的文章都有提及在PPC下如何播放聲音(還有很多文章提到的方法差不多,但是都有網(wǎng)友反映不能成功播放,所以我在這里就過濾掉了),msdn中說道的文章,好多朋友反映是播放不出來,在此我沒有去考證,我直接使用了小鎮(zhèn)的代碼,并且成功的播放了聲音,所以,寫下此篇隨筆,一來做個備份,二來和大家分享一下~

首先,我們建立一個.net cf 2.0下,名稱為SoundPlay的WM5 ppc項目,當然語言我選擇的是C#。

然后界面設(shè)計如下:其中:

lblFileName——Text屬性:文件地址

btnOpen——Text屬性:瀏覽文件

btnPlay——Text屬性:播放聲音

新建一個類:Sound,代碼和小鎮(zhèn)的差不多,不過我做過一小點修改,所以也貼出來,方便大家查閱:

?

Sound
using?System;
using?System.Runtime.InteropServices;
using?System.IO;
using?System.Collections.Generic;
using?System.Text;

namespace?SoundPlay
{
????
public?class?Sound
????{
????????
private?byte[]?m_soundBytes;
????????
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?MobilePlaySound(string?szSound,?IntPtr?hMod,?int?flags);//播放外部聲音文件

????????[DllImport(
"CoreDll.DLL",?EntryPoint?=?"PlaySound",?SetLastError?=?true)]
????????
private?extern?static?int?MoiblePlaySoundBytes(byte[]?szSound,?IntPtr?hMod,?int?flags);//播放嵌入聲音資源


????????
///?<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>
????????
///?從一個聲音byte流構(gòu)造函數(shù)Sound
????????
///?</summary>
????????
///?<param?name="snd"></param>
????????public?Sound(byte[]?snd)
????????{
????????????m_soundBytes?
=?snd;
????????}
????????
///?<summary>
????????
///?構(gòu)造一個空Sound函數(shù),此函數(shù)用于播放外部文件
????????
///?</summary>
????????public?Sound()
????????{
????????}


????????
///?<summary>
????????
///?Play?the?sound?File播放外部文件的Play方法
????????
///?</summary>
????????public?void?Play(string?filename)
????????{
????????????MobilePlaySound(filename,?IntPtr.Zero,?(
int)(Flags.SND_ASYNC?|?Flags.SND_FILENAME));

????????}
????????
///?<summary>
????????
///?Play?The?Stream?Sound,此方法應該對應從Byte和Stream構(gòu)造的Sound
????????
///?注意,它的Flags設(shè)置為SND_MEMORY,因為我們的聲音文件已經(jīng)轉(zhuǎn)換到內(nèi)存中了
????????
///?</summary>
????????public?void?Play()
????????{
????????????MoiblePlaySoundBytes(m_soundBytes,?IntPtr.Zero,?(
int)(Flags.SND_ASYNC?|?Flags.SND_MEMORY));
????????}
????}
}

?

然后,主界面上的按鈕事件代碼如下:

?

按鈕代碼
?private?void?btnOpen_Click(object?sender,?EventArgs?e)
????????{
????????????
using?(OpenFileDialog?ofd?=?new?OpenFileDialog())
????????????{
????????????????
if?(ofd.ShowDialog()?==?DialogResult.OK)
????????????????{
????????????????????lblFileName.Text?
=?ofd.FileName;
????????????????}
????????????}
????????}

????????
private?void?btnPlay_Click(object?sender,?EventArgs?e)
????????{
????????????Sound?sound?
=?new?Sound();
????????????sound.Play(lblFileName.Text);
????????}

?

夠清楚了吧,經(jīng)過測試,兩種方式(通過流或者指定文件路徑)均能播放出選中的.wav聲音文件。

總結(jié)

以上是生活随笔為你收集整理的『原创』+『参考』亲手实验:使用C#在PPC中播放声音的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。