summaryrefslogtreecommitdiff
path: root/apps/plugins/midi
diff options
context:
space:
mode:
authorStepan Moskovchenko <stevenm@rockbox.org>2006-05-03 05:18:18 +0000
committerStepan Moskovchenko <stevenm@rockbox.org>2006-05-03 05:18:18 +0000
commit47efba8bbfd17cb6d95ce1039e0114dc24a9dc68 (patch)
tree4d42a46b6c0d66d7b53ec82dfc7a0ce826b5ba98 /apps/plugins/midi
parent224b0bf1ffe3d5ec0f61dd2df20c13c48d1644b4 (diff)
downloadrockbox-47efba8bbfd17cb6d95ce1039e0114dc24a9dc68.zip
rockbox-47efba8bbfd17cb6d95ce1039e0114dc24a9dc68.tar.gz
rockbox-47efba8bbfd17cb6d95ce1039e0114dc24a9dc68.tar.bz2
rockbox-47efba8bbfd17cb6d95ce1039e0114dc24a9dc68.tar.xz
Fix file descriptor leak that would cause a hard lockup every 7 files
played. A few other cosmetic changes. please, please no red build =) git-svn-id: svn://svn.rockbox.org/rockbox/trunk@9865 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/plugins/midi')
-rw-r--r--apps/plugins/midi/midifile.c17
-rw-r--r--apps/plugins/midi/midiutil.c12
-rw-r--r--apps/plugins/midi/sequencer.c18
-rw-r--r--apps/plugins/midi/synth.c10
4 files changed, 43 insertions, 14 deletions
diff --git a/apps/plugins/midi/midifile.c b/apps/plugins/midi/midifile.c
index 61168f9..13887e4 100644
--- a/apps/plugins/midi/midifile.c
+++ b/apps/plugins/midi/midifile.c
@@ -67,7 +67,8 @@ struct MIDIfile * loadFile(char * filename)
int track=0;
- printf("\nnumTracks=%d div=%d\nBegin reading track data\n", mfload->numTracks, mfload->div);
+ printf("\nFile has %d tracks.", mfload->numTracks);
+ printf("Time division=%d\n", mfload->div);
while(! eof(file) && track < mfload->numTracks)
@@ -79,7 +80,7 @@ struct MIDIfile * loadFile(char * filename)
{
if(mfload->numTracks != track)
{
- printf("\nError: file claims to have %d tracks.\n I only see %d here.\n", mfload->numTracks, track);
+ printf("\nError: file claims to have %d tracks.\n I only see %d here.\n", mfload->numTracks, track);
mfload->numTracks = track;
}
return mfload;
@@ -88,7 +89,6 @@ struct MIDIfile * loadFile(char * filename)
if(id == ID_MTRK)
{
mfload->tracks[track] = readTrack(file);
- //exit(0);
track++;
} else
{
@@ -98,16 +98,19 @@ struct MIDIfile * loadFile(char * filename)
readChar(file);
}
}
+
+ rb->close(file);
return mfload;
}
+/* Global again. Not static. What if track 1 ends on a running status event
+ * and then track 2 starts loading */
+int rStatus = 0;
/* Returns 0 if done, 1 if keep going */
int readEvent(int file, void * dest)
{
-
- static int rStatus = 0;
struct Event dummy;
struct Event * ev = (struct Event *) dest;
@@ -136,7 +139,7 @@ int readEvent(int file, void * dest)
else
{
/*
- * Don't allocate anything, just see how much it would tale
+ * Don't allocate anything, just see how much it would take
* To make memory usage efficient
*/
unsigned int a=0;
@@ -201,7 +204,7 @@ struct Track * readTrack(int file)
{
if(trackSize < dataPtr-trk->dataBlock)
{
- printf("\nTrack parser memory out of bounds");
+ printf("\nTrack parser memory out of bounds");
exit(1);
}
dataPtr+=sizeof(struct Event);
diff --git a/apps/plugins/midi/midiutil.c b/apps/plugins/midi/midiutil.c
index 8e27e73..daadae8 100644
--- a/apps/plugins/midi/midiutil.c
+++ b/apps/plugins/midi/midiutil.c
@@ -62,6 +62,7 @@
extern struct plugin_api * rb;
+int printf(const char *fmt, ...);
int chVol[16] IBSS_ATTR; /* Channel volume */
int chPanLeft[16] IBSS_ATTR; /* Channel panning */
@@ -156,6 +157,15 @@ void *alloc(int size)
if (size + 4 > totalSize)
{
+ printf("\nMALLOC BARF");
+ printf("\nMALLOC BARF");
+ printf("\nMALLOC BARF");
+ printf("\nMALLOC BARF");
+ printf("\nMALLOC BARF");
+ printf("\nMALLOC BARF");
+ printf("\nMALLOC BARF");
+ /* We've made our point. */
+
return NULL;
}
@@ -229,7 +239,7 @@ int eof(int fd)
// Here is a hacked up printf command to get the output from the game.
int printf(const char *fmt, ...)
{
- static int p_xtpt;
+ static int p_xtpt = 0;
char p_buf[50];
bool ok;
va_list ap;
diff --git a/apps/plugins/midi/sequencer.c b/apps/plugins/midi/sequencer.c
index 3c02627..b6fb592 100644
--- a/apps/plugins/midi/sequencer.c
+++ b/apps/plugins/midi/sequencer.c
@@ -111,7 +111,7 @@ long pitchTbl[] ICONST_ATTR={
72901,72934,72967,72999,73032,73065,73098,73131,73164,73197,73230,73264,
73297,73330,73363,73396,73429,73462,73495,73528
};
-
+/*
void findDelta(struct SynthObject * so, int ch, int note)
{
@@ -120,6 +120,22 @@ void findDelta(struct SynthObject * so, int ch, int note)
so->delta = (((gustable[note]<<10) / (wf->rootFreq)) * wf->sampRate / (SAMPLE_RATE));
so->delta = (so->delta * pitchTbl[chPW[ch]])>> 16;
}
+*/
+
+
+void findDelta(struct SynthObject * so, int ch, int note)
+{
+
+ struct GWaveform * wf = patchSet[chPat[ch]]->waveforms[patchSet[chPat[ch]]->noteTable[note]];
+ so->wf=wf; // \|/ was 10
+
+ unsigned long delta= 0 ;
+
+ delta = (((gustable[note]<<FRACTSIZE) / (wf->rootFreq)) * wf->sampRate / (SAMPLE_RATE));
+ delta = (delta * pitchTbl[chPW[ch]])>> 16;
+
+ so->delta = delta;
+}
inline void setPW(int ch, int msb, int lsb)
{
diff --git a/apps/plugins/midi/synth.c b/apps/plugins/midi/synth.c
index 44417b2..a364889 100644
--- a/apps/plugins/midi/synth.c
+++ b/apps/plugins/midi/synth.c
@@ -272,7 +272,7 @@ signed short int synthVoice(struct SynthObject * so)
so->cp += so->delta;
}
- cpShifted = so->cp >> 10; //Was 10
+ cpShifted = so->cp >> FRACTSIZE; //Was 10
if( (cpShifted > (wf->numSamples) && (so->state != STATE_RAMPDOWN)))
{
@@ -286,7 +286,7 @@ signed short int synthVoice(struct SynthObject * so)
{
if(wf->mode & LOOP_REVERSE)
{
- so->cp = (wf->endLoop)<<10; //Was 10
+ so->cp = (wf->endLoop)<<FRACTSIZE; //Was 10
cpShifted = wf->endLoop;
s2=getSample((cpShifted), wf);
}
@@ -302,7 +302,7 @@ signed short int synthVoice(struct SynthObject * so)
so->loopState = STATE_LOOPING;
if((wf->mode & (24)) == 0)
{
- so->cp = (wf->startLoop)<<10; //Was 10
+ so->cp = (wf->startLoop)<<FRACTSIZE; //Was 10
cpShifted = wf->startLoop;
s2=getSample((cpShifted), wf);
}
@@ -315,8 +315,8 @@ signed short int synthVoice(struct SynthObject * so)
/* Better, working, linear interpolation */
s1=getSample((cpShifted), wf); //\|/ Was 1023)) >> 10
- s = s1 + ((signed)((s2 - s1) * (so->cp & 1023))>>10); //Was 10
-
+// s = s1 + ((signed)((s2 - s1) * (so->cp & (1023)))>>10); //Was 10
+ s = s1 + ((signed)((s2 - s1) * (so->cp & ((1<<FRACTSIZE)-1)))>>FRACTSIZE); //Was 10
/* ADSR COMMENT WOULD GO FROM HERE.........*/