Existe-t-il un moyen en C # de lire de l'audio (par exemple, MP3) directement à partir d'un System.IO.Stream qui, par exemple, a été renvoyé à partir d'un WebRequest sans enregistrer temporairement les données sur le disque?
Solution avec NAudio
Avec l'aide de NAudio 1.3, il est possible de:
- Charger un fichier MP3 depuis une URL dans un MemoryStream
 - Convertissez les données MP3 en données wave après leur chargement complet
 - La lecture des données d'onde en utilisant NAudio classe WaveOut s »
 
Cela aurait été bien de pouvoir même lire un fichier MP3 à moitié chargé, mais cela semble impossible en raison de la conception de la bibliothèque NAudio .
Et c'est la fonction qui fera le travail:
    public static void PlayMp3FromUrl(string url)
    {
        using (Stream ms = new MemoryStream())
        {
            using (Stream stream = WebRequest.Create(url)
                .GetResponse().GetResponseStream())
            {
                byte[] buffer = new byte[32768];
                int read;
                while ((read = stream.Read(buffer, 0, buffer.Length)) > 0)
                {
                    ms.Write(buffer, 0, read);
                }
            }
            ms.Position = 0;
            using (WaveStream blockAlignedStream =
                new BlockAlignReductionStream(
                    WaveFormatConversionStream.CreatePcmStream(
                        new Mp3FileReader(ms))))
            {
                using (WaveOut waveOut = new WaveOut(WaveCallbackInfo.FunctionCallback()))
                {
                    waveOut.Init(blockAlignedStream);
                    waveOut.Play();                        
                    while (waveOut.PlaybackState == PlaybackState.Playing )                        
                    {
                        System.Threading.Thread.Sleep(100);
                    }
                }
            }
        }
    }