Flux scripté


h1 12/21/2005 06:38:00 AM

Pendant que les députés parlent de crypter les flux d'information pour mieux les commercialiser, je pense à de nouveaux moyens de scripter leur création afin d'en améliorer la qualité. Jeu de mot pourri mis à part, voici l'état de mes idées en ébullition sur la question des transitions douces dans certains opérateurs de liquidsoap.

Pour des raisons pratiques de concision j'avais décidé qu'il fallait ajouter la définition de fonctions dans le langage de scripts liquidsoap, mais on va voir ici que les fonctions comme valeurs de premiere classe fournissent surtout une solution élégante au problème des transitions entre flux, ou entre pistes d'un flux.

Le problème: En ce moment quand on veut qu'un live prenne le pas sur la programmation automatique quand il s'active, on code: hard_fallback [ live ; automatique ]. Le soucis c'est que la transition est brusque, la diffusion automatique est coupée net par le live. De même quand on passe d'une source à une autre dans fallback [ reggae ; hiphop ] si la source d'arrivée est déja en cours d'émission (si c'est un output ou si un autre output l'utilise) on arrive parfois trop brusquement dessus.

La solution: Moi je veux bien coder des transitions, mais la grosse question était de savoir comment faire pour laisser de la souplesse au scripteur quant à la définition des transitions, de façon élégante et simple. L'idée est de donner à l'opérateur avec chaque alternative une fonction qui effectue la transition vers cette alternative si besoin est -- il n'y a pas besoin au début de la diffusion, ou sur une reprise de diffusion, seulement sur une transition instantanée. Voici un exemple de code tel que je l'imagine, où la transition de A vers B s'effectue par un fondu de A sur 3 secondes, un jingle qui commence à la 2ème seconde du fondu, puis B qui commence 1 seconde avant la fin du jingle (on suppose que le jingle n'a pas besoin de fondu):

let transition tran prev next =
add [ fade_out 3. prev ;
sleep 2. (on_out 1. tran next) ]
in
hard_fallback [ (transition jingle_live), live ;
(transition jingle_auto), auto ]


Clairement, le problème c'est qu'il va falloir demander au scripteur de réfléchir. De mon côté, va falloir que je vérifie que l'implémentation est bien tail-récursive en quelque sorte, pour que les compositions de transitions accumulent pas des indirections jusque l'engorgement. Un autre souci va être le nommage de tous ces petits opérateurs qui font des choses subtilement différentes. Par exemple dans l'exemple suivant je programme le cross-fading sur un flux, cela ne devrait pas être les mêmes noms: cross (fade_in 1. (fade_out 2. source)). C'est là que le lecteur qui croyait ne pas être largué prend vraiment conscience de la difficulté du système.

2 commentaires:

  • > 12/21/2005 06:38:00 AM

    C le matin ou le soir là pour toi?? :)

    Par Anonymous Anonyme, Ã 21/12/05 12:54  

  • Héhé les deux mon général. J'ai essayé de me coucher, cogité, relevé. Malheureusement je me suis endormi après ça.

    Ce soir c'est décidé je me recale sur une nuit blanche. Genepi ou liquidsoap je sais pas, mais ça risque de coder ;)

    Vacances de fou.

    Par Blogger mrpingouin, Ã 21/12/05 14:54  

Un commentaire ?

< Accueil