您的位置:

C#播放声音详细阐述

一、基本概念

在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类可以下载在线音频文件,并播放这些文件。