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");
适用于普通文件,如何处理位于参考资料中的文件?非常感谢。
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();