C#使用Resource中的NAudio播放MP3文件

本文关键字:播放 MP3 文件 NAudio 中的 使用 Resource | 更新日期: 2023-09-27 18:28:15

我有一个Windows窗体应用程序,我正试图使用NAudio库简单地播放Resource中的MP3文件。

我认为需要做的是以某种方式流式传输文件,这里有一个NAudio的例子,不幸的是,它接受文件路径字符串作为参数。

private WaveStream CreateInputStream(string fileName)
{
    WaveChannel32 inputStream;
    if (fileName.EndsWith(".mp3"))
    {
        WaveStream mp3Reader = new Mp3FileReader(fileName);
        inputStream = new WaveChannel32(mp3Reader);
    }
    else
    {
        throw new InvalidOperationException("Unsupported extension");
    }
    volumeStream = inputStream;
    return volumeStream;
}

播放文件:

waveOutDevice = new WaveOut();
mainOutputStream = CreateInputStream("C:''song.mp3");

适用于普通文件,如何处理位于参考资料中的文件?非常感谢。

C#使用Resource中的NAudio播放MP3文件

Mp3FileReader类可以由文件名或System.IO.Stream构造。因此,您需要的是将MP3资源作为流进行读取。如何做到这一点取决于您如何添加资源。

使用Properties/Resources.resx文件(通过应用程序属性对话框管理)添加的资源可以通过Properties.Resources对象访问。已知的资源类型(图像等)在这里应该用它们适当的类型来表示,但MP3文件是以byte[]的形式访问的。您可以从资源中创建一个MemoryStream,并使用它来构造Mp3FileReader,如下所示:

MemoryStream mp3file = new MemoryStream(Properties.Resources.MP3file);
Mp3FileReader mp3reader = new Mp3FileReader(mp3file);

其他资源方法在获取流的细节上有所不同,但除此之外基本相同。如果使用Embedded Resource构建操作将MP3文件添加到项目中,则可以使用以下操作:

public Stream GetResourceStream(string filename)
{
    Assembly asm = Assembly.GetExecutingAssembly();
    string resname = asm.GetName().Name + "." + filename;
    return asm.GetManifestResourceStream(resname);
}
...
Stream mp3file = GetResourceStream("some file.mp3");
Mp3FileReader mp3reader = new Mp3FileReader(mp3file);

WPF资源再次不同,使用pack:...uri格式和Application.GetResourceStream

当然,在所有情况下,您都应该在完成对Stream的读取后对其进行处理。

使用将其转换为.wavhttp://media.io/那么你所需要做的就是

(new System.Media.SoundPlayer(ProjectName.Properties.Resources.wavfilename)).Play();