mercredi 27 septembre 2017

Java, convertir des wav en mp3

Je maintiens une IHM d'administration dans laquelle un petit player flash permet d'écouter des fichiers wav.

Le passage au player html5 a été laborieux.

Le player devait s'afficher dans une popup (on utilisait auparavant qtip mais le passage à html5 faisait planter le rendu aléatoirement) et un problème d'affichage du temps total du morceau était présent de temps à autre (cf solution dans billet précédent).

Une fois la popup affichée et le problème de temps résolu, je me suis heurté à un autre problème de taille...

En effet, IE11 (un des navigateurs à supporter) ne lit pas les fichiers wav !!!

J'ai donc cherché à convertir les fichiers wav en mp3.

La plupart des solutions sont à base de ffmepg encapsulé (comme JAVE) mais je n'ai pas réussi à les intégrer pour les faire fonctionner dans Tomcat.
Cela était certainement dû au Security Manager...

Puis par chance, j'ai trouvé un convertisseur 100% java : Jump3r

La bibliothèque est disponible sur le repository maven (https://mvnrepository.com/artifact/de.sciss/jump3r/1.0.4) et les sources sur https://github.com/Sciss/jump3r

L'utilisation est simple pour convertir un fichier wav en mp3. Voici ci-dessous un exemple :



Dans celui-ci, la fonction main a été inlinée pour permettre d'attraper/relancer une éventuelle IOException.

Jump3r m'a sauvé la vie : il a permis de modifier la servlet qui délivrait le wav pour lui faire délivrer un mp3 compatible avec tous les players HTML 5 des navigateurs.

Liens utiles
http://textopia.org/androidsoundformats.html
http://dinbror.dk/blog/how-to-preload-entire-html5-video-before-play-solved/

html5, player audio dans une popup

Pour mon projet, je devais afficher un player audio HTML5 dans une popup lors d'un clic sur un span (fichier son)...

Voici ce que cela donne sur un exemple allégé :


avec son code associé :




A noter :

Parfois le temps total du morceau n'était pas affiché par le player. Cela était aléatoire et ce en utilisant le même logiciel (firefox) sous linux ou sous windows (via une machine virtuelle).

Je suspecte que cela était dû au fait que le fichier son était renvoyé par une servlet...

Dans l'exemple ci-dessus, ce n'est pas le cas mais j'ai laissé le patch pour information (la source m'ayant aidé à résoudre ce problème est la suivante : http://dinbror.dk/blog/how-to-preload-entire-html5-video-before-play-solved/)