一、基本概念
在C#中进行音频播放,需要使用System.Media命名空间中的SoundPlayer类。SoundPlayer类提供了一种将音频文件加载到内存中并播放它的简便方法。
使用SoundPlayer类,我们可以实现wave格式音频的播放,以及可以播放MP3格式的音频,但需要一个额外的MP3解码器。
二、环境搭建
在Visual Studio中,可以通过NuGet安装NAudio库来播放各种音频,包括直接从网络流进行播放。通过NuGet进行安装NAudio时,会将NAudio定义为项目的依赖。另外,NAudio也是开源的代码库,可以在GitHub上查找。
首先,需要在项目中引用NAudio命名空间,以使用NAudio中的各种类。其次,需要针对所要播放的音频文件确定正确的输出格式,以便编写代码。该格式可以通过调用AudioFileReader类来确定。
三、播放本地音频文件
通过SoundPlayer类在C#中播放本地音频文件只需以下几行代码:
using System.Media; namespace PlayLocalAudioFile { class Program { static void Main(string[] args) { SoundPlayer player = new SoundPlayer(@"C:\Users\Username\Desktop\sound.wav"); player.PlaySync(); } } }
上述代码中将音频文件路径传递给了SoundPlayer类的构造函数中,然后使用PlaySync()方法启动音频播放。此方法是同步播放,即在音频播放结束之前,不会返回过程控制权。如果要异步播放,可以调用Play()方法,该方法会立即返回,音频会在后台播放。
四、播放在线音频文件
要播放在线音频文件,需要首先将其下载到本地系统,然后再使用SoundPlayer类进行播放。要下载在线音频文件,可以使用HttpClient类。
以下是下载在线音频文件并使用SoundPlayer类播放的代码:
using System.IO; using System.Net.Http; using System.Media; namespace PlayOnlineAudioFile { class Program { static void Main(string[] args) { using (HttpClient client = new HttpClient()) { using (HttpResponseMessage response = client.GetAsync("http://www.example.com/sound.wav").Result) { using (HttpContent content = response.Content) { Stream stream = content.ReadAsStreamAsync().Result; SoundPlayer player = new SoundPlayer(stream); player.PlaySync(); } } } } } }
上述代码中,首先是使用HttpClient类下载音频文件,并获取文件内容。然后使用SoundPlayer类将文件内容作为参数进行音频播放。
五、播放MP3音频文件
在C#中,要播放MP3音频文件需要用到Lame和NAudio库来解码和播放音频文件,下面是一个使用NAudio和Lame来播放MP3音频文件的示例代码:
using NAudio.Wave; using NAudio.Lame; using System.IO; namespace PlayMp3AudioFile { class Program { static void Main(string[] args) { using (var mp3Reader = new Mp3FileReader(@"C:\Users\Username\Desktop\sound.mp3")) using (var waveStream = WaveFormatConversionStream.CreatePcmStream(mp3Reader)) using (var resampler = new MediaFoundationResampler(waveStream, new WaveFormat(44100, 2))) { WaveFileWriter.CreateWaveFile(@"C:\Users\Username\Desktop\temp.wav", resampler); using (var player = new SoundPlayer(@"C:\Users\Username\Desktop\temp.wav")) { player.PlaySync(); } } File.Delete(@"C:\Users\Username\Desktop\temp.wav"); } } }
上述代码中使用Mp3FileReader类读取MP3文件,并使用WaveFormatConversionStream类将MP3数据流转换为PCM格式的音频文件。然后使用MediaFoundationResampler类将PCM文件转换为44.1kHz的音频文件。最后使用SoundPlayer类播放该音频。
六、小结
在C#中,使用SoundPlayer类可以简便地实现音频文件的播放。要播放MP3文件,可以使用Lame和NAudio库进行解码和播放。使用HttpClient类可以下载在线音频文件,并播放这些文件。