... | ... |
@@ -470,24 +470,24 @@ RTN |
470 | 470 |
RTN |
471 | 471 |
|
472 | 472 |
@adsr-envelope ( -- ) |
473 |
- #7f ,adsr #00 ~Audio.play #04 MUL ADD2 PEK2 SOUND |
|
474 |
- #40 ,adsr #00 ~Audio.play #04 MUL ADD2 #0001 ADD2 PEK2 SOUND |
|
475 |
- #40 ,adsr #00 ~Audio.play #04 MUL ADD2 #0002 ADD2 PEK2 SOUND |
|
473 |
+ #ff ,adsr #00 ~Audio.play #04 MUL ADD2 PEK2 SOUND |
|
474 |
+ #80 ,adsr #00 ~Audio.play #04 MUL ADD2 #0001 ADD2 PEK2 SOUND |
|
475 |
+ #80 ,adsr #00 ~Audio.play #04 MUL ADD2 #0002 ADD2 PEK2 SOUND |
|
476 | 476 |
#00 ,adsr #00 ~Audio.play #04 MUL ADD2 #0003 ADD2 PEK2 SOUND |
477 | 477 |
SOUND_FINISH |
478 | 478 |
BRK |
479 | 479 |
|
480 | 480 |
@square-wave ( -- ) |
481 |
- #5800 SOUND |
|
482 |
- #5880 SOUND |
|
483 | 481 |
#a800 SOUND |
484 | 482 |
#a880 SOUND |
483 |
+ #5800 SOUND |
|
484 |
+ #5880 SOUND |
|
485 | 485 |
BRK |
486 | 486 |
|
487 | 487 |
@triangle-wave ( -- ) |
488 |
- #7f40 SOUND |
|
489 |
- #8180 SOUND |
|
490 |
- #0040 SOUND |
|
488 |
+ #ff40 SOUND |
|
489 |
+ #0080 SOUND |
|
490 |
+ #8040 SOUND |
|
491 | 491 |
BRK |
492 | 492 |
|
493 | 493 |
@ch1_txt [ CHN0 00 ] |
... | ... |
@@ -87,9 +87,10 @@ apu_play_note(Note *note, Uint16 wave_vector, Uint16 envelope_vector, Uint8 volu |
87 | 87 |
for(i = 0; i < 2; ++i) { |
88 | 88 |
note->volume[i] = 0xf & (volume >> 4 * (1 - i)); |
89 | 89 |
note->wv[i].count = note->wv[i].period = 0; |
90 |
- note->wv[i].end_value = 0; |
|
90 |
+ note->wv[i].end_value = 0x8000 * (1 - i); |
|
91 | 91 |
note->wv[i].queue.n = note->wv[i].queue.i = 0; |
92 | 92 |
note->wv[i].queue.finishes = 0; |
93 |
+ note->wv[i].queue.is_envelope = i; |
|
93 | 94 |
} |
94 | 95 |
note->wv[0].vector = wave_vector; |
95 | 96 |
note->wv[0].advance = note_advances[pitch % 12] >> (8 - pitch / 12); |
... | ... |
@@ -253,7 +253,10 @@ audio_poke(Uxn *u, Uint16 ptr, Uint8 b0, Uint8 b1) |
253 | 253 |
apu.queue->sz = apu.queue->sz < 4 ? 4 : apu.queue->sz * 2; |
254 | 254 |
apu.queue->dat = SDL_realloc(apu.queue->dat, apu.queue->sz * sizeof(*apu.queue->dat)); |
255 | 255 |
} |
256 |
- apu.queue->dat[apu.queue->n++] = (m[0xb] << 8) + m[0xc]; |
|
256 |
+ if(apu.queue->is_envelope) |
|
257 |
+ apu.queue->dat[apu.queue->n++] = (m[0xb] << 7) + (m[0xc] >> 1); |
|
258 |
+ else |
|
259 |
+ apu.queue->dat[apu.queue->n++] = (m[0xb] << 8) + m[0xc] + 0x8000; |
|
257 | 260 |
apu.queue->dat[apu.queue->n++] = (m[0xd] << 8) + b1; |
258 | 261 |
} else if(b0 == 0xf && apu.queue != NULL) |
259 | 262 |
apu.queue->finishes = 1; |