如何在WPF中使用nAudio从资源播放mp3?

时间:2012-02-24 14:54:35

标签: c# wpf resources naudio

我正在使用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;
    }

哪个工作正常,但到特定的文件路径。 现在,如果我尝试向此功能发送包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 个答案:

答案 0 :(得分: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;
}