1 /* 2 * Adplug - Replayer for many OPL2/OPL3 audio file formats. 3 * Copyright (C) 1999 - 2003 Simon Peter, <dn.tlp@gmx.net>, et al. 4 * 5 * This library is free software; you can redistribute it and/or 6 * modify it under the terms of the GNU Lesser General Public 7 * License as published by the Free Software Foundation; either 8 * version 2.1 of the License, or (at your option) any later version. 9 * 10 * This library is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 * Lesser General Public License for more details. 14 * 15 * You should have received a copy of the GNU Lesser General Public 16 * License along with this library; if not, write to the Free Software 17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 18 * 19 * [xad] PSI player, by Riven the Mage <riven@ok.ru> 20 */ 21 22 #include "xad.h" 23 24 class CxadpsiPlayer: public CxadPlayer 25 { 26 public: 27 static CPlayer *factory(Copl *newopl); 28 CxadpsiPlayer(Copl * newopl)29 CxadpsiPlayer(Copl *newopl): CxadPlayer(newopl) 30 { } 31 32 protected: 33 struct psi_header 34 { 35 unsigned short instr_ptr; 36 unsigned short seq_ptr; 37 } header; 38 39 struct 40 { 41 unsigned char *instr_table; 42 unsigned char *seq_table; 43 unsigned char note_delay[9]; 44 unsigned char note_curdelay[9]; 45 unsigned char looping[9]; 46 } psi; 47 // xadplayer_load()48 bool xadplayer_load() 49 { 50 if(xad.fmt == PSI) 51 return true; 52 else 53 return false; 54 } 55 void xadplayer_rewind(int subsong); 56 void xadplayer_update(); 57 float xadplayer_getrefresh(); 58 std::string xadplayer_gettype(); 59 unsigned int xadplayer_getinstruments(); 60 61 private: 62 static const unsigned char psi_adlib_registers[99]; 63 static const unsigned short psi_notes[16]; 64 }; 65