Existe-t-il un moyen en C# de lire un fichier audio (par exemple, MP3) directement à partir d'un fichier System.IO.Stream qui, par exemple, a été obtenue à partir d'une demande Web sans sauvegarder temporairement les données sur le disque ?
Solution avec NAudio
Avec l'aide de NAudio 1.3 il est possible de :
- Chargement d'un fichier MP3 à partir d'une URL dans un MemoryStream
- Convertir les données MP3 en données wave après leur chargement complet
- Lecture des données d'ondes à l'aide de NAudio La classe WaveOut
Il aurait été agréable de pouvoir lire un fichier MP3 à moitié chargé, mais cela semble impossible en raison de l'absence d'un système de gestion de l'information. NAudio la conception de la bibliothèque.
C'est cette 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);
}
}
}
}
}
4 votes
Il est bon de voir que vous avez réussi à le faire fonctionner. Il n'y a pas beaucoup de travail à faire pour qu'il soit lu correctement pendant la diffusion en continu. Le principal problème est que le Mp3FileReader s'attend actuellement à connaître la longueur à l'avance. Je vais essayer d'ajouter une démo pour la prochaine version de NAudio.
0 votes
@Mark Heath as-tu déjà résolu le problème et ajouté la démo dans la version actuelle de NAudio ou est-elle toujours dans ta pipline ?
0 votes
J'ai peur que ce ne soit pas encore le cas, mais grâce aux changements apportés dans NAudio 1.3, il ne sera pas nécessaire de faire beaucoup d'ajustements pour que cela fonctionne.
0 votes
Mark : Dois-je modifier NAudio pour que cela fonctionne, car je viens de télécharger NAudio1.3 mais il accepte le code ci-dessus sans changement, mais d'un autre côté il lance une exception qui dit quelque chose comme "ACM Conversion not possible".
0 votes
J'essaie d'ailleurs de jouer en suivant translate.google.com/translate_tts?q=I+love+techcrunch
0 votes
Est-ce que cet extrait de code fonctionne comme le téléchargement de la chanson, puis une fois terminé, la chanson est jouée ?
0 votes
Pouvez-vous retirer la solution de votre question et la publier en tant que réponse ?