diff --git a/examples/curlywas/tim_ges.cwa b/examples/curlywas/tim_ges.cwa index 4d74c2e..db2d325 100644 --- a/examples/curlywas/tim_ges.cwa +++ b/examples/curlywas/tim_ges.cwa @@ -36,17 +36,16 @@ export fn upd() { data 80 { i8( - 0, 64, 0, 128, 0, 0xe, - 0, 128, 0, 128, 0, 0xc8, - 5, 128, 0, 128, 0, 0xc8, - 5, 128, 0, 128, 0, 0xc8, + 0, 64, 0, 128, 0, 0x90, + 0, 128, 0, 128, 0, 0x4c, + 5, 128, 0, 128, 0, 0x4c, + 5, 128, 0, 128, 0, 0x4c, 0xf8, 0x85, - 0xc1, 0xf1, 0, 110, 0, 80 + 0x81, 0x81, 0, 105, 0, 80 ) } /* - include "../../platform/src/ges.cwa" import "env.pow" fn pow(f32, f32) -> f32; @@ -55,5 +54,4 @@ import "env.sin" fn sin(f32) -> f32; export fn snd(t: i32) -> f32 { gesSnd(t) } - */ \ No newline at end of file diff --git a/platform/bin/platform.uw8 b/platform/bin/platform.uw8 index 9276f19..92c9afd 100644 Binary files a/platform/bin/platform.uw8 and b/platform/bin/platform.uw8 differ diff --git a/platform/src/ges.cwa b/platform/src/ges.cwa index 99ade94..a99d1ce 100644 --- a/platform/src/ges.cwa +++ b/platform/src/ges.cwa @@ -34,23 +34,19 @@ export fn gesSnd(t: i32) -> f32 { channelState?GesChannelState.Trigger = ctrl; if envState { - envVol = envVol + (16384 / ((channelReg?4 >> 4) + 1)); + envVol = envVol + 8 * pow(1.5625, (15 - channelReg?4 & 15) as f32) as i32; if envVol >= 65535 { envVol = 65535; envState = 0; } } else { - if !envState & ctrl { - envVol = envVol - (16 - (channelReg?4 & 15)) * 48; - let sustain = (channelReg?5 >> 4) * 4096; - if envVol < sustain { - envVol = sustain; - } - } else { - envVol = envVol - (16 - (channelReg?5 & 15)) * 48; - if envVol < 0 { - envVol = 0; - } + let inline decay = (channelReg - (ctrl & 1))?5 >> 4; + let inline dec = 8 * pow(1.5625, (15 - decay) as f32) as i32; + envVol = envVol - ((dec * (envVol + 8192)) >> 16); + let inline sustain = (channelReg?5 & 15) << 12; + let lazy targetVol = (ctrl & 1) * sustain; + if envVol < targetVol { + envVol = targetVol; } } channelState?GesChannelState.EnvState = envState; @@ -129,7 +125,7 @@ export fn gesSnd(t: i32) -> f32 { let note = i32.load16_u(filter * 2, 0x6c); let inline freq = 440 as f32 * pow(2.0, (note - 69*256) as f32 / (12*256) as f32); let F = min(4096 as f32, 8192 as f32 * sin(freq * (3.1415 / 44100.0))) as i32; - let Q = 7000 - ctrl * (6000/255); + let Q = 7350 - ctrl * (6530/255); let low_out = ctrl & 1; let high_out = (ctrl >> 1) & 1; let band_out = (ctrl >> 2) & 1; diff --git a/src/run-web.html b/src/run-web.html index 7631b88..9f127c7 100644 --- a/src/run-web.html +++ b/src/run-web.html @@ -1 +1 @@ -uw8-run
\ No newline at end of file +uw8-run
\ No newline at end of file