WPF中,最簡單最容易播放音頻的方式是使用SoundPlayer類。它是.NET Framework 2.0的一部分,是對Win32 PlaySound API的封裝。
它具有以下限制:
1)僅支持.wav音頻文件;
2)不支持同時播放多個音頻(任何新播放的操作將終止當前正在播放的);
3)無法控制聲音的音量;
下面的代碼展示了如何使用SoundPlayer播放聲音:
SoundPlayer player = new SoundPlayer("BLOW.WAV");
player.Play();
傳遞給SoundPlayer構造函數的字符串可以是本地的一個文件名,也可以是網絡上的文件。調用Play方法將異步播放聲音。如果想同步播放聲音,可以使用PlaySync方法。當然,想異步循環播放,可以使用PlayLooping方法,直到你調用Stop或重新播放一個新的聲音為止。
需要說明的是,聲音文件直到第一次播放時才會被加載。如果聲音文件的加載需要很長的時間,例如從網絡來,使用同步播放,會導致UI死掉。出於這個原因考慮,SoundPlayer類也定義了Load和LoadAsync方法以便在第一次播放之前提前加載聲音文件。
如果你想播放系統聲音,但記不住他們的文件名,可以用SystemSounds類中的一些靜態屬性:Asterisk,Beep,Exclamation,Hand,Question。每個類型都有自己的Play方法,用來異步播放系統聲音。
二、使用WPF專用的MediaPlayer類。它是基於Windows Media Player構建起來的,因此,只要是Windows Media Player支持的格式,它都能播放(包括視頻)。
MediaPlayer具有以下特性供你使用:
1)可以同時播放多個聲音(創建多個MediaPlayer對象);
2)可以調整音量(Volume屬性);
3)可以使用Play,Pause,Stop等方法進行控制;
4)可以設置IsMuted屬性為True來實現靜音;
5)可以用Balance屬性來調整左右揚聲器的平衡;
6)可以通過SpeedRatio屬性控制音頻播放的速度;
7)可以通過NaturalDuration屬性得到音頻的長度,通過Position屬性得到當前播放進度;
8)可以通過Position屬性進行Seek;
使用MediaPlayer播放音頻文件如下:
MediaPlayer player = new MediaPlayer ();
player.Open(new Uri("BLOW.WAV", UriKind.Relative));
player.Play();
一個MediaPlayer對象一次只能播放一個文件。而且該文件是異步播放的,你也可以調用Close來釋放文件。
(提一下,MediaPlayer在XP下需要window media player比較高版本的支持,不然沒有聲音。SoundPlayer就不需要),這個有點略坑
三、使用COM組建的window media player。
看到調用的com組建足足有十幾MB大小,果斷放棄了,看網上其他人做的,效果應該還不錯。