Estamos en facebook!

Reproductor sencillo html5

Cuando ponemos música en el blog nos topamos con un problema, que no se escucha en dispositivos móviles. Lo mismo puede pasar con algunos videos. Esto es porque en los blogs solemos usar reproductores hechos en flash para poner la música (o el video) y la mayoría de los dispositivos móviles no soporta este formato.

Para algunos esto puede ser muy frustrante, y no es para menos considerando que en la actualidad un gran número de usuarios navegan desde su teléfono o tableta, así que quienes tengan un podcast o música en su blog se quedarán con un gran número de visitantes decepcionados por no poder escuchar el contenido.

¿La solución? Usar HTML5

Una de las tantas ventajas que nos ofrece el HTML5 es poder usar dos etiquetas para reproducir audio o video, las cuales por sí mismas son <audio> y <video>.
Estos elementos son soportados en todos los navegadores modernos incluyendo los navegadores de los dispositivos móviles, con excepción de Internet Explorer 8 para abajo.


Su uso es bastante sencillo, sólo tenemos que añadir la etiqueta <audio> y la etiqueta <source> que es la fuente de donde se toma la dirección del archivo multimedia.

El código es el siguiente:
<audio controls>
<source src="URL del archivo mp3" type="audio/mpeg">
<source src="URL del archivo ogg" type="audio/ogg">
¡Hola usuario de Internet Explorer!, si tuvieras un navegador moderno estarías escuchando una hermosísima canción en lugar de estar leyendo esto :(
</audio>
Ahí debes añadir la URL de tu canción en formato MP3 y otra URL de tu misma canción pero en formatoOGG. Esto es porque algunos navegadores no admiten aun el formato MP3, específicamente el navegador Opera pues según sé Firefox desde la versión 21 ya admite MP3.
Hay varios programas para PC y Mac que convierten archivos de audio y video en formato OGG, pero además hay varios sitios en línea que también lo hacen, uno de mis favoritos es media.io

En cursiva verás que hemos añadido un texto para los usuarios de navegadores antiguos ya que ellos no podrán ver el reproductor pero sí el mensaje.

Ahora que si eres demasiado buena gente y no quieres que ellos se queden sin escuchar el contenido puedes añadir dentro del mismo código el elemento EMBED. De esta forma los usuarios de IE8 y anteriores aunque no puedan ver el reproductor en HTML5, podrán ver el reproductor del plugin que tengan instalado en su navegador.
<audio controls>
<source src="URL del archivo mp3" type="audio/mpeg">
<source src="URL del archivo ogg" type="audio/ogg">
<embed src="URL de tu archivo mp3" type="audio/mp3" width="200"
height="100"/>
</audio>

Los atributos del elemento AUDIO y VIDEO son: controlsautoplayloopmuted, y preload
  • controls permite que se muestren los controles y el reproductor en sí.
  • autoplay hace que el archivo se reproduzca al cargar la página.
  • loop reproducirá el archivo una y otra vez.
  • muted quitará el audio del archivo.
  • preload define si el reproductor se debe cargar cuando se cargue la página.

Un ejemplo del reproductor con varios atributos sería de esta forma:
<audio controls autoplay loop>
<source src="URL del archivo mp3" type="audio/mpeg">
<source src="URL del archivo ogg" type="audio/ogg">
<embed src="URL de tu archivo mp3" type="audio/mp3" width="200"
height="100"/>
</audio>

En el caso del elemento VIDEO es igual, sólo que aquí establecemos un ancho y un alto.


<video width="320" height="240" controls>
<source src="URL del archivo mp4" type="video/mp4">
<source src="URL del archivo ogv" type="video/ogg">
¡Hola usuario de Internet Explorer!, ¿qué crees? aquí se está reproduciendo un video increíble, pero no puedes verlo porque tu navegador es antiguo :(
</video>
Y si quieres dar soporte completo para IE el código sería así:
<video width="320" height="240" controls>
<source src="URL del archivo mp4" type="video/mp4">
<source src="URL del archivo ogv" type="video/ogg">
<object data="URL del archivo swf" width="320" height="240" type="application/x-shockwave-flash">
<param value="URL del archivo swf" name="movie"/>
</object>
</video>

Quizá un inconveniente de usar estos reproductores de HTML5 sea tener que convertir los archivos en diferentes formatos, pero habiendo tantas herramientas para convertir formatos, como la que mencioné anteriormente, el problema se disminuye.
En cuanto al aspecto, aquí sí nos topamos con una traba, y es que cada navegador muestra el reproductor de una forma distinta.

Atributo AUDIO de HTML5 en diferentes navegadores

Seguro pensarás que con CSS podríamos mejorarlo, pero la mala noticia es que no es así. La única forma de cambiar completamente su aspecto es usando Javascript. En la web hay muchas opciones y seguro más adelante publicaremos alguna de ellas.
Por lo pronto, lo que sí podemos hacer es usar muy poquito Javascript y CSS por fuera del reproductor para crear algo como esto:


No es la gran cosa, pero mis habilidades informáticas no dan para más. Aun así dejo el código aquí por si alguien lo quiere, pero ojo, no funcionará en Opera ya que sólo añadiremos el archivo en MP3, y en cuanto a IE9 la barra de progreso no se verá pero en cambio se mostrará el porcentaje que se ha reproducido.
<div class='player-wrapper'>
<audio id='player' src="URL del archivo MP3"></audio>
<div class='player-controls'>
<div class='player-thumb'>
<img src='URL de la imagen miniatura' />
</div>
<a onclick="document.getElementById('player').play()"><img src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhX23Zo9YFdu2T_d-qEWTH2A8j_6duYh0KFR-icyo88ESQ9PnETR35gZCr0dhipUINhLFSFjxVRbkPOPWeMh4NS67aYWEyL-OkB_nGNYnsxVYePp759rw_cOTw12YvVpMux0Tt41ThQQP8l/s28/icon_play.png' /></a>
<a onclick="document.getElementById('player').pause()"><img src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBR2RrSukCCso6Of2toPsOzkf8giNrdKtz0LdVSqqudvHo55tamRHCrHfr52a5TWhnQbqNewTekpbz_XAsr9DuklnRQMzdBVAcdYJqrUkrqj92h3lhTtKyG7ltp17-ztlzJNsYAUzKUfaz/s28/icon_pause.png' /></a>
<a onclick="document.getElementById('player').volume+=0.1"><img src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhoLYKxzruthUJMa9A5W3PM1TwlZoHr-JdND1x29UvkMuwhpDuBMHmuxfjHTjiASA7NvcThKSGYpnCLOR6gruThDZpR3hBMczEnI6v2_FB8u7jERjnfoIo5pOu3DcKgiQ-4zi3cICj0y9uy/s18/icon_increase.png' /></a>
<a onclick="document.getElementById('player').volume-=0.1"><img src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhoDoO7rjlempOezyD8t-4f85tP4zvlo2qcEc30JoBIWiY8SPlPpAXxjTkwgJ_Fn5B27ixlgYhan7SN5Jc5tR4lIXbBtT73VGihKmWEVR_h1FNOOquUSG_iRg-d4gCtBKY92LW_Tcp4Dnjw/s18/icon_decrease.png' /></a>
<progress id='progress' max='100' value='0'><span>0</span>%</progress>
</div>
</div>
<style>
.player-wrapper {
display: table;
height: auto;
width: 180px; /* Ancho del reproductor */
background: #FA5858; /* Color del reproductor */
border-radius: 13px;
position: relative;
margin: 0 auto;
}
.player-thumb img {
width: 160px; /* Tamaño de la miniatura */
padding:10px 0;
margin: 0 auto;
text-align: center;
}
.player-controls {
text-align: center;
display: table-cell;
vertical-align: middle;
padding:0 0 10px;
}
.player-controls a {
margin: 0 2px;
cursor: pointer;
cursor: hand;
}
.player-controls progress {
width:75%;
height: 7px;
background: #FFF;
color: #484848;
margin-top: 5px;
}
::-moz-progress-bar {background: #484848;} /* Color de fondo barra de progreso */
::-webkit-progress-bar {background: #fff;} /* Color de fondo barra de progreso */
::-webkit-progress-value {background: #484848;} /* Color del indicador */
</style>
<script>
var audio=document.getElementById('player');var pBar=document.getElementById('progress');audio.addEventListener('timeupdate',function(){var percent=Math.floor((100/audio.duration)*audio.currentTime);pBar.value=percent;pBar.getElementsByTagName('span')[0].innerHTML=percent},false);
</script>

Usar HTML5 para incrustar audio me parece que es la mejor opción, no sólo porque nos adentramos a la modernidad del HTML sino porque evitamos dejar fuera a los usuarios de dispositivos móviles. Además, al ser nativo del navegador consume muchísimos menos recursos que cualquier otro reproductor. Y por si fuera poco también puede servir para reproducir audio en streaming, o como muchos lo conocen, radio en vivo.