148 |
/** Defines how the filter cutoff frequency is controlled by. */ |
/** Defines how the filter cutoff frequency is controlled by. */ |
149 |
typedef enum { |
typedef enum { |
150 |
vcf_cutoff_ctrl_none = 0x00, |
vcf_cutoff_ctrl_none = 0x00, |
151 |
|
vcf_cutoff_ctrl_none2 = 0x01, ///< The difference betwheen none and none2 is unknown |
152 |
vcf_cutoff_ctrl_modwheel = 0x81, ///< Modulation Wheel (MIDI Controller 1) |
vcf_cutoff_ctrl_modwheel = 0x81, ///< Modulation Wheel (MIDI Controller 1) |
153 |
vcf_cutoff_ctrl_effect1 = 0x8c, ///< Effect Controller 1 (Coarse, MIDI Controller 12) |
vcf_cutoff_ctrl_effect1 = 0x8c, ///< Effect Controller 1 (Coarse, MIDI Controller 12) |
154 |
vcf_cutoff_ctrl_effect2 = 0x8d, ///< Effect Controller 2 (Coarse, MIDI Controller 13) |
vcf_cutoff_ctrl_effect2 = 0x8d, ///< Effect Controller 2 (Coarse, MIDI Controller 13) |
270 |
uint8_t zones; ///< Number of zones the dimension has. |
uint8_t zones; ///< Number of zones the dimension has. |
271 |
split_type_t split_type; ///< Intended for internal usage: will be used to convert a dimension value into the corresponding dimension bit number. |
split_type_t split_type; ///< Intended for internal usage: will be used to convert a dimension value into the corresponding dimension bit number. |
272 |
range_t* ranges; ///< Intended for internal usage: Points to the beginning of a range_t array which reflects the value ranges of each dimension zone (only if custom defined ranges are defined, is NULL otherwise). |
range_t* ranges; ///< Intended for internal usage: Points to the beginning of a range_t array which reflects the value ranges of each dimension zone (only if custom defined ranges are defined, is NULL otherwise). |
273 |
unsigned int zone_size; ///< Intended for internal usage: reflects the size of each zone (128/zones) for normal split types only, 0 otherwise. |
float zone_size; ///< Intended for internal usage: reflects the size of each zone (128/zones) for normal split types only, 0 otherwise. |
274 |
}; |
}; |
275 |
|
|
276 |
/** Defines which frequencies are filtered by the VCF. */ |
/** Defines which frequencies are filtered by the VCF. */ |
310 |
unsigned long loop_cycles_left; ///< How many times the loop has still to be passed, this value will be decremented with each loop cycle. |
unsigned long loop_cycles_left; ///< How many times the loop has still to be passed, this value will be decremented with each loop cycle. |
311 |
}; |
}; |
312 |
|
|
313 |
|
/** |
314 |
|
* @brief Used for indicating the progress of a certain task. |
315 |
|
* |
316 |
|
* The function pointer argument has to be supplied with a valid |
317 |
|
* function of the given signature which will then be called on |
318 |
|
* progress changes. An equivalent progress_t structure will be passed |
319 |
|
* back as argument to the callback function on each progress change. |
320 |
|
* The factor field of the supplied progress_t structure will then |
321 |
|
* reflect the current progress as value between 0.0 and 1.0. You might |
322 |
|
* want to use the custom field for data needed in your callback |
323 |
|
* function. |
324 |
|
*/ |
325 |
|
struct progress_t { |
326 |
|
void (*callback)(progress_t*); ///< Callback function pointer which has to be assigned to a function for progress notification. |
327 |
|
float factor; ///< Reflects current progress as value between 0.0 and 1.0. |
328 |
|
void* custom; ///< This pointer can be used for arbitrary data. |
329 |
|
float __range_min; ///< Only for internal usage, do not modify! |
330 |
|
float __range_max; ///< Only for internal usage, do not modify! |
331 |
|
progress_t(); |
332 |
|
}; |
333 |
|
|
334 |
// just symbol prototyping |
// just symbol prototyping |
335 |
class File; |
class File; |
336 |
class Instrument; |
class Instrument; |
404 |
bool VCFEnabled; ///< If filter should be used. |
bool VCFEnabled; ///< If filter should be used. |
405 |
vcf_type_t VCFType; ///< Defines the general filter characteristic (lowpass, highpass, bandpass, etc.). |
vcf_type_t VCFType; ///< Defines the general filter characteristic (lowpass, highpass, bandpass, etc.). |
406 |
vcf_cutoff_ctrl_t VCFCutoffController; ///< Specifies which external controller has influence on the filter cutoff frequency. |
vcf_cutoff_ctrl_t VCFCutoffController; ///< Specifies which external controller has influence on the filter cutoff frequency. |
407 |
|
bool VCFCutoffControllerInvert; ///< Inverts values coming from the defined cutoff controller |
408 |
uint8_t VCFCutoff; ///< Max. cutoff frequency. |
uint8_t VCFCutoff; ///< Max. cutoff frequency. |
409 |
curve_type_t VCFVelocityCurve; ///< Defines a transformation curve for the incoming velocity values, affecting the VCF. |
curve_type_t VCFVelocityCurve; ///< Defines a transformation curve for the incoming velocity values, affecting the VCF. |
410 |
uint8_t VCFVelocityScale; ///< (0-127) Amount velocity controls VCF cutoff frequency (only if no other VCF cutoff controller is defined). |
uint8_t VCFVelocityScale; ///< (0-127) Amount velocity controls VCF cutoff frequency (only if no other VCF cutoff controller is defined, otherwise this is the minimum cutoff). |
411 |
uint8_t VCFVelocityDynamicRange; ///< 0x04 = lowest, 0x00 = highest |
uint8_t VCFVelocityDynamicRange; ///< 0x04 = lowest, 0x00 = highest |
412 |
uint8_t VCFResonance; ///< Firm internal filter resonance weight. |
uint8_t VCFResonance; ///< Firm internal filter resonance weight. |
413 |
bool VCFResonanceDynamic; ///< If <i>true</i>: Increases the resonance Q according to changes of controllers that actually control the VCF cutoff frequency (EG2, ext. VCF MIDI controller). |
bool VCFResonanceDynamic; ///< If <i>true</i>: Increases the resonance Q according to changes of controllers that actually control the VCF cutoff frequency (EG2, ext. VCF MIDI controller). |
445 |
|
|
446 |
// Methods |
// Methods |
447 |
double GetVelocityAttenuation(uint8_t MIDIKeyVelocity); |
double GetVelocityAttenuation(uint8_t MIDIKeyVelocity); |
448 |
|
double GetVelocityRelease(uint8_t MIDIKeyVelocity); |
449 |
|
double GetVelocityCutoff(uint8_t MIDIKeyVelocity); |
450 |
|
|
451 |
protected: |
protected: |
452 |
DimensionRegion(RIFF::List* _3ewl); |
DimensionRegion(RIFF::List* _3ewl); |
453 |
~DimensionRegion(); |
~DimensionRegion(); |
486 |
static uint Instances; ///< Number of DimensionRegion instances. |
static uint Instances; ///< Number of DimensionRegion instances. |
487 |
static VelocityTableMap* pVelocityTables; ///< Contains the tables corresponding to the various velocity parameters (VelocityResponseCurve and VelocityResponseDepth). |
static VelocityTableMap* pVelocityTables; ///< Contains the tables corresponding to the various velocity parameters (VelocityResponseCurve and VelocityResponseDepth). |
488 |
double* pVelocityAttenuationTable; ///< Points to the velocity table corresponding to the velocity parameters of this DimensionRegion. |
double* pVelocityAttenuationTable; ///< Points to the velocity table corresponding to the velocity parameters of this DimensionRegion. |
489 |
|
double* pVelocityReleaseTable; ///< Points to the velocity table corresponding to the release velocity parameters of this DimensionRegion |
490 |
|
double* pVelocityCutoffTable; ///< Points to the velocity table corresponding to the filter velocity parameters of this DimensionRegion |
491 |
|
|
492 |
leverage_ctrl_t DecodeLeverageController(_lev_ctrl_t EncodedController); |
leverage_ctrl_t DecodeLeverageController(_lev_ctrl_t EncodedController); |
493 |
|
double* GetVelocityTable(curve_type_t curveType, uint8_t depth, uint8_t scaling); |
494 |
double* CreateVelocityTable(curve_type_t curveType, uint8_t depth, uint8_t scaling); |
double* CreateVelocityTable(curve_type_t curveType, uint8_t depth, uint8_t scaling); |
495 |
}; |
}; |
496 |
|
|
542 |
unsigned long WorstCaseFrameSize; ///< For compressed samples only: size (in bytes) of the largest possible sample frame. |
unsigned long WorstCaseFrameSize; ///< For compressed samples only: size (in bytes) of the largest possible sample frame. |
543 |
unsigned long SamplesPerFrame; ///< For compressed samples only: number of samples in a full sample frame. |
unsigned long SamplesPerFrame; ///< For compressed samples only: number of samples in a full sample frame. |
544 |
buffer_t RAMCache; ///< Buffers samples (already uncompressed) in RAM. |
buffer_t RAMCache; ///< Buffers samples (already uncompressed) in RAM. |
545 |
|
unsigned long FileNo; ///< File number (> 0 when sample is stored in an extension file, 0 when it's in the gig) |
546 |
|
|
547 |
Sample(File* pFile, RIFF::List* waveList, unsigned long WavePoolOffset); |
Sample(File* pFile, RIFF::List* waveList, unsigned long WavePoolOffset, unsigned long fileNo = 0); |
548 |
~Sample(); |
~Sample(); |
549 |
/** |
/** |
550 |
* Swaps the order of the data words in the given memory area |
* Swaps the order of the data words in the given memory area |
652 |
|
|
653 |
Region(Instrument* pInstrument, RIFF::List* rgnList); |
Region(Instrument* pInstrument, RIFF::List* rgnList); |
654 |
void LoadDimensionRegions(RIFF::List* rgn); |
void LoadDimensionRegions(RIFF::List* rgn); |
655 |
Sample* GetSampleFromWavePool(unsigned int WavePoolTableIndex); |
Sample* GetSampleFromWavePool(unsigned int WavePoolTableIndex, progress_t* pProgress = NULL); |
656 |
~Region(); |
~Region(); |
657 |
friend class Instrument; |
friend class Instrument; |
658 |
}; |
}; |
691 |
Region* RegionKeyTable[128]; ///< fast lookup for the corresponding Region of a MIDI key |
Region* RegionKeyTable[128]; ///< fast lookup for the corresponding Region of a MIDI key |
692 |
int RegionIndex; |
int RegionIndex; |
693 |
|
|
694 |
Instrument(File* pFile, RIFF::List* insList); |
Instrument(File* pFile, RIFF::List* insList, progress_t* pProgress = NULL); |
695 |
~Instrument(); |
~Instrument(); |
696 |
friend class File; |
friend class File; |
697 |
}; |
}; |
711 |
DLS::Resource::GetParent; |
DLS::Resource::GetParent; |
712 |
// overridden methods |
// overridden methods |
713 |
File(RIFF::File* pRIFF); |
File(RIFF::File* pRIFF); |
714 |
Sample* GetFirstSample(); ///< Returns a pointer to the first <i>Sample</i> object of the file, <i>NULL</i> otherwise. |
Sample* GetFirstSample(progress_t* pProgress = NULL); ///< Returns a pointer to the first <i>Sample</i> object of the file, <i>NULL</i> otherwise. |
715 |
Sample* GetNextSample(); ///< Returns a pointer to the next <i>Sample</i> object of the file, <i>NULL</i> otherwise. |
Sample* GetNextSample(); ///< Returns a pointer to the next <i>Sample</i> object of the file, <i>NULL</i> otherwise. |
716 |
Instrument* GetFirstInstrument(); ///< Returns a pointer to the first <i>Instrument</i> object of the file, <i>NULL</i> otherwise. |
Instrument* GetFirstInstrument(); ///< Returns a pointer to the first <i>Instrument</i> object of the file, <i>NULL</i> otherwise. |
717 |
Instrument* GetNextInstrument(); ///< Returns a pointer to the next <i>Instrument</i> object of the file, <i>NULL</i> otherwise. |
Instrument* GetNextInstrument(); ///< Returns a pointer to the next <i>Instrument</i> object of the file, <i>NULL</i> otherwise. |
718 |
Instrument* GetInstrument(uint index); |
Instrument* GetInstrument(uint index, progress_t* pProgress = NULL); |
719 |
~File(); |
~File(); |
720 |
protected: |
protected: |
721 |
typedef std::list<Sample*> SampleList; |
typedef std::list<Sample*> SampleList; |
726 |
InstrumentList* pInstruments; |
InstrumentList* pInstruments; |
727 |
InstrumentList::iterator InstrumentsIterator; |
InstrumentList::iterator InstrumentsIterator; |
728 |
|
|
729 |
void LoadSamples(); |
void LoadSamples(progress_t* pProgress = NULL); |
730 |
void LoadInstruments(); |
void LoadInstruments(progress_t* pProgress = NULL); |
731 |
friend class Region; |
friend class Region; |
732 |
|
|
733 |
|
std::list<RIFF::File*> ExtensionFiles; |
734 |
}; |
}; |
735 |
|
|
736 |
/** Will be thrown whenever a gig specific error occurs while trying to access a Gigasampler File. */ |
/** Will be thrown whenever a gig specific error occurs while trying to access a Gigasampler File. */ |
740 |
void PrintMessage(); |
void PrintMessage(); |
741 |
}; |
}; |
742 |
|
|
743 |
|
String libraryName(); |
744 |
|
String libraryVersion(); |
745 |
|
|
746 |
} // namespace gig |
} // namespace gig |
747 |
|
|
748 |
#endif // __GIG_H__ |
#endif // __GIG_H__ |