Browse code

(piano.tal) Add softening

Devine Lu Linvega authored on 28/02/2023 04:11:15
Showing 1 changed files
... ...
@@ -5,12 +5,12 @@
5 5
 |10 @Console &vector $2 &read $1 &pad $5 &write $1 &error $1
6 6
 |20 @Screen &vector $2 &width $2 &height $2 &auto $1 &pad $1 &x $2 &y $2 &addr $2 &pixel $1 &sprite $1
7 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
8 9
 |80 @Controller &vector $2 &button $1 &key $1
9 10
 |90 @Mouse &vector $2 &x $2 &y $2 &state $1 &pad $3 &modx $2 &mody $2
10 11
 
11 12
 |0000
12 13
 
13
-	@last-note $1
14 14
 	@octave $1
15 15
 	@center &x $2 &y $2
16 16
 	@adsr-view &x1 $2 &y1 $2 &x2 $2 &y2 $2
... ...
@@ -48,10 +48,13 @@
48 48
 	.wave-view/x1 LDZ2 #0100 ADD2 .wave-view/x2 STZ2
49 49
 	.wave-view/y1 LDZ2 #0040 ADD2 .wave-view/y2 STZ2
50 50
 	( setup synth )
51
-	#041c .Audio0/adsr DEO2
52
-	#dd .Audio0/volume DEO
51
+	#041c set-env
52
+	#dd set-vol
53 53
 	;sin-pcm .Audio0/addr DEO2
54
-	#0100 .Audio0/length DEO2
54
+	;sin-pcm .Audio1/addr DEO2
55
+	#0100
56
+		DUP2 .Audio0/length DEO2
57
+		.Audio1/length DEO2
55 58
 	( inital drawing )
56 59
 	draw-octave
57 60
 	draw-adsr
... ...
@@ -69,6 +72,14 @@ BRK
69 72
 
70 73
 @on-frame ( -> )
71 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
+
72 83
 	[ LIT &last $1 ] .Audio0/output DEI NEQk ?&changed
73 84
 		POP2 BRK
74 85
 		&changed
... ...
@@ -129,8 +140,6 @@ BRK
129 140
 	[ #24 ] NEQk NIP ?&sd #45 play &sd
130 141
 	[ #44 ] NEQk NIP ?&sl #46 play &sl
131 142
 	[ #84 ] NEQk NIP ?&sr #47 play &sr
132
-	[ #40 ] NEQk NIP ?&l .Audio0/addr DEI2 #0010 SUB2 .Audio0/addr DEO2 &l
133
-	[ #80 ] NEQk NIP ?&r .Audio0/addr DEI2 #0010 ADD2 .Audio0/addr DEO2 &r
134 143
 	POP
135 144
 
136 145
 	draw-octave
... ...
@@ -176,6 +185,7 @@ BRK
176 185
 	.Mouse/y DEI2 .wave-view/y1 LDZ2 SUB2 #20 SFT2 NIP
177 186
 	.Mouse/x DEI2 .wave-view/x1 LDZ2 SUB2 ;sin-pcm ADD2 STA
178 187
 	draw-wave
188
+	#10 ;on-frame/soft STA
179 189
 
180 190
 BRK
181 191
 
... ...
@@ -220,8 +230,7 @@ BRK
220 230
 		.Audio0/adsr DEI2 AND2
221 231
 	( value ) #000f STHr OVR LTHk [ JMP SWP POP ] SUB
222 232
 	( shift ) #03 STHr SUB #60 SFT SFT2 ORA2
223
-	.Audio0/adsr DEO2
224
-	draw-adsr
233
+	set-env
225 234
 
226 235
 BRK
227 236
 
... ...
@@ -232,8 +241,7 @@ BRK
232 241
 		.Audio0/volume DEI AND
233 242
 	( value ) #0f STHr OVR LTHk [ JMP SWP POP ] SUB
234 243
 	( shift ) #01 STHr SUB #60 SFT SFT ORA
235
-	.Audio0/volume DEO
236
-	draw-adsr
244
+	set-vol
237 245
 
238 246
 BRK
239 247
 
... ...
@@ -243,16 +251,56 @@ BRK
243 251
 @play ( pitch -- )
244 252
 
245 253
 	DUP #0c DIVk MUL SUB ;draw-octave/last STA
246
-	.Audio0/pitch DEO
254
+	DUP .Audio0/pitch DEO
255
+		#0c SUB .Audio1/pitch DEO
247 256
 
248 257
 JMP2r
249 258
 
250 259
 @set-length ( length* -- )
251 260
 
252
-	.Audio0/length DEO2
261
+	DUP2 .Audio0/length DEO2
262
+		.Audio1/length DEO2
253 263
 
254 264
 !draw-wave
255 265
 
266
+@set-vol ( vol -- )
267
+
268
+	DUP .Audio0/volume DEO
269
+		.Audio1/volume DEO
270
+
271
+!draw-adsr
272
+
273
+@set-env ( adsr* -- )
274
+
275
+	DUP2 .Audio0/adsr DEO2
276
+		.Audio1/adsr DEO2
277
+
278
+!draw-adsr
279
+
280
+@soften ( -- )
281
+
282
+	#0100 #0000
283
+	&l
284
+		DUP2 ;sin-pcm ADD2 get-average SWP2 STA POP
285
+		INC2 GTH2k ?&l
286
+	POP2 POP2
287
+	draw-wave
288
+
289
+JMP2r
290
+
291
+@get-average ( addr* -- addr* average* )
292
+
293
+	[ LIT2r 0000 ]
294
+	DUP2 #0001 SUB2 DUP2 #0002 ADD2 SWP2
295
+	&l
296
+		LDAk LITr 00 STH ADD2r
297
+		INC2 GTH2k ?&l
298
+	POP2 POP2
299
+	LDAk #00 SWP DUP2 DUP2 STH2r
300
+	#01 SFT2 ADD2 ADD2 ADD2 #02 SFT2
301
+
302
+JMP2r
303
+
256 304
 (
257 305
 @|drawing )
258 306
 
... ...
@@ -481,6 +529,8 @@ JMP2r
481 529
 	007c 8202 7e82 827e 00fc 8282 fc82 82fc
482 530
 	007c 8280 8080 827c 00fc 8282 8282 82fc
483 531
 	007c 8280 f080 827c 007c 8280 f080 8080 ]
532
+
533
+( pad ) [ 8080 8080 ]
484 534
 @sin-pcm [
485 535
 	8083 8689 8c8f 9295 989b 9ea1 a4a7 aaad
486 536
 	b0b3 b6b9 bbbe c1c3 c6c9 cbce d0d2 d5d7
... ...
@@ -499,3 +549,5 @@ JMP2r
499 549
 	2729 2b2e 3032 3537 3a3d 3f42 4547 4a4d
500 550
 	5053 5659 5c5f 6265 686b 6e71 7477 7a7d ]
501 551
 	&end
552
+( pad ) [ 8080 8080 ]
553
+