Awesome
ZzFX - Zuper Zmall Zound Zynth
ZzFX is a tiny sound generator designed to produce a wide variety of sound effects with minimal code overhead. It's perfect for games, prototypes, and any web application that needs sound without the bulk of traditional sound files.
ZzFX Sound Designer - Soundboard Demo
🌟 Features
- Compact: Less than 1 kilobyte when compressed!
- Versatile: 20 controllable parameters for diverse sound effects.
- No Dependencies: Standalone with no external libraries.
- Cross-Browser: Compatible with nearly all web browsers.
- Open Source: MIT licensed, use it anywhere!
🔊 Why Use ZzFX?
- Code-Driven Sound: Add or change sound effects with just one line of code.
- Lightweight: No sound asset files mean faster download times.
- Prototyping: Ideal for placeholder sound effects.
- Game Jams: Minimal overhead for size-limited competitions like JS13K.
- Not Just for Games: Enhance any website with sound.
🚀 How to Use
- Download from github or use
npm install zzfx
- Import ZZFX as a module with using
import {ZZFX, zzfx} from './ZzFX.js'
- Or paste the code from ZzFXMicro.min.js
- To play a sound just call zzfx(), something like
zzfx(...[,,,,.1,,,,9])
- Use the ZzFX sound designer web app to craft new sounds.
Sample sounds...
zzfx(...[,,925,.04,.3,.6,1,.3,,6.27,-184,.09,.17]); // Game Over
zzfx(...[,,537,.02,.02,.22,1,1.59,-6.98,4.97]); // Heart
zzfx(...[1.5,.8,270,,.1,,1,1.5,,,,,,,,.1,.01]); // Piano
zzfx(...[,,129,.01,,.15,,,,,,,,5]); // Drum
🎶 ZzFX Music
- ZzFX now supports music via ZzFXM by Keith Clark!
- Super tiny player and songs.
- Compatible with NoteCraft exports.
🛠️ ZzFX UI Features
- Random Sound Generation: Create sounds from presets.
- Sound Management: Auto-save, rename, and favorite sounds.
- Sound Visualization: View sound wave images on playback.
- Sharing: Load sounds via pasted zzfx code.
- Export/Import: Drag-and-drop support for sound lists.
- Offline Playback: Save sounds as .wav files.
🖥️ ZzFX Micro Code
Here's all the code you need to play ZzFX sounds with JavaScript!
let // ZzFXMicro - Zuper Zmall Zound Zynth - v1.3.1 by Frank Force ~ 1000 bytes
zzfxV=.3, // volume
zzfxX=new AudioContext, // audio context
zzfx= // play sound
(p=1,k=.05,b=220,e=0,r=0,t=.1,q=0,D=1,u=0,y=0,v=0,z=0,l=0,E=0,A=0,F=0,c=0,w=1,m=0,B=0
,N=0)=>{let M=Math,d=2*M.PI,R=44100,G=u*=500*d/R/R,C=b*=(1-k+2*k*M.random(k=[]))*d/R,
g=0,H=0,a=0,n=1,I=0,J=0,f=0,h=N<0?-1:1,x=d*h*N*2/R,L=M.cos(x),Z=M.sin,K=Z(x)/4,O=1+K,
X=-2*L/O,Y=(1-K)/O,P=(1+h*L)/2/O,Q=-(h+L)/O,S=P,T=0,U=0,V=0,W=0;e=R*e+9;m*=R;r*=R;t*=
R;c*=R;y*=500*d/R**3;A*=d/R;v*=d/R;z*=R;l=R*l|0;p*=zzfxV;for(h=e+m+r+t+c|0;a<h;k[a++]
=f*p)++J%(100*F|0)||(f=q?1<q?2<q?3<q?Z(g**3):M.max(M.min(M.tan(g),1),-1):1-(2*g/d%2+2
)%2:1-4*M.abs(M.round(g/d)-g/d):Z(g),f=(l?1-B+B*Z(d*a/l):1)*(f<0?-1:1)*M.abs(f)**D*(a
<e?a/e:a<e+m?1-(a-e)/m*(1-w):a<e+m+r?w:a<h-c?(h-a-c)/t*w:0),f=c?f/2+(c>a?0:(a<h-c?1:(
h-a)/c)*k[a-c|0]/2/p):f,N?f=W=S*T+Q*(T=U)+P*(U=f)-Y*V-X*(V=W):0),x=(b+=u+=y)*M.cos(A*
H++),g+=x+x*E*Z(a**5),n&&++n>z&&(b+=v,C+=v,n=0),!l||++I%l||(b=C,u=G,n=n||1);p=zzfxX.
createBuffer(1,h,R);p.getChannelData(0).set(k);b=zzfxX.createBufferSource();
b.buffer=p;b.connect(zzfxX.destination);b.start()}
🎮 Games Using ZzFX
Space Huggers / Packabunchas / Galaxy Rider / The Adventures of Captain Callisto / Welcome to Space / Bogus Roads / NoteCraft / The Wandering Wraith / Bounce Back / Hue Jumper / Bubba's Back Room / Backstabber Hero / Spendotron: 2019 / Dioretsa / Back 2 Back / Quick Wins / Back Relax / Back To The Island / Backspace It / Back To The Stars / Can't Get Back / Letchworth Village / Noegnud / Sausage Redemption / Marshmallow Sky / Big Champ / I want to google the game / Edge Not Found / Stolen Sword / Highway 404 / The Last Spartan / OS13k / Crab Story / Cooking for Skully / Egg Time Rewind / Charon Jr. / 13 / Soul Surf / Dead Again / Trench Fisher / Path to Glory / Merlin vs Alfonso / Casual Crusade / Squirtcopter / Dr1v3n Wild / Squad 13 / Coup Ahoo / The Way of the Dodo / Wendol Village / Bubble Burst / Brewing Disaster / Data Warrior: 13kb limit / Unblock