我使用p/invoke方法來播放wav
聲音。有些方法可以調用Windows媒體播放器來播放mp3
聲音,但其緩慢的操作很麻煩。有沒有一個乾淨的方式來播放緊湊的框架中的MP3聲音3.5
有沒有簡單的方法來播放短文件mp3
?
這主要是應用提示和聲音提示當您不看屏幕,而不是音樂。
謝謝!
我使用p/invoke方法來播放wav
聲音。有些方法可以調用Windows媒體播放器來播放mp3
聲音,但其緩慢的操作很麻煩。有沒有一個乾淨的方式來播放緊湊的框架中的MP3聲音3.5
有沒有簡單的方法來播放短文件mp3
?
這主要是應用提示和聲音提示當您不看屏幕,而不是音樂。
謝謝!
CF框架3.5現在包括用於播放.WAV文件支持:
Namespace System.Media.SoundPlayer
短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); } }
我不得不修改此代碼,所以它不會刪除我的MP3文件,但除此之外,它修復奇蹟後,它已被修復。 – Alex 2010-03-26 07:57:28
您可以用soun播放.wav dplayer類,不需要使用p/invoke。我不知道對於MP3 ... – pmlarocque 2008-10-15 12:49:18