1 #ifndef _EMU2413_H_ 2 #define _EMU2413_H_ 3 4 #define PI 3.14159265358979323846 5 6 enum {EMU2413_2413_TONE = 0}; 7 8 /* voice data */ 9 typedef struct { 10 uint32 TL,FB,EG,ML,AR,DR,SL,RR,KR,KL,AM,PM,WF ; 11 } EMU2413_PATCH ; 12 13 /* slot */ 14 typedef struct { 15 16 EMU2413_PATCH *patch; 17 18 int32 type ; /* 0 : modulator 1 : carrier */ 19 20 /* OUTPUT */ 21 int32 feedback ; 22 int32 output[2] ; /* Output value of slot */ 23 24 /* for Phase Generator (PG) */ 25 uint32 *sintbl ; /* Wavetable */ 26 uint32 phase ; /* Phase */ 27 uint32 dphase ; /* Phase increment amount */ 28 uint32 pgout ; /* output */ 29 30 /* for Envelope Generator (EG) */ 31 int32 fnum ; /* F-Number */ 32 int32 block ; /* Block */ 33 int32 volume ; /* Current volume */ 34 int32 sustine ; /* Sustine 1 = ON, 0 = OFF */ 35 uint32 tll ; /* Total Level + Key scale level*/ 36 uint32 rks ; /* Key scale offset (Rks) */ 37 int32 eg_mode ; /* Current state */ 38 uint32 eg_phase ; /* Phase */ 39 uint32 eg_dphase ; /* Phase increment amount */ 40 uint32 egout ; /* output */ 41 42 } EMU2413_SLOT ; 43 44 /* Mask */ 45 #define EMU2413_MASK_CH(x) (1<<(x)) 46 #define EMU2413_MASK_HH (1<<(9)) 47 #define EMU2413_MASK_CYM (1<<(10)) 48 #define EMU2413_MASK_TOM (1<<(11)) 49 #define EMU2413_MASK_SD (1<<(12)) 50 #define EMU2413_MASK_BD (1<<(13)) 51 #define EMU2413_MASK_RHYTHM ( EMU2413_MASK_HH | EMU2413_MASK_CYM | EMU2413_MASK_TOM | EMU2413_MASK_SD | EMU2413_MASK_BD ) 52 53 /* opll */ 54 typedef struct 55 { 56 57 uint32 adr ; 58 int32 out ; 59 60 uint32 pan[16]; 61 62 /* Register */ 63 uint8 reg[0x40] ; 64 int32 slot_on_flag[18] ; 65 66 /* Pitch Modulator */ 67 uint32 pm_phase ; 68 int32 lfo_pm ; 69 70 /* Amp Modulator */ 71 int32 am_phase ; 72 int32 lfo_am ; 73 74 /* Noise Generator */ 75 uint32 noise_seed ; 76 77 /* Channel Data */ 78 int32 patch_number[9]; 79 int32 key_status[9] ; 80 81 /* Slot */ 82 EMU2413_SLOT slot[18] ; 83 84 /* Voice Data */ 85 EMU2413_PATCH patch[19*2] ; 86 int32 patch_update[2] ; /* flag for check patch update */ 87 88 uint32 mask ; 89 90 } EMU2413 ; 91 92 /* Create Object */ 93 EMU2413 *EMU2413_new(uint32 clk); 94 void EMU2413_delete(EMU2413 *); 95 96 /* Setup */ 97 void EMU2413_reset(EMU2413 *); 98 void EMU2413_reset_patch(EMU2413 *, int32); 99 void EMU2413_set_pan(EMU2413 *, uint32 ch, uint32 pan); 100 101 /* Port/Register access */ 102 void EMU2413_writeIO(EMU2413 *, uint32 reg, uint32 val) ; 103 void EMU2413_writeReg(EMU2413 *, uint32 reg, uint32 val) ; 104 105 /* Synthsize */ 106 int32 EMU2413_calc(EMU2413 *) ; 107 void EMU2413_calc_stereo(EMU2413 *, int32 out[2]) ; 108 109 /* Misc */ 110 void EMU2413_setPatch(EMU2413 *, const uint8 *dump) ; 111 void EMU2413_copyPatch(EMU2413 *, int32, EMU2413_PATCH *) ; 112 void EMU2413_forceRefresh(EMU2413 *) ; 113 114 /* Utility */ 115 void EMU2413_dump2patch(const uint8 *dump, EMU2413_PATCH *patch) ; 116 void EMU2413_patch2dump(const EMU2413_PATCH *patch, uint8 *dump) ; 117 void EMU2413_getDefaultPatch(int32 type, int32 num, EMU2413_PATCH *) ; 118 119 /* Channel Mask */ 120 uint32 EMU2413_setMask(EMU2413 *, uint32 mask) ; 121 uint32 EMU2413_toggleMask(EMU2413 *, uint32 mask) ; 122 123 #endif 124