uxn/projects/examples/devices/audio.usm

110 lines
2.8 KiB
Plaintext

( dev/audio )
%MOD { DUP2 DIV MUL SUB }
@timer $1
@progress $1
( devices )
|00 @System [ &vector $2 &pad $6 &r $2 &g $2 &b $2 ]
|20 @Screen [ &vector $2 &width $2 &height $2 &pad $2 &x $2 &y $2 &addr $2 &color $1 ]
|30 @Audio [ &pad $8 &adsr $2 &len $2 &addr $2 &volume $1 &pitch $1 ]
|0100 ( -> )
( set color pallete )
#00ff .System/r DEO2
#0f0f .System/g DEO2
#0ff0 .System/b DEO2
;on-frame .Screen/vector DEO2 ( run on-frame every 1/60th of a second )
#ff .Audio/volume DEO ( set volume to max )
;saw .Audio/addr DEO2 ( set waveform to saw for audio engine )
;saw/end ;saw SUB2 #0002 SFT2 .Audio/len DEO2
#1202 .Audio/adsr DEO2 ( set envelope for audio engine )
BRK
@on-frame ( -> )
( incr ) .timer PEK #01 ADD .timer POK
( skip ) .timer PEK #10 EQU ,&play-note JNZ BRK &play-note
( get note )
;melody #00 .progress PEK ADD2 GET
( play note )
DUP .Audio/pitch DEO
( erase last note )
#20 .Screen/color DEO
( draw note )
#00 SWP #0004 MUL2 #0100 SUB2 .Screen/y DEO2
#00 .progress PEK #0008 MUL2 .Screen/x DEO2
;dot .Screen/addr DEO2
#21 .Screen/color DEO
( incr ) .progress PEK #01 ADD #20 MOD .progress POK
#00 .timer POK
BRK
@silence ( -> )
BRK
( defines a sawtooth wave. )
@saw ( -> )
dfa0 df40 dee0 de80 de20 ddc0 dd60 dd00
dca0 dc40 dbe0 db80 db20 dac0 da60 da00
d9a0 d940 d8e0 d880 d820 d7c0 d760 d700
d6a0 d640 d5e0 d580 d520 d4c0 d460 d400
d3a0 d340 d2e0 d280 d220 d1c0 d160 d100
d0a0 d040 cfe0 cf80 cf20 cec0 ce60 ce00
cda0 cd40 cce0 cc80 cc20 cbc0 cb60 cb00
caa0 ca40 c9e0 c980 c920 c8c0 c860 c800
c7a0 c740 c6e0 c680 c620 c5c0 c560 c500
c4a0 c440 c3e0 c380 c320 c2c0 c260 c200
c1a0 c140 c0e0 c080 c020 bfc0 bf60 bf00
bea0 be40 bde0 bd80 bd20 bcc0 bc60 bc00
bba0 bb40 bae0 ba80 ba20 b9c0 b960 b900
b8a0 b840 b7e0 b780 b720 b6c0 b660 b600
b5a0 b540 b4e0 b480 b420 b3c0 b360 b300
b2a0 b240 b1e0 b180 b120 b0c0 b060 b000
afa0 af40 aee0 ae80 ae20 adc0 ad60 ad00
aca0 ac40 abe0 ab80 ab20 aac0 aa60 aa00
a9a0 a940 a8e0 a880 a820 a7c0 a760 a700
a6a0 a640 a5e0 a580 a520 a4c0 a460 a400
a3a0 a340 a2e0 a280 a220 a1c0 a160 a100
a0a0 a040 9fe0 9f80 9f20 9ec0 9e60 9e00
9da0 9d40 9ce0 9c80 9c20 9bc0 9b60 9b00
9aa0 9a40 99e0 9980 9920 98c0 9860 9800
97a0 9740 96e0 9680 9620 95c0 9560 9500
94a0 9440 93e0 9380 9320 92c0 9260 9200
91a0 9140 90e0 9080 9020 8fc0 8f60 8f00
8ea0 8e40 8de0 8d80 8d20 8cc0 8c60 8c00
8ba0 8b40 8ae0 8a80 8a20 89c0 8960 8900
88a0 8840 87e0 8780 8720 86c0 8660 8600
85a0 8540 84e0 8480 8420 83c0 8360 8300
82a0 8240 81e0 8180 8120 80c0 8060 8000
&end
BRK
( song data, #ff is used for a rest )
@melody [
54 52 54 4f 4b 4f 48 ff
54 52 54 4f 4b 4f 48 ff
54 56 57 56 57 54 56 54
56 52 54 52 54 50 54 ff
]
( dot sprite )
@dot [ 003c 7eff 7e3c 0000 ]