Escuchar música desde que ejecute la consola y dentro de un array tipo Byte.

Iniciado por Meta, 25 Febrero 2019, 23:21 PM

0 Miembros y 1 Visitante están viendo este tema.

Meta

Hola:

Código que creo que se puede hacer es algo así.

Código (csharp) [Seleccionar]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Musica_consola_01_cs
{
    class Program
    {
        static void Main(string[] args)
        {
            #region Música.
            /* Posición Inicial: 00000000, Posición Final: 00001891, Longitud: 00001892 */

// Pongo pocos bytes para no agrandar el tema en el foro.

            byte[] rawData = {
    0x4D, 0x54, 0x68, 0x64, 0x00, 0x00, 0x00, 0x06, 0x00, 0x01, 0x00, 0x08
};

#endregion

            var c1 = new System.Windows.Media.MediaPlayer();
            c1.Open(new System.Uri(rawData));
            c1.Play();
        }
    }
}



Me da este error.

Gravedad    Código    Descripción    Proyecto    Archivo    Línea    Estado suprimido
Error    CS0234    El tipo o el nombre del espacio de nombres 'Media' no existe en el espacio de nombres 'System.Windows' (¿falta alguna referencia de ensamblado?)    Musica_consola_01_cs    C:\Users\Usuario\Documents\Visual Studio 2017\Projects\Musica_consola_01_cs\Musica_consola_01_cs\Program.cs    545    Activo

No encuentro en referencia el Media.

¿Alguna idea?

Saludos.
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

Eleкtro

Cita de: Meta en 25 Febrero 2019, 23:21 PMNo encuentro en referencia el Media.

Me resulta inverosimil que a estas alturas despues de años programando en C# necesites ayuda para resolver este tipo de duda tan básica...




También deberías añadir una referencia al ensamblado WindowsBase.dll y System.Windows.dll para así poder acceder al instrumental básico de la librería de clases de WPF.




Cita de: Meta en 25 Febrero 2019, 23:21 PM
Código (csharp) [Seleccionar]

// Pongo pocos bytes para no agrandar el tema en el foro.

           byte[] rawData = {
   0x4D, 0x54, 0x68, 0x64, 0x00, 0x00, 0x00, 0x06, 0x00, 0x01, 0x00, 0x08
};

¿Esos bytes se supone que son los bytes raw de un archivo de sonido, o que cosa sinó?. En cualqueir caso, la clase System.Windows.Media.MediaPlayer no te va a servir para eso, ya que no acepta un array de bytes o stream, así que primero debes volcar los bytes a un archivo local, y entonces especificar la ruta de dicho archivo en la propiedad MediaPlayer.Source.
Ahora no me vayas a decir que no sabes como crear un archivo con esos bytes, deberías saberlo ya, pero bueno, por si acaso: File.WriteAllBytes(String, Byte[]) - Microsoft Docs o también: FileStream Class (System.IO) | Microsoft Docs.

Como alternativa puedes usar la clase System.Media.SoundPlayer, la cual provee una propiedad SoundPlayer.Stream que te permitirá asignar un objeto de tipo MemoryStream (donde puedes escribir ese array de bytes que tienes), es decir sin necesidad de volcar esos bytes a un archivo local, pero esta clase está limitada a reproducir archivos de sonido WAV (no MP3 ni ningún otro formato).

EDITO:
Acabo de recordar que con la API nativa de MCI (Media Control Interface) también puedes repoducir archivos de audio MP3 (y WAV y MIDI)...
pero esto requiere escribir muchos P/Invokes para luego escribir un wrapper, y creo que dicha API no soporta la reproducción desde un bloque de memoria...

Ahí tienes dos tres opciones. Saludos.