Restore audio port layout and use 0x5 for duration
This commit is contained in:
parent
9d1013d3bf
commit
4b64ced669
|
@ -6,10 +6,10 @@
|
|||
|
||||
|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 &pixel $1 &sprite $1 ]
|
||||
|30 @Audio0 [ &vector $2 &duration $2 &attack $1 &decay $1 &sustain $1 &release $1 &length $2 &addr $2 &expansion $1 &volume $1 &detune $1 &pitch $1 ]
|
||||
|40 @Audio1 [ &vector $2 &duration $2 &attack $1 &decay $1 &sustain $1 &release $1 &length $2 &addr $2 &expansion $1 &volume $1 &detune $1 &pitch $1 ]
|
||||
|50 @Audio2 [ &vector $2 &duration $2 &attack $1 &decay $1 &sustain $1 &release $1 &length $2 &addr $2 &expansion $1 &volume $1 &detune $1 &pitch $1 ]
|
||||
|60 @Audio3 [ &vector $2 &duration $2 &attack $1 &decay $1 &sustain $1 &release $1 &length $2 &addr $2 &expansion $1 &volume $1 &detune $1 &pitch $1 ]
|
||||
|30 @Audio0 [ &vector $2 &position $2 &output $1 &duration $2 &pad $1 &adsr $2 &length $2 &addr $2 &volume $1 &pitch $1 ]
|
||||
|40 @Audio1 [ &vector $2 &position $2 &output $1 &duration $2 &pad $1 &adsr $2 &length $2 &addr $2 &volume $1 &pitch $1 ]
|
||||
|50 @Audio2 [ &vector $2 &position $2 &output $1 &duration $2 &pad $1 &adsr $2 &length $2 &addr $2 &volume $1 &pitch $1 ]
|
||||
|60 @Audio3 [ &vector $2 &position $2 &output $1 &duration $2 &pad $1 &adsr $2 &length $2 &addr $2 &volume $1 &pitch $1 ]
|
||||
|80 @Controller &vector $2 &button $1 &key $1
|
||||
|
||||
( variables )
|
||||
|
@ -40,36 +40,24 @@
|
|||
;kick/end ;kick SUB2
|
||||
.Audio0/length DEO2
|
||||
#ff .Audio0/volume DEO
|
||||
#00 .Audio0/attack DEO
|
||||
#f0 .Audio0/decay DEO
|
||||
#ff .Audio0/sustain DEO
|
||||
#1e .Audio0/release DEO
|
||||
#00ff .Audio0/adsr DEO2
|
||||
|
||||
;sine .Audio1/addr DEO2
|
||||
#0054 .Audio1/length DEO2
|
||||
#ff .Audio1/volume DEO
|
||||
#00 .Audio1/attack DEO
|
||||
#11 .Audio1/decay DEO
|
||||
#00 .Audio1/sustain DEO
|
||||
#1e .Audio1/release DEO
|
||||
#01ff .Audio1/adsr DEO2
|
||||
#0074 .Audio1/duration DEO2
|
||||
|
||||
;sine .Audio2/addr DEO2
|
||||
#00a8 .Audio2/length DEO2
|
||||
#ff .Audio2/volume DEO
|
||||
#00 .Audio2/attack DEO
|
||||
#f0 .Audio2/decay DEO
|
||||
#00 .Audio2/sustain DEO
|
||||
#1e .Audio2/release DEO
|
||||
#2200 .Audio2/adsr DEO2
|
||||
#01d0 .Audio2/duration DEO2
|
||||
|
||||
;sine .Audio3/addr DEO2
|
||||
#00a8 .Audio3/length DEO2
|
||||
#ff .Audio3/volume DEO
|
||||
#00 .Audio3/attack DEO
|
||||
#f0 .Audio3/decay DEO
|
||||
#00 .Audio3/sustain DEO
|
||||
#1e .Audio3/release DEO
|
||||
#38ff .Audio3/adsr DEO2
|
||||
#00e8 .Audio3/duration DEO2
|
||||
BRK
|
||||
|
||||
|
|
|
@ -117,17 +117,17 @@ void
|
|||
note_on(AudioChannel *channel, Uint16 duration, Uint8 *data, Uint16 len, Uint8 vol,
|
||||
Uint8 attack, Uint8 decay, Uint8 sustain, Uint8 release, Uint8 pitch, bool loop) {
|
||||
channel->duration = duration;
|
||||
channel->vol_l = (vol >> 4) / 16.0f;
|
||||
channel->vol_r = (vol & 0xf) / 16.0f;
|
||||
channel->vol_l = (vol >> 4) / 16.0f * 0.9;
|
||||
channel->vol_r = (vol & 0xf) / 16.0f * 0.9;
|
||||
|
||||
Sample sample = {0};
|
||||
sample.data = data;
|
||||
sample.len = len;
|
||||
sample.pos = 0;
|
||||
sample.env.a = attack * 10.0f;
|
||||
sample.env.d = decay * 10.0f;
|
||||
sample.env.s = sustain / 256.0f;
|
||||
sample.env.r = release * 10.0f;
|
||||
sample.env.a = attack * 62.0f;
|
||||
sample.env.d = decay * 62.0f;
|
||||
sample.env.s = sustain / 16.0f;
|
||||
sample.env.r = release * 62.0f;
|
||||
if (loop) {
|
||||
sample.loop = len;
|
||||
} else {
|
||||
|
@ -284,20 +284,21 @@ audio_handler(void *ctx, Uint8 *out_stream, int len) {
|
|||
void
|
||||
audio_start(int idx, Uint8 *d, Uxn *u)
|
||||
{
|
||||
Uint16 duration = PEEK2(d + 0x2);
|
||||
Uint16 duration = PEEK2(d + 0x5);
|
||||
Uint8 off = d[0xf] == 0xff;
|
||||
|
||||
if (!off) {
|
||||
Uint16 addr = PEEK2(d + 0xa);
|
||||
Uint16 addr = PEEK2(d + 0xc);
|
||||
Uint8 *data = &u->ram[addr];
|
||||
Uint16 len = PEEK2(d + 0x8);
|
||||
Uint8 volume = d[0xd];
|
||||
Uint16 len = PEEK2(d + 0xa);
|
||||
Uint8 volume = d[0xe];
|
||||
bool loop = !!(d[0xf] & 0x80);
|
||||
Uint8 pitch = d[0xf] & 0x7f;
|
||||
Uint8 attack = d[0x4];
|
||||
Uint8 decay = d[0x5];
|
||||
Uint8 sustain = d[0x6];
|
||||
Uint8 release = d[0x7];
|
||||
Uint16 adsr = PEEK2(d + 0x8);
|
||||
Uint8 attack = (adsr >> 12) & 0xF;
|
||||
Uint8 decay = (adsr >> 8) & 0xF;
|
||||
Uint8 sustain = (adsr >> 4) & 0xF;
|
||||
Uint8 release = (adsr >> 0) & 0xF;
|
||||
note_on(&channel[idx], duration, data, len, volume, attack, decay, sustain, release, pitch, loop);
|
||||
} else {
|
||||
note_off(&channel[idx], duration);
|
||||
|
|
Loading…
Reference in New Issue