Um pequeno gerador de ringtone JS - como funciona

Estamos falando da ferramenta ZzFXM, útil para desenvolvedores de jogos independentes ou aplicativos da web que são forçados a operar com uma quantidade de memória muito limitada.



Vamos falar também sobre análogos - rFXGen, wafxr.





Photo chuttersnap / Unsplash



Mais sobre o projeto



ZzFXM foi apresentado por Frank Force, programador e autor do blog de desenvolvimento de jogos Killed By a Pixel. Em seus materiais, ele dá atenção especial às questões de economia de memória. Certa vez, ele escreveu um simulador de piano em JavaScript com apenas um kilobyte de tamanho.



O gerador de melodia dá continuidade a essa ideia - Frank o projetou especificamente para gerar música para programas ultrapequenos. Esses projetos são implementados como parte da competição aberta de jogos js13k , cujos participantes escrevem jogos em HTML5 e JavaScript usando dezenas de KB de memória.



O ZzFXM pode ser usado para desenvolver jogos independentes completos. É licenciado sob a licença do MIT , portanto, é adequado para projetos comerciais.


Fontes e instruções para configuração estão no repositório no GitHub .



O que está sob o "capô"



O utilitário usa o mecanismo ZzFX para escrever efeitos sonoros que se parecem com oito bits. Ele permite que você controle dezenove parâmetros de som, desde o volume até a frequência e a forma de onda. Exemplos de sons que o ZzFX pode gerar podem ser encontrados no site de Frank Force . ZzFXM usa alguns deles como exemplos.



O formato dos arquivos finalizados lembra o MOD usado para armazenar e tocar composições musicais no computador pessoal Amiga , portanto, todos os samples com o som de instrumentos são armazenados em arquivos diferentes (princípio da modularidade).



Como funciona



O compositor compõe uma sequência de notas indicando qual instrumento deve tocá-la e quando. Essa sequência é chamada de trilha. Várias faixas que soam em paralelo formam um bloco (padrão) com seu próprio número. Além disso, o compositor especifica no código do programa qual padrão deve soar e quando.



Essa abordagem permite formar rapidamente a composição desejada, mas o código resultante é difícil de ler sem comentários. No repositório do GitHub, o autor do gerador dá o seguinte exemplo:



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


Você pode ouvir como as faixas geradas pelo utilitário soam no GitHub . O tamanho da música não excede 550 bytes.



Quais são os análogos



Um dos análogos do ZzFXM é o rFXGen . Ele foi escrito em C e baseado no projeto sfxr - apresentado em 2007 por um dos participantes da competição LD48. Dentro de sua estrutura, cada desenvolvedor deve enviar um pequeno jogo em 48 horas. O utilitário RFXGen oferece suporte a osciladores, vibrato e filtros passa-baixa e alta.





Foto de Ohmydearlife / Pixabay



Outro gerador de som compacto - wafxr . Ele renderiza áudio ao vivo usando a API WebAudio e a biblioteca wasgen . O Wafxr também suporta osciladores, tremolo / vibrato e vários filtros. Há uma demonstração do trabalho no GitHub - lá você mesmo pode avaliar a ferramenta.






O que temos sobre Habré:








« Hi-Fi»:





— ,

VR

Sporth — live-

: 5 , «»







All Articles