MediaElement y reproducir sonido en Windows Store y Windows Phone

Como ya dice el título, MediaElement es un control que nos permite reproducir sonido tanto en aplicaciones Windows Phone (MediaElement para Windows Phone) como en aplicaciones Windows Store (MediaElement para Windows Store). Con mi experiencia quiero contar algunas cosas respecto a este control.

Primero, en Windows Phone tiene algún que otro fallo, a veces no reproduce el sonido, sobretodo si la aplicación está trabajando duro, no sé, quizá cuando está cargando el archivo de audio.

Otro problema es si tenemos más de un MediaElement que quieren reproducir sonido declarados en XAML; en cuanto activamos el segundo el primero deja de reproducir. En este escenario debemos usar XNA Framework para reproducir el sonido.

También, la reproducción continua del mismo, por ejemplo un botón que al pulsar reproduce un sonido, si lo pulsamos muchas veces y de forma continua el sonido de la nueva pulsación corta la del anterior.

A favor debo decir que es la forma más fácil que tenemos de reproducir sonido en Windows Phone, con el permiso del control de comportamiento PlaySoundAction.

Segundo, en Windows Store es más estable. No he detectado en ningún momento que deje de reproducir sonido pase lo que pase.

Además, ya no tenemos el problema de que si hay más de un control MediaElement uno deja de hacer reproducir el otro. Es decir, en Windows Store podemos reproducir varios MediaElement a la vez.

Pero, SI continua el problema del botón que se pulsa repetitivamente y con mucha velocidad. El sonido que reproduce el boton corta el sonido de la pulsación anterior. Para arreglar tenemos dos opciones:

1) Des de código creas el control MediaElement para cada pulsación del botón y lo haces reproducir


storageFile = await installedLocation.GetFileAsync("Assets\\Sounds\\hahahaaa.wav");
sound = await storageFile.OpenReadAsync();
Sound = new MediaElement();
Sound.AutoPlay = true;
Sound.SetSource(sound, storageFile.ContentType);

Pros: Fácil e intuitivo

Contras: Este control no lanzará jamás ningún evento, por tanto la única opción es reproducir con el AutoPlay=true. Eso implica que no puedes controlar cuando se reproduce el sonido porque tienes el tiempo que tarda el archivo de audio a cargarse dentro del control MediaElement. Otro problema, es que produce bajadas de rendimiento aleatorios importantes donde deja el Thread UI ocupado durante media segundo más o menos, lo que hace que en algunos casos la interacción con tu aplicación sea un desastre.

2) Usar XAudio2 de DirectX

Consulta un buen ejemplo aquí: XAudio2 audio file playback sample

Pros: máximo rendimiento y reproducción perfecta

Contras: Programar con C++ (que si somos de .Net pues es un poco diferente) y trabajar con DirectX

Nota : Si eres un maestro en C++ y sabes de DirectX ya no tienes ningún contra. Así que adelante 🙂

Anuncis

Un pensament sobre “MediaElement y reproducir sonido en Windows Store y Windows Phone

  1. Retroenllaç: Reproducir sonido con XNA en Windows Phone | Jordi Parareda

Deixa un comentari

Fill in your details below or click an icon to log in:

WordPress.com Logo

Esteu comentant fent servir el compte WordPress.com. Log Out / Canvia )

Twitter picture

Esteu comentant fent servir el compte Twitter. Log Out / Canvia )

Facebook photo

Esteu comentant fent servir el compte Facebook. Log Out / Canvia )

Google+ photo

Esteu comentant fent servir el compte Google+. Log Out / Canvia )

S'està connectant a %s