Age*_*ith 3 c# resources stream naudio
我有一个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;
}
Run Code Online (Sandbox Code Playgroud)
要播放文件:
waveOutDevice = new WaveOut();
mainOutputStream = CreateInputStream("C:\\song.mp3");
Run Code Online (Sandbox Code Playgroud)
与普通文件一起正常工作,我将如何处理位于参考资料中的文件?谢谢.
的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);
Run Code Online (Sandbox Code Playgroud)
其他资源方法在获取流的细节方面有所不同,但除此之外基本相同.如果使用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);
Run Code Online (Sandbox Code Playgroud)
使用pack:...uri格式和WPF资源再次不同Application.GetResourceStream.
在所有情况下,您应该在阅读完之后处理Stream.
| 归档时间: |
|
| 查看次数: |
4789 次 |
| 最近记录: |