From f619f8167646632d6eab10f529638eebbdda6af6 Mon Sep 17 00:00:00 2001 From: Nils Wallménius Date: Mon, 8 Oct 2007 19:28:41 +0000 Subject: Change loop structure for sample synthesizing. Gives a nice speedup on both coldfire and arm targets. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@15036 a1c6a512-1295-4272-9138-f99709370657 --- apps/plugins/midi/synth.h | 55 +---------------------------------------------- 1 file changed, 1 insertion(+), 54 deletions(-) (limited to 'apps/plugins/midi/synth.h') diff --git a/apps/plugins/midi/synth.h b/apps/plugins/midi/synth.h index e04f9f4bd5..5f9edf89e5 100644 --- a/apps/plugins/midi/synth.h +++ b/apps/plugins/midi/synth.h @@ -17,61 +17,8 @@ * ****************************************************************************/ int initSynth(struct MIDIfile * mf, char * filename, char * drumConfig); -int synthVoice(struct SynthObject * so); void setPoint(struct SynthObject * so, int pt); - -static inline void synthSample(int * mixL, int * mixR) -{ - int i; - register int dL=0; - register int dR=0; - register int sample = 0; - register struct SynthObject *voicept=voices; - - for(i=MAX_VOICES/2; i > 0; i--) - { - if(voicept->isUsed==1) - { - sample = synthVoice(voicept); - dL += sample; - sample *= chPan[voicept->ch]; - dR += sample; - } - voicept++; - if(voicept->isUsed==1) - { - sample = synthVoice(voicept); - dL += sample; - sample *= chPan[voicept->ch]; - dR += sample; - } - voicept++; - } - -/* if MAX_VOICES is not even we do this to get the last voice */ -#if MAX_VOICES%2 - if (MAX_VOICES%2) - { - if(voicept->isUsed==1) - { - sample = synthVoice(voicept); - dL += sample; - sample *= chPan[voicept->ch]; - dR += sample; - } - } -#endif - - dL = (dL << 7) - dR; - - *mixL=dL >> 7; - *mixR=dR >> 7; - - /* TODO: Automatic Gain Control, anyone? */ - /* Or, should this be implemented on the DSP's output volume instead? */ - - return; /* No more ghetto lowpass filter. Linear interpolation works well. */ -} +void synthSamples(int32_t *buf_ptr, unsigned int num_samples); static inline struct Event * getEvent(struct Track * tr, int evNum) { -- cgit v1.2.3