我有一个Windows窗体应用程序,我试图使用NAudio库从资源中简单地播放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");
与普通文件一起正常工作,我将如何处理位于参考资料中的文件? 谢谢。
答案 0 :(得分:8)
可以使用文件名或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);
使用pack:...
uri格式和Application.GetResourceStream
,WPF资源再次不同。
在所有情况下,当你完成阅读后,你应该处理它。
答案 1 :(得分:1)
使用http://media.io/将其转换为.wav 那么你需要做的就是
(new System.Media.SoundPlayer(ProjectName.Properties.Resources.wavfilename)).Play();