2010-07-26 22 views
7

Pongo music.mp3 en recursos y luego agregué Windows Media Player a las referencias. Escribí este código:¿Cómo se juega el archivo .mp3 desde los recursos en C#?

WindowsMediaPlayer wmp = new WindowsMediaPlayer(); 
      wmp.URL = "music.mp3"; 
      wmp.controls.play(); 

No funciona. ¿Cómo puedo jugar el archivo .mp3 desde los recursos?

Respuesta

6

lo hice:

WindowsMediaPlayer wmp = new WindowsMediaPlayer(); 
     Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("PostGen.Resources.Kalimba.mp3"); 
     using (Stream output = new FileStream ("C:\\temp.mp3", FileMode.Create)) 
     { 
      byte[] buffer = new byte[32*1024]; 
      int read; 

      while ((read= stream.Read(buffer, 0, buffer.Length)) > 0) 
      { 
       output.Write(buffer, 0, read); 
      } 
     } 
     wmp.URL = "C:\\temp.mp3"; 
     wmp.controls.play(); 

Tenemos que eliminar este archivo temporal:

private void Form1_FormClosing(object sender, FormClosingEventArgs e) 
    { 
     File.Delete("C:\\temp.mp3"); 
    } 
+0

Crear un archivo temporal como este no debe considerarse una solución válida. El método MediaPlayer.Play, para bien o para mal (lo discutiría peor), no toma una transmisión como entrada. Es mucho mejor que implemente el MP3 con su ejecutable y pase la ubicación del archivo a esa función. – Seanba

2

envolví biblioteca mp3 decodificador y lo puso a disposición de los desarrolladores de .NET. Lo puedes encontrar aquí:

http://sourceforge.net/projects/mpg123net/

se incluyen las muestras de convertir archivos mp3 a PCM, y leer las etiquetas ID3.

Lea su recurso, conviértalo en PCM y póngalo en la clase waveOut que está disponible como componente de interoperabilidad .NET. No es necesario crear archivos temporales.

clases

waveOut disponibles también en SourceForge:

http://windowsmedianet.sourceforge.net/

0

o Tyr este;

 var file = $"{Path.GetTempPath()}temp.mp3"; 
      if (!File.Exists(file)) 
      { 
       using (Stream output = new FileStream(file, FileMode.Create)) 
       { 
        output.Write(Properties.Resources.Kalimba, 0, Properties.Resources.Kalimba.Length); 
       } 
      } 
      var wmp = new WindowsMediaPlayer { URL = file }; 
      wmp.controls.play(); 
Cuestiones relacionadas