by carson

Genuary 2023 Day 10 - Generative Music

IPFS
Genuary 2023 Day 10 - Generative Music

11 January 2023TEZOSIPFS

-- genuary #10 2023
-- generative music
-- by carson kompon

-- fxhash snippet
w=stat(6)s=1
for i=1,#w do
ch=ord(sub(w,i,i))s+=s*31+ch
end
srand(s)

-- init variables & palette
balls={}
size=8+rnd(20)
bounds={size,size,128-size,128-size}
pal({[0]=0,2,3,129,132,136,139,1,4,8,11,140,137,7},1)

-- create note
function make_note(inst,vol,pitch,effect)
b1=pitch+64*(inst%4)
b2=16*effect+2*vol+flr(inst/4)
return b1,b2
end

-- perc notes
function get_perc(p)
p=p%3
if p==0 then
-- kick
return make_note(0,7,0,3)
elseif p==1 then
-- snare
return make_note(6,7,0,3)
else
--hat
return make_note(6,7,0,5)
end
end

-- create all sfx procedurally
inst=rnd(6)\1
vol=6
effect=rnd({0,0,0,5,5,5,4,4,3})
rootnote=(rnd(12)\1)*(1+rnd(2)\1)
scale={0,2,4,5,7,9,11}
drumdens=2+rnd(8)
drum=0
for i=0,11 do
sfxa=0x3200+(8+i)*68
pitch=rootnote+rnd(scale)
b1,b2=make_note(inst,vol,pitch,effect)
if i%drumdens==0 then
b1,b2=get_perc(drum)
drum+=1
end
poke(sfxa,b1)
poke(sfxa+1,b2)
end

-- ball object
function spawn_ball(x,y,note)
add(balls,{
x=x,y=y,note=note,r=3,
col=9+rnd(4)\1,
hs=rnd(2)-1,
vs=rnd(2)-1,
update=function(self)
xto=self.x+self.hs
yto=self.y+self.vs
if xto<=bounds[1]+self.r then
self.hs=abs(self.hs)
xto+=self.hs
self:play()
elseif xto>=bounds[3]-self.r then
self.hs=-abs(self.hs)
xto+=self.hs
self:play()
end
if yto<=bounds[2]+self.r then
self.vs=abs(self.vs)
yto+=self.vs
self:play()
elseif yto>=bounds[4]-self.r then
self.vs=-abs(self.vs)
yto+=self.vs
self:play()
end
self.x=xto
self.y=yto
circfill(self.x,self.y,self.r,self.col)
end,
play=function(self)
sfx(8+self.note)
end
})
end

-- spawn balls
for i=1,8 do
spawn_ball(
63+rnd(32)-16,
63+rnd(32)-16,
i-1
)
end

cls()

::_::

-- burn the screen >:)
for i=1,200 do
x=rnd(128)
y=rnd(128)
c=pget(x,y)
if(c~=13)c=max(c-4)
circfill(x,y,1,c)
end

-- update balls
for ball in all(balls) do
ball:update()
end

-- draw box
color(13)
line(bounds[1],bounds[2],bounds[3],bounds[2])
line(bounds[3],bounds[2],bounds[3],bounds[4])
line(bounds[1],bounds[4],bounds[3],bounds[4])
line(bounds[1],bounds[2],bounds[1],bounds[4])

flip()
goto _

I make games and gameart. Currently studying game design :)

@CarsonKompon | carsonk.net

32 EDITIONS

0 RESERVES

minted

28 / 32

fixed price

1 TEZ

stay ahead with our newsletter

receive news on exclusive drops, releases, product updates, and more

feedback