如何在 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?的主要内容,如果未能解决你的问题,请参考以下文章

在 WPF C# 中使用 NAudio 录制音频

NAudio 获取音频样本

使用 NAudio 在 WPF 上创建音频播放器。绑定不起作用

如何在 Windows XP 上运行 nAudio?

我可以同时从音频流缓冲区写入和播放(在 NAudio 中)吗?

WPF使用NAudio录音