如何在 WPF 中使用 nAudio 从 Resource 播放 mp3?
Posted
技术标签:
【中文标题】如何在 WPF 中使用 nAudio 从 Resource 播放 mp3?【英文标题】:How can i play mp3 from Resource using nAudio in WPF? 【发布时间】:2012-02-24 14:54:34 【问题描述】:我正在使用nAudio 在我的 WPF 应用程序中播放背景歌曲。 现在开始一首歌曲的新实例,代码如下:
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;
这很好用,但仅到特定的文件路径。 现在,如果我尝试向此函数发送 Pack URL,则会收到不支持该格式的错误消息。 有人遇到过这个并且知道我应该怎么做吗?
已解决: 感谢 minitech 的回答,这段代码最终奏效了:
StreamResourceInfo resource = Application.GetResourceStream(
new Uri("YearBook;component/Resources/Music/1.mp3", UriKind.Relative));
mainOutputStream = CreateInputStream(resource.Stream);
waveOutDevice.Init(mainOutputStream);
private WaveStream CreateInputStream(Stream fileName)
WaveChannel32 inputStream;
WaveStream mp3Reader = new Mp3FileReader(fileName);
inputStream = new WaveChannel32(mp3Reader);
volumeStream = inputStream;
return volumeStream;
【问题讨论】:
【参考方案1】:Mp3FileReader
构造函数被重载以获取流。我不知道 WPF 资源是如何工作的,但如果你能以某种方式将文件作为Stream
对象获取,那么你可以使用它。以下是您可以播放 byte[]
的方法:
private WaveStream CreateInputStream(byte[] resource)
WaveChannel32 inputStream;
using(MemoryStream ms = new MemoryStream(resource))
WaveStream mp3Reader = new Mp3FileReader(ms);
inputStream = new WaveChannel32(mp3Reader);
return inputStream;
【讨论】:
我可以得到是流,但我不明白如何插入它,它说它需要字符串 埃里克你能告诉我你是怎么解决的以上是关于如何在 WPF 中使用 nAudio 从 Resource 播放 mp3?的主要内容,如果未能解决你的问题,请参考以下文章
使用 NAudio 在 WPF 上创建音频播放器。绑定不起作用