Как я могу воспроизвести mp3 с ресурса, используя nAudio в WPF? - PullRequest
0 голосов
/ 24 февраля 2012

Я использую 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 Ответ

1 голос
/ 24 февраля 2012

Конструктор 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;
}
...