From 3504f5d8268e5e2ac9596a9468e6699a350e8fc2 Mon Sep 17 00:00:00 2001 From: Joachim Fenkes Date: Sat, 11 Aug 2012 15:03:40 +0200 Subject: [PATCH] break up lead update so lead data is only fetched once --- win/main.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/win/main.cpp b/win/main.cpp index 528d5e4..29eec65 100644 --- a/win/main.cpp +++ b/win/main.cpp @@ -102,15 +102,19 @@ static unsigned char voice_lead(unsigned long i, int voice_nr) boosts &= ~(1 << voice_nr); if (0 == (i & 0x1FF)) leadtimer--; + + if (0 == leadtimer) + leadptr++; + + uint8_t data = leaddata[(leadseq[leadptr >> 4] << 4) | (leadptr & 0xF)]; + if (0 == leadtimer) { - leadptr++; - leadtimer = leadtimes[leaddata[(leadseq[leadptr >> 4] << 4) | (leadptr & 0xF)] >> 5]; + leadtimer = leadtimes[data >> 5]; boosts |= 1 << voice_nr; } - - uint8_t melody = leaddata[(leadseq[leadptr >> 4] << 4) | (leadptr & 0xF)] & 0x1F; + uint8_t melody = data & 0x1F; lead_osc += notes[melody]; uint8_t sample = ((lead_osc >> 6) & 0x7F) + ((lead_osc >> 6) & 0x3F); return (0 == melody) ? 0 : ((boosts & (1 << voice_nr)) ? sample : THREEQUARTERS(sample));