📜  soundplayer c# take uri - C# (1)

📅  最后修改于: 2023-12-03 15:05:14.821000             🧑  作者: Mango

C# 声音播放器 - 使用 URI

本文介绍如何使用 C# 编写一个声音播放器并使用 URI 播放音频文件。本文将探讨以下主题:

  • 使用 NuGet 安装 NAudio 库
  • 创建声音播放器类并编写基本功能
  • 通过 URI 加载和播放音频
安装 NAudio 库

我们使用 NAudio 库来处理音频文件。可以在 NuGet 管理器中搜索 "NAudio" 并安装它。

创建声音播放器类

下面是一个基本的声音播放器类的实现:

using NAudio.Wave;

public class SoundPlayer
{
    private IWavePlayer waveOutDevice;
    private WaveStream mainOutputStream;

    public SoundPlayer()
    {
        waveOutDevice = new WaveOut();
    }

    public void Play(string uri)
    {
        Stop(); // 停止当前播放

        var inputStream = CreateInputStream(uri);
        mainOutputStream = CreateOutputStream(inputStream);

        waveOutDevice.Init(mainOutputStream);
        waveOutDevice.Play();
    }

    public void Stop()
    {
        if (waveOutDevice.PlaybackState == PlaybackState.Playing)
        {
            waveOutDevice.Stop();
        }
        if (mainOutputStream != null)
        {
            mainOutputStream.Dispose();
            mainOutputStream = null;
        }
    }

    private WaveStream CreateInputStream(string uri)
    {
        if (uri.EndsWith(".mp3"))
        {
            return new Mp3FileReader(uri);
        }
        return null;
    }

    private WaveStream CreateOutputStream(WaveStream inputStream)
    {
        if (inputStream == null)
        {
            return null;
        }
        if (inputStream.WaveFormat.Encoding != WaveFormatEncoding.Pcm)
        {
            var conversionStream = WaveFormatConversionStream.CreatePcmStream(inputStream);
            inputStream = conversionStream;
        }
        return new BlockAlignReductionStream(inputStream);
    }
}

在这个类中,我们使用了 NAudio 库的 WaveOut 类来播放音频文件。 我们还创建了一个私有的 WaveStream 对象来持有音频数据。为了播放一个新的音频文件,我们需要先停止当前播放,然后使用 Mp3FileReader 类创建一个 WaveStream 对象。最后,在将 WaveStream 对象传递给 WaveOut 设备之前,我们需要对格式进行转换和调整。

加载并播放音频

现在我们已经有了一个基本的声音播放器类,接下来我们将讨论如何加载和播放音频文件。在本例中,我们将使用 URI 来指定需要播放的音频文件。这种方式能够让我们以一种简单而方便的方式播放本地和在线音频文件。

var player = new SoundPlayer();
var uri = new Uri("http://example.com/audio.mp3");
player.Play(uri.AbsoluteUri);

以上代码将创建一个新的 SoundPlayer 对象并使用 Play 方法播放 URI 所指定的音频文件。我们还需要编写一些错误处理来处理无法使用 URI 找到音频文件和无法初始化和播放设备的情况。

结论

在本文中,我们演示了如何使用 C# 编写一个基本的声音播放器类,使用 URI 加载和播放音频文件。通过使用 NAudio 库和一些基础的 C# 语法,我们可以创建一个灵活和易用的声音播放器。