diff options
| author | Jerome Fisher | 2004-11-28 05:35:07 +0000 | 
|---|---|---|
| committer | Jerome Fisher | 2004-11-28 05:35:07 +0000 | 
| commit | 077d19f5008e5cb911b1291f59b63fc46da18cc8 (patch) | |
| tree | d3361671ac04d9d7f0e5e4354a78f4bd48a847d1 /backends/midi/mt32/synth.h | |
| parent | 67b8abac08befed3e545dd500df4f28b7524348a (diff) | |
| download | scummvm-rg350-077d19f5008e5cb911b1291f59b63fc46da18cc8.tar.gz scummvm-rg350-077d19f5008e5cb911b1291f59b63fc46da18cc8.tar.bz2 scummvm-rg350-077d19f5008e5cb911b1291f59b63fc46da18cc8.zip | |
- Added graphical representation of initialisation progress. This is quite hacky.
- Initialisation is now interruptible.
- All data is now loaded from MT32_CONTROL.ROM. drumpat.rom, Preset1.syx, Preset2.syx and patchlog.cfg are no longer used.
- Major cleanup. In particular, separated Rhythm part into a new class, instead of dealing with it as a special case everywhere.
- Improved accuracy of pitch key-follow.
- Recaching now happens lazily.
- Changed some right-shifts to divs, due to the former not being arithmetic on some architectures.
- Setting "MT32EMU_ACCURATENOTES" to 1 will generate lookup tables for the exact frequency of every note played. Not recommended.
- Several small bugs fixed.
svn-id: r15929
Diffstat (limited to 'backends/midi/mt32/synth.h')
| -rw-r--r-- | backends/midi/mt32/synth.h | 84 | 
1 files changed, 43 insertions, 41 deletions
| diff --git a/backends/midi/mt32/synth.h b/backends/midi/mt32/synth.h index dbd77c1dfd..c93ff01803 100644 --- a/backends/midi/mt32/synth.h +++ b/backends/midi/mt32/synth.h @@ -39,27 +39,27 @@ class PartialManager;  class Part;  enum ReportType { -	// Files missing -	ReportType_errorPreset1    = 1, -	ReportType_errorPreset2    = 2, -	ReportType_errorDrumpat    = 3, -	ReportType_errorPatchlog   = 4, -	ReportType_errorMT32ROM    = 5, -	ReportType_errorSampleRate = 6, +	// Errors +	ReportType_errorControlROM = 1, +	ReportType_errorPCMROM, +	ReportType_errorSampleRate, + +	// Progress +	ReportType_progressInit,  	// HW spec -	ReportType_availableSSE    = 7, -	ReportType_available3DNow  = 8, -	ReportType_usingSSE        = 9, -	ReportType_using3DNow      = 10, +	ReportType_availableSSE, +	ReportType_available3DNow, +	ReportType_usingSSE, +	ReportType_using3DNow,  	// General info -	ReportType_lcdMessage      = 11, -	ReportType_devReset        = 12, -	ReportType_devReconfig     = 13, -	ReportType_newReverbMode   = 14, -	ReportType_newReverbTime   = 15, -	ReportType_newReverbLevel  = 16 +	ReportType_lcdMessage, +	ReportType_devReset, +	ReportType_devReconfig, +	ReportType_newReverbMode, +	ReportType_newReverbTime, +	ReportType_newReverbLevel  };  struct SynthProperties { @@ -84,7 +84,7 @@ struct SynthProperties {  	// This is used as the first argument to all callbacks  	void *userData;  	// Callback for reporting various errors and information. May be NULL -	void (*report)(void *userData, ReportType type, const void *reportData); +	int (*report)(void *userData, ReportType type, const void *reportData);  	// Callback for debug messages, in vprintf() format  	void (*printDebug)(void *userData, const char *fmt, va_list list);  	// Callback for providing an implementation of File, opened and ready for use @@ -105,19 +105,20 @@ typedef void (*recalcStatusCallback)(int percDone);  bool RecalcWaveforms(char * baseDir, int sampRate, recalcStatusCallback callBack);  typedef float (*iir_filter_type)(float input,float *hist1_ptr, float *coef_ptr, int revLevel); -extern iir_filter_type usefilter;  class Synth {  friend class Part; +friend class RhythmPart;  friend class Partial;  friend class TableInitialiser;  private:  	bool isEnabled; -	PCMWave PCM[54]; +	iir_filter_type iirFilter; +  	PCMWaveEntry PCMList[128]; -	Bit32s PCMLoopTable[54]; +	Bit8u controlROMData[64 * 1024];  	Bit16s romfile[PCMSIZE + GRAN];  	Bit8s chantable[32]; @@ -125,15 +126,12 @@ private:  	static Bit32s samplepos = 0;  	#endif -	MT32RAMFormat mt32ram, mt32default; +	MemParams mt32ram, mt32default;  	revmodel *reverbModel; -	Bit16s mastervolume; - -	char curRevMode; -	char curRevTime; -	Bit32u curRevLevel; +	float masterTune; +	Bit16u masterVolume;  	unsigned char initmode;  	bool isOpen; @@ -150,25 +148,30 @@ private:  	SynthProperties myProp;  	bool loadPreset(const char *filename); -	void initReverb(char newRevMode, char newRevTime); +	void initReverb(Bit8u newRevMode, Bit8u newRevTime, Bit8u newRevLevel);  	void doRender(Bit16s * stream, Bit32u len);  	void playMsgOnPart(unsigned char part, unsigned char code, unsigned char note, unsigned char velocity); -	void playSysexWithoutHeader(unsigned char channel, Bit8u *sysex, Bit32u len); - -	bool loadDrums(const char *filename); -	bool loadPCMToROMMap(const char *filename); -	bool loadROM(const char *filename); -	void dumpDrums(const char *filename); -	// Save the system state to a sysex file specified by filename -	int dumpSysex(char *filename); - +	void playSysexWithoutHeader(unsigned char channel, const Bit8u *sysex, Bit32u len); + +	bool loadControlROM(const char *filename); +	bool loadPCMROM(const char *filename); +	bool dumpTimbre(File *file, const TimbreParam *timbre, Bit32u addr); +	int dumpTimbres(const char *filename, int start, int len); + +	void initPCMList(); +	void initRhythmTimbres(); +	void initTimbres(Bit16u mapAddress, int startTimbre); +	void initRhythmTimbre(int drumNum, const Bit8u *mem); +	bool refreshSystem();  protected: -	void report(ReportType type, const void *reportData); +	int report(ReportType type, const void *reportData);  	File *openFile(const char *filename, File::OpenMode mode);  	void closeFile(File *file);  	void printDebug(const char *fmt, ...);  public: +	static Bit8u calcSysexChecksum(const Bit8u *data, Bit32u len, Bit8u checksum); +  	Synth();  	~Synth(); @@ -182,11 +185,10 @@ public:  	// Sends a 4-byte MIDI message to the MT-32 for immediate playback  	void playMsg(Bit32u msg); -	static Bit8u calcSysexChecksum(Bit8u *data, Bit32u len, Bit8u checksum);  	// Sends a string of Sysex commands to the MT-32 for immediate interpretation  	// The length is in bytes -	void playSysex(Bit8u *sysex, Bit32u len); -	void playSysexWithoutFraming(Bit8u *sysex, Bit32u len); +	void playSysex(const Bit8u *sysex, Bit32u len); +	void playSysexWithoutFraming(const Bit8u *sysex, Bit32u len);  	// This callback routine is used to have the MT-32 generate samples to the specified  	// output stream.  The length is in whole samples, not bytes. (I.E. in 16-bit stereo, | 
