player.h00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef _PLAYER_H
00025 #define _PLAYER_H
00026
00027 #include <libkmid/dattypes.h>
00028 #include <libkmid/midfile.h>
00029 #include <libkmid/deviceman.h>
00030 #include <libkmid/track.h>
00031 #include <libkmid/notearray.h>
00032 #include <kdemacros.h>
00033
00048 struct SpecialEvent
00049 {
00053 int id;
00054
00060 ulong diffmilliseconds;
00061
00068 ulong absmilliseconds;
00069
00073 int ticks;
00074
00089 int type;
00090
00094 char text[1024];
00095
00099 ulong tempo;
00104 int num;
00109 int den;
00110
00121 struct SpecialEvent *next;
00122
00127 };
00128
00129
00138 struct PlayerController
00139 {
00140 volatile ulong ticksTotal;
00141 volatile ulong ticksPlayed;
00142 volatile double millisecsPlayed;
00143 volatile ulong beginmillisec;
00144
00145 volatile int tempo;
00146 volatile int num;
00147 volatile int den;
00148
00149 volatile int SPEVprocessed;
00150 volatile int SPEVplayed;
00151
00157 volatile int OK;
00158
00162 volatile int playing;
00163
00167 volatile int paused;
00168
00172 volatile int moving;
00173
00177 volatile int finished;
00178
00184 volatile int message KDE_DEPRECATED;
00185
00186 #define PLAYER_DOPAUSE 1
00187 #define PLAYER_DOSTOP 2
00188 #define PLAYER_SETPOS 4
00189 #define PLAYER_HALT 8
00190
00191 volatile ulong gotomsec;
00192
00196 volatile int error;
00197
00202 volatile int gm;
00203
00209 volatile int volumepercentage ;
00210
00215 volatile bool forcepgm[16];
00216
00221 volatile int pgm[16];
00222
00226 volatile double ratioTempo;
00227
00232 volatile bool isSendingAllNotesOff;
00233
00234 volatile MidiEvent *ev;
00235 };
00236
00237
00260 class KMID_EXPORT MidiPlayer
00261 {
00262 class MidiPlayerPrivate;
00263 MidiPlayerPrivate *d;
00264
00265 DeviceManager *midi;
00266 MidiFileInfo *info;
00267 MidiTrack **tracks;
00268 SpecialEvent *spev;
00269 NoteArray *na;
00270
00271 int songLoaded;
00272
00273 PlayerController *ctl;
00274
00275 bool parsesong;
00276 bool generatebeats;
00277
00278 void removeSpecialEvents(void);
00279 void parseSpecialEvents(void);
00280 void insertBeat(SpecialEvent *ev,ulong ms,int num,int den);
00281 void generateBeats(void);
00282
00283
00284 void debugSpecialEvents(void);
00285 public:
00286
00292 MidiPlayer(DeviceManager *midi_,PlayerController *pctl);
00293
00297 ~MidiPlayer();
00298
00305 int loadSong(const char *filename);
00306
00311 void removeSong(void);
00312
00317 int isSongLoaded(void) { return songLoaded; }
00318
00323 SpecialEvent *specialEvents() { return spev; }
00324
00333 NoteArray *noteArray(void) { return na; }
00334
00335
00355 void play(bool calloutput=false,void output(void) = 0);
00356
00362 void setParseSong(bool b = true);
00363
00368 void setGenerateBeats(bool b = false);
00369
00375 MidiFileInfo *information(void) { return info; }
00376
00386 void setPos(ulong gotomsec, class MidiStatus *midistat);
00387
00392 void setTempoRatio(double ratio);
00393
00394 };
00395
00396 #endif
|