diff options
| author | Nils Wallménius <nils@rockbox.org> | 2007-09-24 15:57:32 +0000 |
|---|---|---|
| committer | Nils Wallménius <nils@rockbox.org> | 2007-09-24 15:57:32 +0000 |
| commit | 0e49605aaae01722a618dfdc64a328cc0e92bc04 (patch) | |
| tree | e3241b18fae86271c5f3f9e18f819dc9c2ea29f3 /apps/plugins/midi/midiutil.h | |
| parent | e24975a35fbf564966b73dbaef766e215f7427d4 (diff) | |
| download | rockbox-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.h | 172 |
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; + |