/*
BASSMIDI 2.4 Java class
Copyright (c) 2006-2013 Un4seen Developments Ltd.
See the BASSMIDI.CHM file for more detailed documentation
*/
package com.un4seen.bass;
import java.nio.ByteBuffer;
public class BASSMIDI {
// Additional BASS_SetConfig options
public static final int BASS_CONFIG_MIDI_COMPACT = 0x10400;
public static final int BASS_CONFIG_MIDI_VOICES = 0x10401;
public static final int BASS_CONFIG_MIDI_AUTOFONT = 0x10402;
// Additional BASS_SetConfigPtr options
public static final int BASS_CONFIG_MIDI_DEFFONT = 0x10403;
// Additional sync types
public static final int BASS_SYNC_MIDI_MARK = 0x10000;
public static final int BASS_SYNC_MIDI_MARKER = 0x10000;
public static final int BASS_SYNC_MIDI_CUE = 0x10001;
public static final int BASS_SYNC_MIDI_LYRIC = 0x10002;
public static final int BASS_SYNC_MIDI_TEXT = 0x10003;
public static final int BASS_SYNC_MIDI_EVENT = 0x10004;
public static final int BASS_SYNC_MIDI_TICK = 0x10005;
public static final int BASS_SYNC_MIDI_TIMESIG = 0x10006;
public static final int BASS_SYNC_MIDI_KEYSIG = 0x10007;
// Additional BASS_MIDI_StreamCreateFile/etc flags
public static final int BASS_MIDI_DECAYEND = 0x1000;
public static final int BASS_MIDI_NOFX = 0x2000;
public static final int BASS_MIDI_DECAYSEEK = 0x4000;
public static final int BASS_MIDI_NOCROP = 0x8000;
public static final int BASS_MIDI_SINCINTER = 0x800000;
// BASS_MIDI_FontInit flags
public static final int BASS_MIDI_FONT_MEM = 0x10000;
public static final int BASS_MIDI_FONT_MMAP = 0x20000;
// BASS_MIDI_StreamSet/GetFonts flag
public static final int BASS_MIDI_FONT_EX = 0x1000000; // BASS_MIDI_FONTEX (auto-detected)
// Marker types
public static final int BASS_MIDI_MARK_MARKER = 0; // marker
public static final int BASS_MIDI_MARK_CUE = 1; // cue point
public static final int BASS_MIDI_MARK_LYRIC = 2; // lyric
public static final int BASS_MIDI_MARK_TEXT = 3; // text
public static final int BASS_MIDI_MARK_TIMESIG = 4; // time signature
public static final int BASS_MIDI_MARK_KEYSIG = 5; // key signature
public static final int BASS_MIDI_MARK_COPY = 6; // copyright notice
public static final int BASS_MIDI_MARK_TRACK = 7; // track name
public static final int BASS_MIDI_MARK_INST = 8; // instrument name
public static final int BASS_MIDI_MARK_TICK = 0x10000; // FLAG: get position in ticks (otherwise bytes)
// MIDI events
public static final int MIDI_EVENT_NOTE = 1;
public static final int MIDI_EVENT_PROGRAM = 2;
public static final int MIDI_EVENT_CHANPRES = 3;
public static final int MIDI_EVENT_PITCH = 4;
public static final int MIDI_EVENT_PITCHRANGE = 5;
public static final int MIDI_EVENT_DRUMS = 6;
public static final int MIDI_EVENT_FINETUNE = 7;
public static final int MIDI_EVENT_COARSETUNE = 8;
public static final int MIDI_EVENT_MASTERVOL = 9;
public static final int MIDI_EVENT_BANK = 10;
public static final int MIDI_EVENT_MODULATION = 11;
public static final int MIDI_EVENT_VOLUME = 12;
public static final int MIDI_EVENT_PAN = 13;
public static final int MIDI_EVENT_EXPRESSION = 14;
public static final int MIDI_EVENT_SUSTAIN = 15;
public static final int MIDI_EVENT_SOUNDOFF = 16;
public static final int MIDI_EVENT_RESET = 17;
public static final int MIDI_EVENT_NOTESOFF = 18;
public static final int MIDI_EVENT_PORTAMENTO = 19;
public static final int MIDI_EVENT_PORTATIME = 20;
public static final int MIDI_EVENT_PORTANOTE = 21;
public static final int MIDI_EVENT_MODE = 22;
public static final int MIDI_EVENT_REVERB = 23;
public static final int MIDI_EVENT_CHORUS = 24;
public static final int MIDI_EVENT_CUTOFF = 25;
public static final int MIDI_EVENT_RESONANCE = 26;
public static final int MIDI_EVENT_RELEASE = 27;
public static final int MIDI_EVENT_ATTACK = 28;
public static final int MIDI_EVENT_REVERB_MACRO = 30;
public static final int MIDI_EVENT_CHORUS_MACRO = 31;
public static final int MIDI_EVENT_REVERB_TIME = 32;
public static final int MIDI_EVENT_REVERB_DELAY = 33;
public static final int MIDI_EVENT_REVERB_LOCUTOFF = 34;
public static final int MIDI_EVENT_REVERB_HICUTOFF = 35;
public static final int MIDI_EVENT_REVERB_LEVEL = 36;
public static final int MIDI_EVENT_CHORUS_DELAY = 37;
public static final int MIDI_EVENT_CHORUS_DEPTH = 38;
public static final int MIDI_EVENT_CHORUS_RATE = 39;
public static final int MIDI_EVENT_CHORUS_FEEDBACK = 40;
public static final int MIDI_EVENT_CHORUS_LEVEL = 41;
public static final int MIDI_EVENT_CHORUS_REVERB = 42;
public static final int MIDI_EVENT_DRUM_FINETUNE = 50;
public static final int MIDI_EVENT_DRUM_COARSETUNE = 51;
public static final int MIDI_EVENT_DRUM_PAN = 52;
public static final int MIDI_EVENT_DRUM_REVERB = 53;
public static final int MIDI_EVENT_DRUM_CHORUS = 54;
public static final int MIDI_EVENT_DRUM_CUTOFF = 55;
public static final int MIDI_EVENT_DRUM_RESONANCE = 56;
public static final int MIDI_EVENT_DRUM_LEVEL = 57;
public static final int MIDI_EVENT_SOFT = 60;
public static final int MIDI_EVENT_SYSTEM = 61;
public static final int MIDI_EVENT_TEMPO = 62;
public static final int MIDI_EVENT_SCALETUNING = 63;
public static final int MIDI_EVENT_CONTROL = 64;
public static final int MIDI_EVENT_CHANPRES_VIBRATO = 65;
public static final int MIDI_EVENT_CHANPRES_PITCH = 66;
public static final int MIDI_EVENT_CHANPRES_FILTER = 67;
public static final int MIDI_EVENT_CHANPRES_VOLUME = 68;
public static final int MIDI_EVENT_MODRANGE = 69;
public static final int MIDI_EVENT_BANK_LSB = 70;
public static final int MIDI_EVENT_MIXLEVEL = 0x10000;
public static final int MIDI_EVENT_TRANSPOSE = 0x10001;
public static final int MIDI_EVENT_SYSTEMEX = 0x10002;
public static final int MIDI_EVENT_END = 0;
public static final int MIDI_EVENT_END_TRACK = 0x10003;
public static final int MIDI_SYSTEM_DEFAULT = 0;
public static final int MIDI_SYSTEM_GM1 = 1;
public static final int MIDI_SYSTEM_GM2 = 2;
public static final int MIDI_SYSTEM_XG = 3;
public static final int MIDI_SYSTEM_GS = 4;
// BASS_MIDI_StreamEvents modes
public static final int BASS_MIDI_EVENTS_STRUCT = 0; // BASS_MIDI_EVENT structures
public static final int BASS_MIDI_EVENTS_RAW = 0x10000; // raw MIDI event data
public static final int BASS_MIDI_EVENTS_SYNC = 0x1000000; // FLAG: trigger event syncs
// BASS_CHANNELINFO type
public static final int BASS_CTYPE_STREAM_MIDI = 0x10d00;
// Additional attributes
public static final int BASS_ATTRIB_MIDI_PPQN = 0x12000;
public static final int BASS_ATTRIB_MIDI_CPU = 0x12001;
public static final int BASS_ATTRIB_MIDI_CHANS = 0x12002;
public static final int BASS_ATTRIB_MIDI_VOICES = 0x12003;
public static final int BASS_ATTRIB_MIDI_VOICES_ACTIVE = 0x12004;
public static final int BASS_ATTRIB_MIDI_TRACK_VOL = 0x12100; // + track #
// Additional tag type
public static final int BASS_TAG_MIDI_TRACK = 0x11000; // + track #, track text : array of null-terminated ANSI strings
// BASS_ChannelGetLength/GetPosition/SetPosition mode
public static final int BASS_POS_MIDI_TICK = 2; // tick position
static {
System.loadLibrary("bassmidi");
}
public static native int BASS_MIDI_StreamCreate(int channels, int flags, int freq);
public static native int BASS_MIDI_StreamCreateFile(String file, long offset, long length, int flags, int freq);
public static native int BASS_MIDI_StreamCreateFile(ByteBuffer file, long offset, long length, int flags, int freq);
public static native int BASS_MIDI_StreamCreateURL(String url, int offset, int flags, BASS.DOWNLOADPROC proc, Object user, int freq);
public static native int BASS_MIDI_StreamCreateFileUser(int system, int flags, BASS.BASS_FILEPROCS procs, Object user, int freq);
public static native int BASS_MIDI_StreamCreateEvents(BASS_MIDI_EVENT[] events, int ppqn, int flags, int freq);
public static native boolean BASS_MIDI_StreamGetMark(int handle, int type, int index, BASS_MIDI_MARK mark);
public static native int BASS_MIDI_StreamGetMarks(int handle, int track, int type, BASS_MIDI_MARK[] marks);
public static native boolean BASS_MIDI_StreamSetFonts(int handle, BASS_MIDI_FONT[] fonts, int count);
public static native boolean BASS_MIDI_StreamSetFonts(int handle, BASS_MIDI_FONTEX[] fonts, int count);
public static native int BASS_MIDI_StreamGetFonts(int handle, BASS_MIDI_FONT[] fonts, int count);
public static native int BASS_MIDI_StreamGetFonts(int handle, BASS_MIDI_FONTEX[] fonts, int count);
public static native boolean BASS_MIDI_StreamLoadSamples(int handle);
public static native boolean BASS_MIDI_StreamEvent(int handle, int chan, int event, int param);
public static native int BASS_MIDI_StreamEvents(int handle, int mode, BASS_MIDI_EVENT[] events, int length);
public static native int BASS_MIDI_StreamEvents(int handle, int mode, ByteBuffer events, int length);
public static native int BASS_MIDI_StreamGetEvent(int handle, int chan, int event);
public static native int BASS_MIDI_StreamGetEvents(int handle, int track, int filter, BASS_MIDI_EVENT[] events);
public static native int BASS_MIDI_FontInit(String file, int flags);
public static native int BASS_MIDI_FontInit(ByteBuffer file, int flags);
public static native int BASS_MIDI_FontInitUser(BASS.BASS_FILEPROCS procs, Object user, int flags);
public static native boolean BASS_MIDI_FontFree(int handle);
public static native boolean BASS_MIDI_FontGetInfo(int handle, BASS_MIDI_FONTINFO info);
// public static native int BASS_MIDI_StreamGetChannel(int handle, int chan);
public static native boolean BASS_MIDI_FontGetPresets(int handle, int[] presets);
public static native String BASS_MIDI_FontGetPreset(int handle, int preset, int bank);
public static native boolean BASS_MIDI_FontLoad(int handle, int preset, int bank);
public static native boolean BASS_MIDI_FontUnload(int handle, int preset, int bank);
public static native boolean BASS_MIDI_FontCompact(int handle);
public static native boolean BASS_MIDI_FontUnpack(int handle, String outfile, int flags);
public static native boolean BASS_MIDI_FontSetVolume(int handle, float volume);
public static native float BASS_MIDI_FontGetVolume(int handle);
public static class BASS_MIDI_FONT {
public int font; // soundfont
public int preset; // preset number (-1=all)
public int bank;
}
public static class BASS_MIDI_FONTEX {
public int font; // soundfont
public int spreset; // source preset number
public int sbank; // source bank number
public int dpreset; // destination preset/program number
public int dbank; // destination bank number
public int dbanklsb; // destination bank number LSB
}
public static class BASS_MIDI_FONTINFO {
public String name;
public String copyright;
public String comment;
public int presets; // number of presets/instruments
public int samsize; // total size (in bytes) of the sample data
public int samload; // amount of sample data currently loaded
public int samtype; // sample format (CTYPE) if packed
}
public static class BASS_MIDI_MARK {
public int track; // track containing marker
public int pos; // marker position
public String text; // marker text
}
public static class BASS_MIDI_EVENT {
public int event; // MIDI_EVENT_xxx
public int param;
public int chan;
public int tick; // event position (ticks)
public int pos; // event position (bytes)
}
public static class BASS_MIDI_DEVICEINFO {
public String name; // description
public int id;
public int flags;
}
}