我使用 p/invoke 方法来播放wav
声音。有一些方法可以调用 windows 媒体播放器来播放mp3
声音,但它速度慢且麻烦。
有没有简单的方法来播放短mp3
文件?
这主要用于当您不看屏幕而不看音乐时的应用程序提示和声音提示。
谢谢!
我使用 p/invoke 方法来播放wav
声音。有一些方法可以调用 windows 媒体播放器来播放mp3
声音,但它速度慢且麻烦。
有没有简单的方法来播放短mp3
文件?
这主要用于当您不看屏幕而不看音乐时的应用程序提示和声音提示。
谢谢!
如果您正在寻找播放 mp3 的方法:
公共课声音 { [DllImport("aygshell.dll", SetLastError = true)] 私有静态外部 IntPtr SndPlaySync(string pszSoundFile, uint dwFlags); [DllImport("aygshell.dll")] private static extern uint SndOpen(string pszSoundFile, ref IntPtr phSound); [DllImport("aygshell.dll")] 私有静态外部 uint SndPlayAsync(IntPtr hSound, uint dwFlags); [DllImport("aygshell.dll")] 私有静态外部 uint SndClose(IntPtr hSound); [DllImport("aygshell.dll")] 私有静态外部 uint SndStop(int SoundScope, IntPtr hSound); 常量 int SND_SCOPE_PROCESS = 0x1; 私人静态随机_随机=新随机(); // 初始化启动路径...您将在其中保存临时 mp3 私有静态字符串_startupPath; 公共静态字符串 StartupPath { 得到{返回声音._startupPath; } 设置 { Sound._startupPath = value; } } 私有枚举 SND { 同步 = 0x0000, 异步 = 0x0001, 节点默认 = 0x0002, 内存 = 0x0004, 循环 = 0x0008, NOSTOP = 0x0010, 现在 = 0x00002000, 别名 = 0x00010000, 别名 ID = 0x00110000, 文件名 = 0x00020000, 资源 = 0x00040004 } 公共静态无效播放声音(字符串文件名) { 播放声音(文件名,空); } public static void PlaySound(string fileName, WaitCallback 回调) { SndStop(SND_SCOPE_PROCESS, IntPtr.Zero); ThreadPool.QueueUserWorkItem(playSoundProcess, 新对象 [] {文件名,回调 }); } 私人静态无效playSoundProcess(对象o) { 对象[] par = (object[])o; 字符串文件名 = (string)par[0]; WaitCallback 回调 = (WaitCallback)par[1]; SndPlaySync(文件名,0); 尝试 { 文件.删除(文件名); } 抓住 { } 如果(回调!= null) 回调。调用(文件名); } 公共静态无效ClearSounds() { SndStop(SND_SCOPE_PROCESS, IntPtr.Zero); 尝试 { string[] oldFiles = Directory.GetFiles(StartupPath, "*.mp3"); foreach(oldFiles 中的字符串 f) 文件.删除(f); } 抓住 { } } public static void PlaySound(byte[] mp3, WaitCallback 回调) { 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); } 播放声音(临时,回调); } }
CF Framework 3.5 现在支持播放 .WAV 文件:
用于提示和音效的短 WAV 文件甚至可能比 MP3 播放得更快,因为它们是“准备播放”的......