vendredi 10 mai 2013

[Instant Prog] Long Line Theory Aftermath : LLTO & ByteBeat

Salut à tous! Vous vous souvenez de mon article sur Long Line Theory? J'avais trouvé une chouette formule dont le résultat s'avérait être une musique. Eh bien si on regarde plus près ceci:
/ mu6k 2011-10-10 http://www.youtube.com/watch?v=tCRPUv8V22o "Long-line Theory", 
Chaos Theory cover, optimized by ryg, p01 et al.

"Optimized", il y a eu donc une version originale, et je l'ai trouvée! Voici un lien pour écouter le résultat: [ICI], et un autre pour la comparaison.[ICI] (attention, ça paraît un peu bizarre). La compression réalisée par ces petits génies nous fait perdre un peu de la qualité originale du LLT, mais la formule de l'original est un poil plus compliquée...
Avant de commencer à montrer du code, expliquons un peu ce ByteBeat. Ce terme est le terme associé à ces bidouilles audio-programmées. j'ai fait des recherches plus approfondies après avoir rédigé le premier billet par curiosité, et j'ai pu trouver ce topic, de chez pouet.net (ne vous moquez pas, c'est un des paradis des demosceners) et je l'ai lu intégralement. Quelle joie de revoir Long Line Theory. J'ai adoré le moment du topic où il s'y mettent tous pour essayer d'optimiser la formule, quitte à perdre en qualité...


 Je ne ferai pas à nouveau le détail précis des modules, mais je vais noter quelques trucs:

  • Tout module dépend de sb, qui est visiblement le délayeur.
  • Le Math.min/max sert de stabilisateur.
  • Les modules drum, intrument et background ne dépendent de rien, sauf du délayeur. Ils sont donc indépendants (virer le délayeur ne fait juste que zapper l'intro).
Voici donc le code original de Long Line Theory:

((sb=t>0xffff)&0)+
Math.max(
 Math.min(
  ((y=Math.pow(2,[15,15,23,8][t>>14&3]/12))&0)
  +(
   ((y*t*0.241)&127-64)
   +((y*t*0.25)&127-64)
  )*1.2
  +(
   ((a=1-(t&0x7ff)/0x7ff)&0)
   +(((5*t&0x7ff)*a)&255-127)
   *((0x53232323>>(t>>11&31))&1)*a*1.0
   +(((d=(14*t*t^t)&0x7ff)*a)&255-128)
   *((0xa444c444>>(t>>11&31))&1)*a*1.5
   +((a*a*d*(t>>9&1)&0xff-0x80)*0.1337)
  )*sb
  +((g=(t&0x7ff)/0x7ff)&0)
  +((g=1-(g*g))&0)
  +((h=Math.pow(2,([[15,18,17,17,17,17,999,999,22,22,999,18,999,15,20,22],[20,18,17,17,10,10,999,999,20,22,20,18,17,18,17,10]][((t>>14&3)>2)&1][t>>10&15])/12))&0)
  +(
   ((h*t&31)+(h*t*1.992&31)+(h*t*.497&31)+(h*t*0.977&am64)
2.0*sb,127
 ),
-128)

Et encore, je vous l'ai aéré. Mais comme sa version optimisée, elle est totalement séparable en plusieurs morceaux qui composent la musique. Je vous présente donc Long Line Theory Original Explained:

intro= ((sb=t>0xffff)&0),
background=
    (((y=Math.pow(2,[15,15,23,8][t>>14&3]/12))&0)
    +(
      ((y*t*0.241)&127-64)
      +((y*t*0.25)&127-64)
    )*1.2),

drum=
    (
      ((a=1-(t&0x7ff)/0x7ff)&0)
      +(((5*t&0x7ff)*a)&255-127)
      *((0x53232323>>(t>>11&31))&1)*a*1.0

      +(((d=(14*t*t^t)&0x7ff)*a)&255-128)
      *((0xa444c444>>(t>>11&31))&1)*a*1.5
      +((a*a*d*(t>>9&1)&0xff-0x80)*0.1337)
    )*sb,
instrument=
    +((g=(t&0x7ff)/0x7ff)&0)
    +((g=1-(g*g))&0)
    +((h=Math.pow(2,([[15,18,17,17,17,17,999,999,22,22,999,18,999,15,20,22],[20,18,17,17,10,10,999,999,20,22,20,18,17,18,17,10]][((t>>14&3)>2)&1][t>>10&15])/12))&0)
    +(
      ((h*t&31)+(h*t*1.992&31)+(h*t*.497&31)+(h*t*0.977&31)-64)
    )*g*2.0*sb,


intro+
Math.max(
  Math.min(
  instrument+background+drum
,127),-128)

Un lien vers cette version sera totalement inutile car elle reproduit à la perfection l'originale! :3

Voilà voilà, maintenant, vous savez ce qu'est ma nouvelle sonnerie! Bon allez, ce court billet finit, je vous laisse, je vais déjà en rédiger un autre pour expliquer quelques choses, notamment à propos du blog. A très bientôt!

Aucun commentaire:

Publier un commentaire