Ein winziger JS-Klingeltongenerator - wie es funktioniert

Wir sprechen über das ZzFXM-Tool, das für Entwickler von Indie-Spielen oder Webanwendungen nützlich ist, die gezwungen sind, mit einer sehr begrenzten Speichermenge zu arbeiten.



Sprechen wir auch über Analoga - rFXGen, wafxr.





Foto chuttersnap / Unsplash



Mehr zum Projekt



ZzFXM wurde von Frank Force, Programmierer und Autor des Spieleentwicklungsblogs Killed By a Pixel, vorgestellt. In seinen Materialien legt er besonderes Augenmerk auf das Speichern von Speicher. Er hat einmal einen JavaScript- Klaviersimulator geschrieben , der nur ein Kilobyte groß war.



Der Melody Generator setzt diese Idee fort - Frank hat sie speziell entwickelt, um Musik für ultrakleine Programme zu generieren. Solche Projekte werden im Rahmen des offenen Wettbewerbs js13k Games implementiert , dessen Teilnehmer Spiele in HTML5 und JavaScript mit mehreren zehn KB Speicher schreiben.



Mit ZzFXM können vollwertige Indie-Spiele entwickelt werden. Es ist unter der MIT-Lizenz lizenziert und daher für kommerzielle Projekte geeignet.


Quellen und Anweisungen zum Einrichten befinden sich im Repository auf GitHub .



Was ist unter der "Haube"



Das Dienstprogramm verwendet die ZzFX- Engine , um Soundeffekte zu schreiben, die acht Bit ähneln. Sie können damit neunzehn Klangparameter von Lautstärke über Frequenz bis hin zur Wellenform steuern. Beispiele für Sounds, die ZzFX erzeugen kann, finden Sie auf der Frank Force-Website . ZzFXM verwendet einige davon als Beispiele.



Das Format der fertigen Dateien ähnelt dem MOD, das zum Speichern und Abspielen von Musikkompositionen auf dem Amiga- PC verwendet wird , sodass alle Samples mit dem Klang von Instrumenten in verschiedenen Dateien gespeichert werden (Modularitätsprinzip).



Wie es funktioniert



Der Komponist komponiert eine Folge von Noten, die angeben, welches Instrument wann gespielt werden soll. Diese Sequenz wird als Spur bezeichnet. Mehrere parallel klingende Spuren bilden einen Block (Muster) mit ihrer eigenen Nummer. Ferner gibt der Komponist im Programmcode an, welches Muster wann klingen soll.



Mit diesem Ansatz können Sie schnell die gewünschte Komposition erstellen, aber der endgültige Code ist ohne Kommentare nur schwer zu lesen. Im Repository auf GitHub gibt der Autor des Generators das folgende Beispiel an:



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


Sie können hören, wie die vom Dienstprogramm generierten Titel auf GitHub klingen . Die Songgröße überschreitet nicht 550 Bytes.



Was sind die Analoga



Eines der Analoga von ZzFXM ist rFXGen . Es ist in C geschrieben und basiert auf dem sfxr- Projekt - 2007 wurde es von einem der Teilnehmer des LD48-Wettbewerbs eingereicht. Innerhalb seines Rahmens muss jeder Entwickler innerhalb von 48 Stunden ein kleines Spiel einreichen. Das Dienstprogramm RFXGen unterstützt Oszillatoren, Vibrato sowie Tief- und Hochpassfilter.





Foto von Ohmydearlife / Pixabay



Ein weiterer kompakter Klangerzeuger - wafxr . Es rendert Live-Audio mithilfe der WebAudio-API und der Wasgen- Bibliothek . Wafxr unterstützt auch Oszillatoren, Tremolo / Vibrato und verschiedene Filter. Es gibt eine Demo der Arbeit an GitHub - dort können Sie das Tool selbst bewerten.






Was wir auf Habré haben:








« Hi-Fi»:





— ,

VR

Sporth — live-

: 5 , «»







All Articles