summaryrefslogtreecommitdiff
path: root/apps/plugins/midi/midiutil.h
diff options
context:
space:
mode:
authorNils Wallménius <nils@rockbox.org>2007-09-24 15:57:32 +0000
committerNils Wallménius <nils@rockbox.org>2007-09-24 15:57:32 +0000
commit0e49605aaae01722a618dfdc64a328cc0e92bc04 (patch)
treee3241b18fae86271c5f3f9e18f819dc9c2ea29f3 /apps/plugins/midi/midiutil.h
parente24975a35fbf564966b73dbaef766e215f7427d4 (diff)
downloadrockbox-0e49605aaae01722a618dfdc64a328cc0e92bc04.zip
rockbox-0e49605aaae01722a618dfdc64a328cc0e92bc04.tar.gz
rockbox-0e49605aaae01722a618dfdc64a328cc0e92bc04.tar.bz2
rockbox-0e49605aaae01722a618dfdc64a328cc0e92bc04.tar.xz
Move all of midiplay into its subdir and add a Makefile for it, add header files as necessary.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@14841 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/plugins/midi/midiutil.h')
-rw-r--r--apps/plugins/midi/midiutil.h172
1 files changed, 172 insertions, 0 deletions
diff --git a/apps/plugins/midi/midiutil.h b/apps/plugins/midi/midiutil.h
new file mode 100644
index 0000000..cfaa4fb
--- /dev/null
+++ b/apps/plugins/midi/midiutil.h
@@ -0,0 +1,172 @@
+/***************************************************************************
+ * __________ __ ___.
+ * Open \______ \ ____ ____ | | _\_ |__ _______ ___
+ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+ * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+ * \/ \/ \/ \/ \/
+ * $Id$
+ *
+ * Copyright (C) 2005 Stepan Moskovchenko
+ *
+ * All files in this archive are subject to the GNU General Public License.
+ * See the file COPYING in the source tree root for full license agreement.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ****************************************************************************/
+
+#define FRACTSIZE 10
+
+#define BUF_SIZE 256
+#define NBUF 2
+
+
+#ifndef SIMULATOR
+
+#if (HW_SAMPR_CAPS & SAMPR_CAP_22)
+#define SAMPLE_RATE SAMPR_22 // 44100 22050 11025
+#else
+#define SAMPLE_RATE SAMPR_44 // 44100 22050 11025
+#endif
+
+#define MAX_VOICES 20 // Note: 24 midi channels is the minimum general midi
+ // spec implementation
+
+#else // Simulator requires 44100, and we can afford to use more voices
+
+#define SAMPLE_RATE SAMPR_44
+#define MAX_VOICES 48
+
+#endif
+
+#define BYTE unsigned char
+
+//Data chunk ID types, returned by readID()
+#define ID_UNKNOWN -1
+#define ID_MTHD 1
+#define ID_MTRK 2
+#define ID_EOF 3
+#define ID_RIFF 4
+
+//MIDI Commands
+#define MIDI_NOTE_OFF 128
+#define MIDI_NOTE_ON 144
+#define MIDI_AFTERTOUCH 160
+#define MIDI_CONTROL 176
+#define MIDI_PRGM 192
+#define MIDI_PITCHW 224
+
+//MIDI Controllers
+#define CTRL_VOLUME 7
+#define CTRL_BALANCE 8
+#define CTRL_PANNING 10
+#define CHANNEL 1
+
+//Most of these are deprecated.. rampdown is used, maybe one other one too
+#define STATE_ATTACK 1
+#define STATE_DECAY 2
+#define STATE_SUSTAIN 3
+#define STATE_RELEASE 4
+#define STATE_RAMPDOWN 5
+
+//Loop states
+#define STATE_LOOPING 7
+#define STATE_NONLOOPING 8
+
+//Various bits in the GUS mode byte
+#define LOOP_ENABLED 4
+#define LOOP_PINGPONG 8
+#define LOOP_REVERSE 16
+
+#define LOOPDIR_FORWARD 0
+#define LOOPDIR_REVERSE 1
+
+struct MIDIfile
+{
+ int Length;
+ unsigned short numTracks;
+ unsigned short div; /* Time division, X ticks per millisecond */
+ struct Track * tracks[48];
+ unsigned char patches[128];
+ int numPatches;
+};
+
+/*
+struct SynthObject
+{
+ struct GWaveform * wf;
+ unsigned int delta;
+ unsigned int decay;
+ unsigned int cp;
+ unsigned char state, loopState, loopDir;
+ unsigned char note, vol, ch, isUsed;
+ int curRate, curOffset, targetOffset;
+ unsigned int curPoint;
+};
+*/
+
+struct SynthObject
+{
+ struct GWaveform * wf;
+ int delta;
+ int decay;
+ unsigned int cp; /* unsigned int */
+ int state, loopState, loopDir;
+ int note, vol, ch, isUsed;
+ int curRate, curOffset, targetOffset;
+ int curPoint;
+ signed short int volscale;
+};
+
+struct Event
+{
+ unsigned int delta;
+ unsigned char status, d1, d2;
+ unsigned int len;
+ unsigned char * evData;
+};
+
+struct Track
+{
+ unsigned int size;
+ unsigned int numEvents;
+ unsigned int delta; /* For sequencing */
+ unsigned int pos; /* For sequencing */
+ void * dataBlock;
+};
+
+int printf(const char *fmt, ...);
+int midimain(void * filename);
+unsigned char readChar(int file);
+void sendEvent(struct Event * ev);
+inline void setPoint(struct SynthObject * so, int pt);
+struct Event * getEvent(struct Track * tr, int evNum);
+int readTwoBytes(int file);
+int readFourBytes(int file);
+int readVarData(int file);
+int eof(int fd);
+unsigned char * readData(int file, int len);
+void exit(int code);
+
+#define malloc(n) my_malloc(n)
+void * my_malloc(int size);
+
+extern struct SynthObject voices[MAX_VOICES];
+
+extern int chVol[16]; /* Channel volume */
+extern int chPanLeft[16]; /* Channel panning */
+extern int chPanRight[16];
+extern int chPat[16]; /* Channel patch */
+extern int chPW[16]; /* Channel pitch wheel, MSB only */
+
+extern struct GPatch * gusload(char *);
+extern struct GPatch * patchSet[128];
+extern struct GPatch * drumSet[128];
+
+extern struct MIDIfile * mf;
+
+extern int numberOfSamples;
+extern long bpm;
+