forked from len0rd/rockbox
Optimize synth code by pre-computing the volume scaling for each note.
Scaling is now calculated once per MIDI event at the most, instead of once per sample. Increase voice ramping speed, increase number of active voices a little. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@9870 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
7f1d214801
commit
28b5afd05a
4 changed files with 35 additions and 27 deletions
|
@ -255,7 +255,6 @@ inline void stopVoice(struct SynthObject * so)
|
|||
|
||||
}
|
||||
|
||||
|
||||
signed short int synthVoice(struct SynthObject * so)
|
||||
{
|
||||
struct GWaveform * wf;
|
||||
|
@ -362,16 +361,21 @@ signed short int synthVoice(struct SynthObject * so)
|
|||
|
||||
if(so->state == STATE_RAMPDOWN)
|
||||
{
|
||||
so->decay--;
|
||||
if(so->decay == 0)
|
||||
so->decay-=5;
|
||||
if(so->decay < 5)
|
||||
so->isUsed=0;
|
||||
s = (s * so->decay) >> 8;
|
||||
}
|
||||
|
||||
return s*((signed short int)so->vol*(signed short int)chVol[so->ch])>>14;
|
||||
/* Scaling by channel volume and note volume is done in sequencer.c */
|
||||
/* That saves us some multiplication and pointer operations */
|
||||
return s*so->volscale>>14;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
inline void synthSample(int * mixL, int * mixR)
|
||||
{
|
||||
register int dL=0;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue