ARNO*

Geek dilettante habitant une belle et grande propriété sur la Côte d’améthyste

  • J’ai besoin de jouer plusieurs fichiers de son en même temps pour une app #Cordova. Le gros souci, c’est qu’en HTML5, sur iOS, les différentes pistes ne sont pas exactement synchronisées, il y a un léger délai, et ça fait comme des effets dégueulasses d’écho qui rend la musique carrément insupportable à écouter (mes premiers essais avec des rifs de AC/DC, c’est juste grotesque à quel point c’est pas synchronisé correctement).

    Même avec un « mediagroup », qui n’a l’air justement implémenté que dans Safari, les pistes ne sont pas bien synchro.

    Du coup je me tourne vers un plugin, qui a l’air de promettre une « faible latence » et la possibilité de gérer la « polyphonie » :
    https://github.com/floatinghotpot/cordova-plugin-nativeaudio

    Effectivement, c’est mieux, c’est un peu moins n’importe quoi. Mais je ne trouve pas que ce soit parfait non plus.

    (L’idée, c’est qu’on a les différents instruments d’un orchestre, à jouer ensemble, avec possibilité de couper ou de jouer chaque voix, pour donner la contrôle sur l’orchestre.)

    Est-ce que quelqu’un a déjà eu ce problème en HTML, éventuellement avec une solution native pour Cordova ?

    • Tu vas découvrir une jungle sauvage et magnifique !
      Attention, pour être précis :
      Ton problème n’est pas la latence (le temps mis par l’audio pour être lu lorsque tu active la lecture). Dans ton cas, que ça mette 100 ms ou 200 ms n’est pas critique pour l’utilisateur.
      Ton problème est la synchronisation (que toutes les pistes audio démarrent pile au même moment lorsque tu déclenche la lecture et qu’ensuite chaque piste audio soit lue à la même vitesse). D’où le recours à l’horloge webaudio.
      Un autre aspect à prendre en compte : je suppose que tu dispose de plusieurs fichiers audio comprenant respectivement la batterie, la basse, la guitare, etc. Je te suggère pour commencer d’utiliser ces fichiers en PCM (en wav quoi ...) car le codage/décodage mp3 ou autre introduit notamment des artefacts temporels (genre rajout de silence au début, modification subtile de la durée, ...) et ça risque de gravement nuire au debuggage. Une fois le système fonctionnel en PCM, et si la taille des fichiers est un problème, peaufiner le bazar avec des fichiers encodés en lossy.

      #de_rien

    • Yes ! Ça marche : j’ai 13 pistes stéréo qui se lancent parfaitement en même temps et qui restent synchronisées. Absolument aucune désynchronisation entre les pistes, tant qu’on ne modifie pas le volume de chaque piste on a simplement l’impression d’écouter une version stéréo « toute simple » du morceau.

      Et la cerise sur le gâteau (merci encore @grommeleur), c’est que c’est du Javascript standard et non plus un plugin de Cordova, alors évidemment c’est nettement plus rapide à développer, puisque je peux tester en local sur le Mac sans compiler à chaque fois sous Xcode.