uxn

Varvara Ordinator, written in ANSI C(SDL2)
git clone https://git.eamoncaddigan.net/uxn.git
Log | Files | Refs | README | LICENSE

piano.tal (13364B)


      1 ( Piano:
      2 	Play notes with the keyboard or the controller )
      3 
      4 |00 @System &vector $2 &wst $1 &rst $1 &pad $4 &r $2 &g $2 &b $2 &debug $1 &halt $1
      5 |10 @Console &vector $2 &read $1 &pad $5 &write $1 &error $1
      6 |20 @Screen &vector $2 &width $2 &height $2 &auto $1 &pad $1 &x $2 &y $2 &addr $2 &pixel $1 &sprite $1
      7 |30 @Audio0 &vector $2 &position $2 &output $1 &pad $3 &adsr $2 &length $2 &addr $2 &volume $1 &pitch $1
      8 |40 @Audio1 &vector $2 &position $2 &output $1 &pad $3 &adsr $2 &length $2 &addr $2 &volume $1 &pitch $1
      9 |80 @Controller &vector $2 &button $1 &key $1
     10 |90 @Mouse &vector $2 &x $2 &y $2 &state $1 &pad $3 &modx $2 &mody $2
     11 
     12 |0000
     13 
     14 	@octave $1
     15 	@center &x $2 &y $2
     16 	@adsr-view &x1 $2 &y1 $2 &x2 $2 &y2 $2
     17 	@wave-view &x1 $2 &y1 $2 &x2 $2 &y2 $2
     18 	@octave-view &x1 $2 &y1 $2 &x2 $2 &y2 $2
     19 
     20 |0100 ( -> )
     21 
     22 	( theme )
     23 	#0fe3 .System/r DEO2
     24 	#0fc3 .System/g DEO2
     25 	#0f23 .System/b DEO2
     26 	( resize )
     27 	#0180 .Screen/width DEO2
     28 	#00e0 .Screen/height DEO2
     29 	( find center )
     30 	.Screen/width DEI2 #01 SFT2
     31 		DUP2 .center/x STZ2
     32 		#0080 SUB2
     33 		DUP2 .octave-view/x1 STZ2
     34 			#0050 ADD2 .octave-view/x2 STZ2
     35 	.Screen/height DEI2 #01 SFT2 #0010 ADD2
     36 		DUP2 .center/y STZ2
     37 		#0010 ADD2
     38 		DUP2 .octave-view/y1 STZ2
     39 			#0018 ADD2 .octave-view/y2 STZ2
     40 	( place adsr )
     41 	.center/x LDZ2 #0020 SUB2 .adsr-view/x1 STZ2
     42 	.center/y LDZ2 #0010 ADD2 .adsr-view/y1 STZ2
     43 	.adsr-view/x1 LDZ2 #00a0 ADD2 .adsr-view/x2 STZ2
     44 	.adsr-view/y1 LDZ2 #0018 ADD2 .adsr-view/y2 STZ2
     45 	( place waveform )
     46 	.center/x LDZ2 #0080 SUB2 .wave-view/x1 STZ2
     47 	.center/y LDZ2 #0040 SUB2 .wave-view/y1 STZ2
     48 	.wave-view/x1 LDZ2 #0100 ADD2 .wave-view/x2 STZ2
     49 	.wave-view/y1 LDZ2 #0040 ADD2 .wave-view/y2 STZ2
     50 	( setup synth )
     51 	#041c set-env
     52 	#dd set-vol
     53 	;sin-pcm .Audio0/addr DEO2
     54 	;sin-pcm .Audio1/addr DEO2
     55 	#0100
     56 		DUP2 .Audio0/length DEO2
     57 		.Audio1/length DEO2
     58 	( inital drawing )
     59 	draw-octave
     60 	draw-adsr
     61 	draw-wave
     62 	( unlock )
     63 	;on-frame .Screen/vector DEO2
     64 	;on-control .Controller/vector DEO2
     65 	;on-mouse .Mouse/vector DEO2
     66 	;on-message .Console/vector DEO2
     67 
     68 BRK
     69 
     70 (
     71 @|vectors )
     72 
     73 @on-frame ( -> )
     74 
     75 	.Mouse/state DEI ?&skip-sft
     76 	[ LIT2 00 &soft $1 ] EQUk ?&no-soft
     77 		soften
     78 		DUP #01 SUB ,&soft STR
     79 		&no-soft
     80 	POP2
     81 	&skip-sft
     82 
     83 	[ LIT &last $1 ] .Audio0/output DEI NEQk ?&changed
     84 		POP2 BRK
     85 		&changed
     86 	,&last STR POP
     87 
     88 	( redraw )
     89 	[ LIT2 00 -Screen/auto ] DEO
     90 	.adsr-view/y2 LDZ2 #0020 SUB2 .Screen/y DEO2
     91 	#1000
     92 	&loop
     93 		.adsr-view/x2 LDZ2 #003a SUB2 .Screen/x DEO2
     94 		( left )
     95 		#10 OVR SUB
     96 		#00 .Audio0/output DEI
     97 		#00 .Audio0/volume DEI #04 SFT 
     98 			MUL2 #08 SFT2 NIP LTH .Screen/pixel DEO
     99 		.Screen/x DEI2k INC2 INC2 ROT DEO2
    100 		( right )
    101 		#10 OVR SUB
    102 		#00 .Audio0/output DEI
    103 		#00 .Audio0/volume DEI #0f AND 
    104 			MUL2 #08 SFT2 NIP LTH .Screen/pixel DEO
    105 		.Screen/y DEI2k INC2 INC2 ROT DEO2
    106 		INC GTHk ?&loop
    107 	POP2
    108 
    109 BRK
    110 
    111 @on-control ( -> )
    112 
    113 	.Controller/key DEI
    114 	( octave )
    115 	[ LIT "a ] NEQk NIP ?&no-c #30 .octave LDZ #0c MUL ADD play &no-c
    116 	[ LIT "w ] NEQk NIP ?&no-c# #31 .octave LDZ #0c MUL ADD play &no-c#
    117 	[ LIT "s ] NEQk NIP ?&no-d #32 .octave LDZ #0c MUL ADD play &no-d
    118 	[ LIT "e ] NEQk NIP ?&no-d# #33 .octave LDZ #0c MUL ADD play &no-d#
    119 	[ LIT "d ] NEQk NIP ?&no-e #34 .octave LDZ #0c MUL ADD play &no-e
    120 	[ LIT "f ] NEQk NIP ?&no-f #35 .octave LDZ #0c MUL ADD play &no-f
    121 	[ LIT "t ] NEQk NIP ?&no-f# #36 .octave LDZ #0c MUL ADD play &no-f#
    122 	[ LIT "g ] NEQk NIP ?&no-g #37 .octave LDZ #0c MUL ADD play &no-g
    123 	[ LIT "y ] NEQk NIP ?&no-g# #38 .octave LDZ #0c MUL ADD play &no-g#
    124 	[ LIT "h ] NEQk NIP ?&no-a #39 .octave LDZ #0c MUL ADD play &no-a
    125 	[ LIT "u ] NEQk NIP ?&no-a# #3a .octave LDZ #0c MUL ADD play &no-a#
    126 	[ LIT "j ] NEQk NIP ?&no-b #3b .octave LDZ #0c MUL ADD play &no-b
    127 	[ LIT "k ] NEQk NIP ?&no-c2 #3c .octave LDZ #0c MUL ADD play &no-c2
    128 	( controls )
    129 	[ LIT "z ] NEQk NIP ?&no-dec .octave LDZk #01 SUB SWP STZ &no-dec
    130 	[ LIT "x ] NEQk NIP ?&no-inc .octave LDZk INC SWP STZ &no-inc
    131 	[ #1b ] NEQk NIP ?&no-esc #010f DEO &no-esc
    132 	POP
    133 
    134 	( release )
    135 	#00 .Controller/key DEO
    136 
    137 	.Controller/button DEI
    138 	[ #11 ] NEQk NIP ?&cu #3c play &cu
    139 	[ #21 ] NEQk NIP ?&cd #3d play &cd
    140 	[ #41 ] NEQk NIP ?&cl #3e play &cl
    141 	[ #81 ] NEQk NIP ?&cr #3f play &cr
    142 	[ #12 ] NEQk NIP ?&au #40 play &au
    143 	[ #22 ] NEQk NIP ?&ad #41 play &ad
    144 	[ #42 ] NEQk NIP ?&al #42 play &al
    145 	[ #82 ] NEQk NIP ?&ar #43 play &ar
    146 	[ #14 ] NEQk NIP ?&su #44 play &su
    147 	[ #24 ] NEQk NIP ?&sd #45 play &sd
    148 	[ #44 ] NEQk NIP ?&sl #46 play &sl
    149 	[ #84 ] NEQk NIP ?&sr #47 play &sr
    150 	POP
    151 
    152 	draw-octave
    153 
    154 BRK
    155 
    156 @on-message ( -> )
    157 
    158 	.Console/read DEI play
    159 	draw-octave
    160 
    161 BRK
    162 
    163 @on-mouse ( -> )
    164 
    165 	#00 .Mouse/state DEI NEQ #41 ADD ;cursor-icn update-cursor
    166 
    167 	.Mouse/state DEI ?on-mouse-touch
    168 
    169 BRK
    170 
    171 @on-mouse-touch ( -> )
    172 
    173 	.Mouse/x DEI2 .Mouse/y DEI2 .wave-view within-rect
    174 		?on-touch-wave-view
    175 	.Mouse/x DEI2 .Mouse/y DEI2 .adsr-view within-rect
    176 		?on-touch-knobs-view
    177 	.Mouse/x DEI2 .Mouse/y DEI2 .octave-view within-rect
    178 		?on-touch-octave-view
    179 
    180 BRK
    181 
    182 @on-touch-wave-view ( -> )
    183 
    184 	.Mouse/state DEI #01 GTH ?&paint
    185 	.Mouse/x DEI2 .wave-view/x1 LDZ2 SUB2
    186 		( min ) #0010 GTH2k [ JMP SWP2 POP2 ] set-length
    187 
    188 BRK
    189 
    190 &paint ( -> )
    191 
    192 	.Mouse/y DEI2 .wave-view/y1 LDZ2 SUB2 #20 SFT2 NIP
    193 	.Mouse/x DEI2 .wave-view/x1 LDZ2 SUB2 ;sin-pcm ADD2 STA
    194 	draw-wave
    195 	#10 ;on-frame/soft STA
    196 
    197 BRK
    198 
    199 @on-touch-octave-view ( -> )
    200 
    201 	.Mouse/x DEI2 .octave-view/x1 LDZ2 SUB2 #03 SFT2 NIP #09 NEQ ?&no-mod
    202 		.Mouse/y DEI2 .octave-view/y1 LDZ2 SUB2 #03 SFT2 NIP
    203 		[ #00 ] NEQk NIP ?&no-incr
    204 			.octave LDZ #03 EQU ?&no-incr
    205 			.octave LDZ INC .octave STZ &no-incr
    206 		[ #02 ] NEQk NIP ?&no-decr
    207 			.octave LDZ #ff EQU ?&no-decr
    208 			.octave LDZ #01 SUB .octave STZ &no-decr
    209 		POP
    210 		( release ) #00 .Mouse/state DEO
    211 		draw-octave
    212 		BRK
    213 	&no-mod
    214 
    215 	.Mouse/x DEI2 .octave-view/x1 LDZ2 SUB2 #03 SFT2 NIP #06 GTH ?&no-key
    216 		.Mouse/x DEI2 .octave-view/x1 LDZ2 SUB2 #03 SFT2 ;notes-lut ADD2 LDA .octave LDZ #0c MUL ADD play
    217 		( release ) #00 .Mouse/state DEO
    218 		draw-octave
    219 	&no-key
    220 
    221 BRK
    222 
    223 @on-touch-knobs-view ( -> )
    224 
    225 	.Mouse/x DEI2 .adsr-view/x1 LDZ2 SUB2 #03 SFT2 NIP #03 DIV
    226 	.Mouse/y DEI2 .adsr-view/y1 LDZ2 SUB2 NIP
    227 	OVR #04 LTH ?on-touch-adsr
    228 	OVR #04 GTH ?on-touch-vol
    229 	POP2
    230 
    231 BRK
    232 
    233 @on-touch-adsr ( knob value -> )
    234 
    235 	STH2
    236 	( mask ) #ffff #000f #03 OVRr STHr SUB #60 SFT SFT2 EOR2
    237 		.Audio0/adsr DEI2 AND2
    238 	( value ) #000f STHr OVR LTHk [ JMP SWP POP ] SUB
    239 	( shift ) #03 STHr SUB #60 SFT SFT2 ORA2
    240 	set-env
    241 
    242 BRK
    243 
    244 @on-touch-vol ( knob value -> )
    245 
    246 	SWP #03 SUB INC INC SWP STH2
    247 	( mask ) #0f OVRr STHr #60 SFT SFT
    248 		.Audio0/volume DEI AND
    249 	( value ) #0f STHr OVR LTHk [ JMP SWP POP ] SUB
    250 	( shift ) #01 STHr SUB #60 SFT SFT ORA
    251 	set-vol
    252 
    253 BRK
    254 
    255 (
    256 @|core )
    257 
    258 @play ( pitch -- )
    259 
    260 	DUP #0c DIVk MUL SUB ;draw-octave/last STA
    261 	DUP .Audio0/pitch DEO
    262 		#0c SUB .Audio1/pitch DEO
    263 
    264 JMP2r
    265 
    266 @set-length ( length* -- )
    267 
    268 	DUP2 .Audio0/length DEO2
    269 		.Audio1/length DEO2
    270 
    271 !draw-wave
    272 
    273 @set-vol ( vol -- )
    274 
    275 	DUP .Audio0/volume DEO
    276 		.Audio1/volume DEO
    277 
    278 !draw-adsr
    279 
    280 @set-env ( adsr* -- )
    281 
    282 	DUP2 .Audio0/adsr DEO2
    283 		.Audio1/adsr DEO2
    284 
    285 !draw-adsr
    286 
    287 @soften ( -- )
    288 
    289 	#0100 #0000
    290 	&l
    291 		DUP2 ;sin-pcm ADD2 get-average SWP2 STA POP
    292 		INC2 GTH2k ?&l
    293 	POP2 POP2
    294 	draw-wave
    295 
    296 JMP2r
    297 
    298 @get-average ( addr* -- addr* average* )
    299 
    300 	[ LIT2r 0000 ]
    301 	DUP2 #0001 SUB2 DUP2 #0002 ADD2 SWP2
    302 	&l
    303 		LDAk LITr 00 STH ADD2r
    304 		INC2 GTH2k ?&l
    305 	POP2 POP2
    306 	LDAk #00 SWP DUP2 DUP2 STH2r
    307 	#01 SFT2 ADD2 ADD2 ADD2 #02 SFT2
    308 
    309 JMP2r
    310 
    311 (
    312 @|drawing )
    313 
    314 @update-cursor ( color addr* -- )
    315 
    316 	[ LIT2 00 -Screen/auto ] DEO
    317 	.Screen/addr DEO2
    318 	#40 draw-cursor
    319 	.Mouse/x DEI2 ,draw-cursor/x STR2
    320 	.Mouse/y DEI2 ,draw-cursor/y STR2
    321 
    322 @draw-cursor ( color -- )
    323 
    324 	[ LIT2 &x $2 ] .Screen/x DEO2
    325 	[ LIT2 &y $2 ] .Screen/y DEO2
    326 	.Screen/sprite DEO
    327 
    328 JMP2r
    329 
    330 @draw-octave ( -- )
    331 
    332 	( arrows )
    333 	[ LIT2 02 -Screen/auto ] DEO
    334 	.octave-view/x1 LDZ2 #0048 ADD2 .Screen/x DEO2
    335 	.octave-view/y1 LDZ2 .Screen/y DEO2
    336 	;arrow-icns .Screen/addr DEO2
    337 	[ LIT2 01 -Screen/sprite ] DEO
    338 	;font-hex .octave LDZ #03 ADD #00 SWP #30 SFT2 ADD2 .Screen/addr DEO2
    339 	[ LIT2 02 -Screen/sprite ] DEO
    340 	;arrow-icns/down .Screen/addr DEO2
    341 	[ LIT2 01 -Screen/sprite ] DEO
    342 	( octave )
    343 	.octave-view/x1 LDZ2 .Screen/x DEO2
    344 	.octave-view/y1 LDZ2 .Screen/y DEO2
    345 	[ LIT2 06 -Screen/auto ] DEO
    346 	[ LITr &last ff ]
    347 	;keys-left-icns STHkr #00 EQU INC draw-key
    348 	;keys-middle-icns STHkr #02 EQU INC draw-key
    349 	;keys-right-icns STHkr #04 EQU INC draw-key
    350 	;keys-left-icns STHkr #05 EQU INC draw-key
    351 	;keys-middle-icns STHkr #07 EQU INC draw-key
    352 	;keys-middle-icns STHkr #09 EQU INC draw-key
    353 	;keys-right-icns STHr #0b EQU INC
    354 
    355 ( >> )
    356 
    357 @draw-key ( addr* color -- )
    358 
    359 	STH
    360 	.Screen/addr DEO2
    361 	.Screen/y DEI2
    362 	STHr .Screen/sprite DEOk DEOk DEO
    363 	.Screen/x DEI2k #0008 ADD2 ROT DEO2
    364 	.Screen/y DEO2
    365 
    366 JMP2r
    367 
    368 @draw-adsr ( -- )
    369 
    370 	( adsr )
    371 	.adsr-view/x1 LDZ2 .adsr-view/y1 LDZ2
    372 		.Audio0/adsr DEI #04 SFT draw-knob
    373 	.adsr-view/x1 LDZ2 #0018 ADD2 .adsr-view/y1 LDZ2
    374 		.Audio0/adsr DEI #0f AND draw-knob
    375 	.adsr-view/x1 LDZ2 #0030 ADD2 .adsr-view/y1 LDZ2
    376 		.Audio0/adsr INC DEI #04 SFT draw-knob
    377 	.adsr-view/x1 LDZ2 #0048 ADD2 .adsr-view/y1 LDZ2
    378 		.Audio0/adsr INC DEI #0f AND draw-knob
    379 	( volume )
    380 	.adsr-view/x2 LDZ2 #0028 SUB2 .adsr-view/y1 LDZ2
    381 		.Audio0/volume DEI #04 SFT draw-knob
    382 	.adsr-view/x2 LDZ2 #0010 SUB2 .adsr-view/y1 LDZ2
    383 		.Audio0/volume DEI #0f AND
    384 
    385 !draw-knob
    386 
    387 @draw-wave ( -- )
    388 
    389 	( background )
    390 	.wave-view/x1 LDZ2 .Screen/x DEO2
    391 	.wave-view/y1 LDZ2 .Screen/y DEO2
    392 	;fill-icn .Screen/addr DEO2
    393 	[ LIT2 75 -Screen/auto ] DEO
    394 	#e0 &lbg
    395 		;dotted-icn .Screen/addr DEO2
    396 		[ LIT2 0c -Screen/sprite ] DEO
    397 		INC DUP ?&lbg
    398 	POP
    399 	.wave-view/x1 LDZ2 .Screen/x DEO2
    400 	( waveform )
    401 	[ LIT2 01 -Screen/auto ] DEO
    402 	;sin-pcm/end ;sin-pcm
    403 	&loop
    404 		DUP2 ;sin-pcm SUB2 .Audio0/length DEI2 DIV2k MUL2 SUB2 ;sin-pcm ADD2 LDA
    405 		#00 SWP #02 SFT2 .wave-view/y1 LDZ2 ADD2 .Screen/y DEO2
    406 		( draw ) DUP2 ;sin-pcm SUB2 NIP .Audio0/length DEI2 NIP #01 SUB GTH INC .Screen/pixel DEO
    407 		INC2 GTH2k ?&loop
    408 	POP2 POP2
    409 	( length line )
    410 	.wave-view/x1 LDZ2 .Audio0/length DEI2 #0001 SUB2 ADD2 .Screen/x DEO2
    411 	.wave-view/y1 LDZ2 .Screen/y DEO2
    412 	;line-icn .Screen/addr DEO2
    413 	[ LIT2 71 -Screen/auto ] DEO
    414 	[ LIT2 05 -Screen/sprite ] DEO
    415 	( range )
    416 	[ LIT2 01 -Screen/auto ] DEO
    417 	.wave-view/x1 LDZ2 .Screen/x DEO2
    418 	.wave-view/y1 LDZ2 #0018 SUB2 .Screen/y DEO2
    419 	.Audio0/length DEI2
    420 
    421 !draw-short
    422 
    423 @draw-knob ( x* y* value -- )
    424 
    425 	STH
    426 	OVR2 OVR2 .Screen/y DEO2 .Screen/x DEO2
    427 	( circle )
    428 	;knob-icns .Screen/addr DEO2
    429 	[ LIT2 16 -Screen/auto ] DEO
    430 	[ LIT2 01 -Screen/sprite ] DEOk DEO
    431 	( value )
    432 	#0010 ADD2 .Screen/y DEO2
    433 	#0004 ADD2 .Screen/x DEO2
    434 	;font-hex #00 STHkr #30 SFT ADD2 .Screen/addr DEO2
    435 	[ LIT2 00 -Screen/auto ] DEO
    436 	[ LIT2 01 -Screen/sprite ] DEO
    437 	( marker )
    438 	.Screen/x DEI2 #0004 SUB2 #0000 STHkr ;knob-offsetx ADD2 LDA ADD2 .Screen/x DEO2
    439 	.Screen/y DEI2 #0010 SUB2 #0000 STHr ;knob-offsety ADD2 LDA ADD2 .Screen/y DEO2
    440 	;knob-icns/index .Screen/addr DEO2
    441 	[ LIT2 05 -Screen/sprite ] DEO
    442 
    443 JMP2r
    444 
    445 @draw-short ( short* -- )
    446 
    447 	SWP draw-byte
    448 
    449 @draw-byte ( byte -- )
    450 
    451 	DUP #04 SFT draw-hex #0f AND
    452 
    453 @draw-hex ( char -- )
    454 
    455 	#00 SWP #30 SFT2 ;font-hex ADD2 .Screen/addr DEO2
    456 	[ LIT2 02 -Screen/sprite ] DEO
    457 
    458 JMP2r
    459 
    460 @within-rect ( x* y* rect -- flag )
    461 
    462 	STH
    463 	( y < rect.y1 ) DUP2 STHkr INC INC LDZ2 LTH2 ?&skip
    464 	( y > rect.y2 ) DUP2 STHkr #06 ADD LDZ2 GTH2 ?&skip
    465 	SWP2
    466 	( x < rect.x1 ) DUP2 STHkr LDZ2 LTH2 ?&skip
    467 	( x > rect.x2 ) DUP2 STHkr #04 ADD LDZ2 GTH2 ?&skip
    468 	POP2 POP2 POPr
    469 	#01
    470 JMP2r
    471 	&skip
    472 	POP2 POP2 POPr
    473 	#00
    474 
    475 JMP2r
    476 
    477 @phex ( short* -- ) SWP phex/b &b DUP #04 SFT phex/c &c #0f AND DUP #09 GTH #27 MUL ADD #30 ADD #18 DEO JMP2r
    478 
    479 (
    480 @|assets )
    481 
    482 @notes-lut [
    483 	30 32 34 35 37 39 3b 3c ]
    484 
    485 @dotted-icn [
    486 	0000 0000 0000 0000
    487 	0000 0000 0000 0000
    488 	0000 0000 0000 0000
    489 	0000 0000 0000 0000
    490 	aa00 0000 0000 0000
    491 	0000 0000 0000 0000
    492 	0000 0000 0000 0000
    493 	0000 0000 0000 0000 ]
    494 @line-icn [
    495 	8080 8080 8080 8080
    496 	]
    497 @fill-icn [
    498 	ffff ffff ffff ffff ]
    499 @cursor-icn [
    500 	80c0 e0f0 f8e0 1000 ]
    501 @arrow-icns [
    502 	0010 387c fe10 1000
    503 &down
    504 	0010 1010 fe7c 3810 ]
    505 @keys-left-icns [
    506 	7c7c 7c7c 7c7c 7c7c
    507 	7c7c 7c7c 7c7c 7e7f
    508 	7f7f 7f7f 7f7f 3e00 ]
    509 @keys-middle-icns [
    510 	1c1c 1c1c 1c1c 1c1c
    511 	1c1c 1c1c 1c1c 3e7f
    512 	7f7f 7f7f 7f7f 3e00 ]
    513 @keys-right-icns [
    514 	1f1f 1f1f 1f1f 1f1f
    515 	1f1f 1f1f 1f1f 3f7f
    516 	7f7f 7f7f 7f7f 3e00 ]
    517 @knob-icns [
    518 	0003 0c10 2020 4040
    519 	00c0 3008 0404 0202
    520 	4040 2020 100c 0300
    521 	0202 0404 0830 c000
    522 	&index
    523 	0000 183c 3c18 0000 ]
    524 @knob-offsetx [
    525 	01 00 00 00 00 01 02 03
    526 	05 06 07 08 08 08 08 07 ]
    527 @knob-offsety [
    528 	07 06 05 03 02 01 00 00
    529 	00 00 01 02 03 05 06 07 ]
    530 @font-hex [
    531 	007c 8282 8282 827c 0030 1010 1010 1010
    532 	007c 8202 7c80 80fe 007c 8202 1c02 827c
    533 	000c 1424 4484 fe04 00fe 8080 7c02 827c
    534 	007c 8280 fc82 827c 007c 8202 1e02 0202
    535 	007c 8282 7c82 827c 007c 8282 7e02 827c
    536 	007c 8202 7e82 827e 00fc 8282 fc82 82fc
    537 	007c 8280 8080 827c 00fc 8282 8282 82fc
    538 	007c 8280 f080 827c 007c 8280 f080 8080 ]
    539 
    540 ( pad ) [ 8080 8080 ]
    541 @sin-pcm [
    542 	8083 8689 8c8f 9295 989b 9ea1 a4a7 aaad
    543 	b0b3 b6b9 bbbe c1c3 c6c9 cbce d0d2 d5d7
    544 	d9db dee0 e2e4 e6e7 e9eb ecee f0f1 f2f4
    545 	f5f6 f7f8 f9fa fbfb fcfd fdfe fefe fefe
    546 	fffe fefe fefe fdfd fcfb fbfa f9f8 f7f6
    547 	f5f4 f2f1 f0ee eceb e9e7 e6e4 e2e0 dedb
    548 	d9d7 d5d2 d0ce cbc9 c6c3 c1be bbb9 b6b3
    549 	b0ad aaa7 a4a1 9e9b 9895 928f 8c89 8683
    550 	807d 7a77 7471 6e6b 6865 625f 5c59 5653
    551 	504d 4a47 4542 3f3d 3a37 3532 302e 2b29
    552 	2725 2220 1e1c 1a19 1715 1412 100f 0e0c
    553 	0b0a 0908 0706 0505 0403 0302 0202 0202
    554 	0102 0202 0202 0303 0405 0506 0708 090a
    555 	0b0c 0e0f 1012 1415 1719 1a1c 1e20 2225
    556 	2729 2b2e 3032 3537 3a3d 3f42 4547 4a4d
    557 	5053 5659 5c5f 6265 686b 6e71 7477 7a7d ]
    558 	&end
    559 ( pad ) [ 8080 8080 ]
    560