Un petit générateur de sonneries JS - comment ça marche

Parlons de l'outil ZzFXM, qui est utile pour les développeurs de jeux indépendants ou d'applications Web qui doivent fonctionner avec une quantité de mémoire très limitée.



Parlons également des analogues - rFXGen, wafxr.





Photo chuttersnap / Unsplash



En savoir plus sur le projet



ZzFXM a été présenté par Frank Force, programmeur et auteur du blog de développement de jeux Killed By a Pixel. Dans ses documents, il accorde une attention particulière aux questions de sauvegarde de la mémoire. Il a déjà écrit un simulateur de piano JavaScript qui ne faisait qu'un kilo-octet.



Le générateur de mélodie poursuit cette idée - Frank l'a conçu spécifiquement pour générer de la musique pour des programmes ultra-petits. Ces projets sont mis en œuvre dans le cadre du concours ouvert js13k Games , dont les participants écrivent des jeux en HTML5 et JavaScript en utilisant des dizaines de Ko de mémoire.



ZzFXM peut être utilisé pour développer des jeux indépendants à part entière. Il est licencié sous la licence MIT , il convient donc aux projets commerciaux.


Les sources et les instructions de configuration se trouvent dans le référentiel sur GitHub .



Qu'y a-t-il sous le "capot"



L'utilitaire utilise le moteur ZzFX pour écrire des effets sonores qui ressemblent à huit bits. Il vous permet de contrôler dix-neuf paramètres sonores, du volume à la fréquence et à la forme d'onde. Des exemples de sons que ZzFX peut générer peuvent être trouvés sur le site Web de Frank Force . ZzFXM utilise certains d'entre eux comme échantillons.



Le format des fichiers finis ressemble au MOD utilisé pour stocker et lire des compositions musicales sur l' ordinateur personnel Amiga , donc tous les échantillons avec le son des instruments sont stockés dans des fichiers différents (principe de modularité).



Comment ça fonctionne



Le compositeur compose une séquence de notes indiquant quel instrument doit le jouer et quand. Cette séquence s'appelle une piste. Plusieurs pistes sonnant en parallèle forment un bloc (pattern) avec leur propre numéro. De plus, le compositeur spécifie dans le code du programme quel motif doit sonner et quand.



Cette approche vous permet de former rapidement la composition souhaitée, mais le code final est assez difficile à lire sans commentaires. Dans le référentiel sur GitHub, l'auteur du générateur donne l' exemple suivant:



[                                     // Song
  [                                     // Instruments
    [.9, 0, 143, , , .35, 3],             // Instrument 0
    [1, 0, 216, , , .45, 1, 4, , ,50],    // Instrument 1
    [.75, 0, 196, , .08, .18, 3]          // Instrument 2
  ],
  [                                     // Patterns
    [                                     // Pattern 0
      [                                     // Channel 0
        0,                                    // Using instrument 0
        -1,                                   // From the left speaker
        1,                                    // play C-1
        0, 0, 0,                              // rest (x3)
        3.5,                                  // play E-1 with 50% attenuation
        0, 0, 0                               // rest (x3)
      ],
      [                                     // Channel 1
        1,                                    // Using instrument 1
        1,                                    // From the right speaker
        2,                                    // play D-1
        2.25,                                 // play D-1 with 25% attenuation
        3.5,                                  // Play E-1 with 50% attenuation
        4.75,                                 // Play F-1 with 75% attenuation
        -1,                                   // Release the note
        0, 0, 0                               // rest (x3)
      ]
    ]
  ],
  [                                     // Sequence
    0,                                    // Play pattern 0
    0,                                    // ...and again
  ],
  120,                                  // 120 BPM
  {                                     // Metadata
    title: "My Song",                      // Name of the song
    author: "Keith Clark"                  // Name of the author/composer
  }
]


Vous pouvez écouter comment les pistes générées par l'utilitaire sonnent sur GitHub . La taille du morceau ne dépasse pas 550 octets.



Quels sont les analogues



L'un des analogues de ZzFXM est le rFXGen . Il est écrit en C et basé sur le projet sfxr - en 2007, il a été soumis par l'un des participants au concours LD48. Dans son cadre, chaque développeur doit soumettre un petit jeu en 48 heures. L'utilitaire RFXGen prend en charge les oscillateurs, le vibrato et les filtres passe-bas et passe-haut.





Photo par Ohmydearlife / Pixabay



Un autre générateur de son compact - wafxr . Il restitue l'audio en direct à l'aide de l'API WebAudio et de la bibliothèque wasgen . Wafxr prend également en charge les oscillateurs, le trémolo / vibrato et divers filtres. Il existe une démonstration du travail sur GitHub - vous pouvez y évaluer l'outil vous-même.






Ce que nous avons sur Habré:








« Hi-Fi»:





— ,

VR

Sporth — live-

: 5 , «»







All Articles