Windows mobile 在compact framework 3.5中是否有干净的方式播放mp3声音

Windows mobile 在compact framework 3.5中是否有干净的方式播放mp3声音,windows-mobile,compact-framework,playback,Windows Mobile,Compact Framework,Playback,我使用p/invoke方法播放wav声音。有几种方法可以调用windows media player播放mp3声音,但速度慢且繁琐 有没有一种简单的方法来播放短的mp3文件 这主要用于应用程序提示和声音提示,当您不看屏幕而不看音乐时 谢谢 CF Framework 3.5现在支持播放.WAV文件: 用于提示和音效的短WAV文件甚至可能比MP3播放得更快,因为它们“随时可以播放”…如果您正在寻找播放MP3的方法: public class Sound { [DllImport("aygs

我使用p/invoke方法播放
wav
声音。有几种方法可以调用windows media player播放
mp3
声音,但速度慢且繁琐

有没有一种简单的方法来播放短的
mp3
文件

这主要用于应用程序提示声音提示,当您不看屏幕而不看音乐时


谢谢

CF Framework 3.5现在支持播放.WAV文件:


用于提示和音效的短WAV文件甚至可能比MP3播放得更快,因为它们“随时可以播放”…

如果您正在寻找播放MP3的方法:

public class Sound { [DllImport("aygshell.dll", SetLastError = true)] private static extern IntPtr SndPlaySync(string pszSoundFile, uint dwFlags); [DllImport("aygshell.dll")] private static extern uint SndOpen(string pszSoundFile, ref IntPtr phSound); [DllImport("aygshell.dll")] private static extern uint SndPlayAsync(IntPtr hSound, uint dwFlags); [DllImport("aygshell.dll")] private static extern uint SndClose(IntPtr hSound); [DllImport("aygshell.dll")] private static extern uint SndStop(int SoundScope, IntPtr hSound); const int SND_SCOPE_PROCESS = 0x1; private static Random _random = new Random(); // init startup path... where you'll hold temp mp3s private static string _startupPath; public static string StartupPath { get { return Sound._startupPath; } set { Sound._startupPath = value; } } private enum SND { SYNC = 0x0000, ASYNC = 0x0001, NODEFAULT = 0x0002, MEMORY = 0x0004, LOOP = 0x0008, NOSTOP = 0x0010, NOWAIT = 0x00002000, ALIAS = 0x00010000, ALIAS_ID = 0x00110000, FILENAME = 0x00020000, RESOURCE = 0x00040004 } public static void PlaySound(string fileName) { PlaySound(fileName, null); } public static void PlaySound(string fileName, WaitCallback callback) { SndStop(SND_SCOPE_PROCESS, IntPtr.Zero); ThreadPool.QueueUserWorkItem(playSoundProcess, new object[] {fileName, callback }); } private static void playSoundProcess(object o) { object[] par = (object[])o; string fileName = (string)par[0]; WaitCallback callback = (WaitCallback)par[1]; SndPlaySync(fileName, 0); try { File.Delete(fileName); } catch { } if (callback != null) callback.Invoke(fileName); } public static void ClearSounds() { SndStop(SND_SCOPE_PROCESS, IntPtr.Zero); try { string[] oldFiles = Directory.GetFiles(StartupPath, "*.mp3"); foreach (string f in oldFiles) File.Delete(f); } catch { } } public static void PlaySound(byte[] mp3, WaitCallback callback) { string temp = string.Format("{0}\\{1}-{2}.mp3", StartupPath, DateTime.Now.Ticks, _random.Next()); using (FileStream fs = File.Create(temp)) { fs.Write(mp3, 0, mp3.Length); } PlaySound(temp, callback); } } 公共级音响 { [DllImport(“aygshell.dll”,SetLastError=true)] 私有静态外部IntPtr SndPlaySync(字符串pszSoundFile,uint dwFlags); [DllImport(“aygshell.dll”)] 私有静态外部单元SndOpen(字符串pszSoundFile,ref IntPtr phSound); [DllImport(“aygshell.dll”)] 专用静态外部uint SndPlayAsync(IntPtr hSound、uint dwFlags); [DllImport(“aygshell.dll”)] 专用静态外部设备SndClose(IntPtr hSound); [DllImport(“aygshell.dll”)] 专用静态外部设备SndStop(int SoundScope、IntPtr hSound); const int SND_SCOPE_PROCESS=0x1; 私有静态随机_Random=新随机(); //初始化启动路径…您将在其中保存临时MP3 私有静态字符串startupPath; 公共静态字符串路径 { 获取{返回声音。_startupPath;} 设置{Sound.\u startupPath=value;} } 私有枚举SND { SYNC=0x0000, 异步=0x0001, NODEFAULT=0x0002, 内存=0x0004, 循环=0x0008, NOSTOP=0x0010, NOWAIT=0x000020000, 别名=0x00010000, 别名_ID=0x00110000, 文件名=0x00020000, 资源=0x00040004 } 公共静态无效播放声音(字符串文件名) { 播放声音(文件名,空); } 公共静态void播放声音(字符串文件名,WaitCallback) { SndStop(SND_SCOPE_进程,IntPtr.Zero); ThreadPool.QueueUserWorkItem(playSoundProcess, 新对象[]{fileName,callback}); } 私有静态void playSoundProcess(对象o) { 对象[] PAL=(对象[])O; 字符串文件名=(字符串)par[0]; WaitCallback=(WaitCallback)par[1]; SndPlaySync(文件名,0); 尝试 { 删除(文件名); } 抓住 { } if(回调!=null) callback.Invoke(文件名); } 公共静态void ClearSounds() { SndStop(SND_SCOPE_进程,IntPtr.Zero); 尝试 { 字符串[]oldFiles=Directory.GetFiles(StartupPath,*.mp3”); foreach(旧文件中的字符串f) 删除(f); } 抓住 { } } 公共静态void播放声音(字节[]mp3,等待回调) { string temp=string.Format(“{0}\\{1}-{2}.mp3”,StartupPath,DateTime.Now.Ticks,_random.Next()); 使用(FileStream fs=File.Create(temp)) { fs.Write(mp3,0,mp3.Length); } 播放声音(临时、回调); } }
您可以使用soundplayer类播放.wav,无需使用p/invoke。我不知道mp3…我不得不修改一下代码,这样它就不会删除我的mp3文件,但除此之外,它在修复后效果会很好。我主要使用PlaySound(byte[],WaitCallback)重载,所以这就是为什么要进行删除。。。这是一个简单的例子。