Un pequeño generador de tonos de llamada JS: cómo funciona

Hablamos de la herramienta ZzFXM, útil para desarrolladores de juegos independientes o aplicaciones web que se ven obligados a operar con una cantidad de memoria muy limitada.



Hablemos también de análogos: rFXGen, wafxr.





Foto chuttersnap / Unsplash



Más sobre el proyecto



ZzFXM fue presentado por Frank Force, programador y autor del blog de desarrollo de juegos Killed By a Pixel. En sus materiales, presta especial atención a los problemas de salvar la memoria. Una vez escribió un simulador de piano de JavaScript que solo tenía un kilobyte de tamaño.



Melody Generator continúa con esta idea: Frank lo diseñó específicamente para generar música para programas ultrapequeños. Estos proyectos se implementan como parte de la competencia abierta js13k Games , cuyos participantes escriben juegos en HTML5 y JavaScript utilizando decenas de KB de memoria.



ZzFXM se puede utilizar para desarrollar juegos independientes completos. Está licenciado bajo la licencia MIT , por lo que es adecuado para proyectos comerciales.


Las fuentes y las instrucciones para la configuración se encuentran en el repositorio de GitHub .



¿Qué hay debajo del "capó"



La utilidad utiliza el motor ZzFX para escribir efectos de sonido que se asemejan a los de ocho bits. Le permite controlar diecinueve parámetros de sonido, desde el volumen hasta la frecuencia y la forma de onda. En el sitio web de Frank Force se pueden encontrar ejemplos de sonidos que puede generar ZzFX . ZzFXM usa algunos de ellos como ejemplos.



El formato de los archivos terminados se asemeja al MOD utilizado para almacenar y reproducir composiciones musicales en la computadora personal Amiga , por lo tanto, todas las muestras con el sonido de los instrumentos se almacenan en diferentes archivos (principio de modularidad).



Cómo funciona



El compositor compone una secuencia de notas que indica qué instrumento debe tocarlo y cuándo. Esta secuencia se llama pista. Varias pistas que suenan en paralelo forman un bloque (patrón) con su propio número. Además, el compositor especifica en el código del programa qué patrón debe sonar y cuándo.



Este enfoque le permite formar rápidamente la composición deseada, pero el código resultante es difícil de leer sin comentarios. En el repositorio de GitHub, el autor del generador da el siguiente ejemplo:



[                                     // 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
  }
]


Puedes escuchar cómo suenan las pistas generadas usando la utilidad en GitHub . El tamaño de la canción no supera los 550 bytes.



Que son los análogos



Uno de los análogos de ZzFXM es rFXGen . Está escrito en C y se basa en el proyecto sfxr , presentado en 2007 por uno de los participantes en el concurso LD48. Dentro de su marco, cada desarrollador debe presentar un pequeño juego en 48 horas. La utilidad RFXGen admite osciladores, vibrato y filtros de paso alto y bajo.





Foto de Ohmydearlife / Pixabay



Otro generador de sonido compacto: wafxr . Reproduce audio en vivo usando la API WebAudio y la biblioteca wasgen . Wafxr también admite osciladores, trémolo / vibrato y varios filtros. Hay una demostración del trabajo en GitHub : allí puede evaluar la herramienta usted mismo.






Lo que tenemos sobre Habré:








« Hi-Fi»:





— ,

VR

Sporth — live-

: 5 , «»







All Articles