2 |
* * |
* * |
3 |
* libgig - C++ cross-platform Gigasampler format file access library * |
* libgig - C++ cross-platform Gigasampler format file access library * |
4 |
* * |
* * |
5 |
* Copyright (C) 2003-2018 by Christian Schoenebeck * |
* Copyright (C) 2003-2019 by Christian Schoenebeck * |
6 |
* <cuse@users.sourceforge.net> * |
* <cuse@users.sourceforge.net> * |
7 |
* * |
* * |
8 |
* This library is free software; you can redistribute it and/or modify * |
* This library is free software; you can redistribute it and/or modify * |
148 |
curve_type_unknown = 0xffffffff /**< Unknown curve type. */ |
curve_type_unknown = 0xffffffff /**< Unknown curve type. */ |
149 |
); |
); |
150 |
|
|
151 |
|
/** Defines the wave form type used by an LFO (gig format extension). |
152 |
|
* |
153 |
|
* This is a gig format extension. The original Gigasampler/GigaStudio |
154 |
|
* software always used a sine (sinus) wave form for all its 3 LFOs, so this |
155 |
|
* was not configurable in the original gig format. Accordingly setting any |
156 |
|
* other wave form than sine (sinus) will be ignored by the original |
157 |
|
* Gigasampler/GigaStudio software. |
158 |
|
* |
159 |
|
* @see enumCount(), enumKey(), enumKeys(), enumValue() |
160 |
|
*/ |
161 |
|
GIG_DECLARE_ENUM(lfo_wave_t, |
162 |
|
lfo_wave_sine = 0, /**< Sine (sinus) wave form (this is the default wave form). */ |
163 |
|
lfo_wave_triangle = 1, /**< Triangle wave form. */ |
164 |
|
lfo_wave_saw = 2, /**< Saw (up) wave form (saw down wave form can be achieved by flipping the phase). */ |
165 |
|
lfo_wave_square = 3, /**< Square wave form. */ |
166 |
|
); |
167 |
|
|
168 |
/** Dimensions allow to bypass one of the following controllers. |
/** Dimensions allow to bypass one of the following controllers. |
169 |
* |
* |
170 |
* @see enumCount(), enumKey(), enumKeys(), enumValue() |
* @see enumCount(), enumKey(), enumKeys(), enumValue() |
355 |
float 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. |
356 |
}; |
}; |
357 |
|
|
358 |
/** Defines which frequencies are filtered by the VCF. |
/** Audio filter types. |
359 |
|
* |
360 |
|
* The first 5 filter types are the ones which exist in GigaStudio, and |
361 |
|
* which are very accurately modeled on LinuxSampler side such that they |
362 |
|
* would sound with LinuxSampler exactly as with GigaStudio. |
363 |
|
* |
364 |
|
* The other filter types listed here are extensions to the gig format and |
365 |
|
* are LinuxSampler specific filter type implementations. Note that none of |
366 |
|
* these are duplicates of the GigaStudio filter types. For instance |
367 |
|
* @c vcf_type_lowpass (GigaStudio) and @c vcf_type_lowpass_2p |
368 |
|
* (LinuxSampler) are both lowpass filters with 2 poles, however they do |
369 |
|
* sound differently. |
370 |
* |
* |
371 |
* @see enumCount(), enumKey(), enumKeys(), enumValue() |
* @see enumCount(), enumKey(), enumKeys(), enumValue() |
372 |
*/ |
*/ |
373 |
GIG_DECLARE_ENUM(vcf_type_t, |
GIG_DECLARE_ENUM(vcf_type_t, |
374 |
vcf_type_lowpass = 0x00, /**< Standard lowpass filter type. */ |
vcf_type_lowpass = 0x00, /**< Standard lowpass filter type (GigaStudio). */ |
375 |
vcf_type_lowpassturbo = 0xff, /**< More poles than normal lowpass. */ |
vcf_type_lowpassturbo = 0xff, /**< More poles than normal lowpass (GigaStudio). */ |
376 |
vcf_type_bandpass = 0x01, /**< Bandpass filter type. */ |
vcf_type_bandpass = 0x01, /**< Bandpass filter type (GigaStudio). */ |
377 |
vcf_type_highpass = 0x02, /**< Highpass filter type. */ |
vcf_type_highpass = 0x02, /**< Highpass filter type (GigaStudio). */ |
378 |
vcf_type_bandreject = 0x03 /**< Band reject filter type. */ |
vcf_type_bandreject = 0x03, /**< Band reject filter type (GigaStudio). */ |
379 |
|
vcf_type_lowpass_1p = 0x11, /**< [gig extension]: 1-pole lowpass filter type (LinuxSampler). */ |
380 |
|
vcf_type_lowpass_2p = 0x12, /**< [gig extension]: 2-pole lowpass filter type (LinuxSampler). */ |
381 |
|
vcf_type_lowpass_4p = 0x14, /**< [gig extension]: 4-pole lowpass filter type (LinuxSampler). */ |
382 |
|
vcf_type_lowpass_6p = 0x16, /**< [gig extension]: 6-pole lowpass filter type (LinuxSampler). */ |
383 |
|
vcf_type_highpass_1p = 0x21, /**< [gig extension]: 1-pole highpass filter type (LinuxSampler). */ |
384 |
|
vcf_type_highpass_2p = 0x22, /**< [gig extension]: 2-pole highpass filter type (LinuxSampler). */ |
385 |
|
vcf_type_highpass_4p = 0x24, /**< [gig extension]: 4-pole highpass filter type (LinuxSampler). */ |
386 |
|
vcf_type_highpass_6p = 0x26, /**< [gig extension]: 6-pole highpass filter type (LinuxSampler). */ |
387 |
|
vcf_type_bandpass_2p = 0x32, /**< [gig extension]: 2-pole bandpass filter type (LinuxSampler). */ |
388 |
|
vcf_type_bandreject_2p = 0x42 /**< [gig extension]: 2-pole bandreject filter type (LinuxSampler). */ |
389 |
); |
); |
390 |
|
|
391 |
/** |
/** |
471 |
GIG_DECLARE_ENUM(sust_rel_trg_t, |
GIG_DECLARE_ENUM(sust_rel_trg_t, |
472 |
sust_rel_trg_none = 0x00, /**< No release triggered sample(s) are played on sustain pedal up (default). */ |
sust_rel_trg_none = 0x00, /**< No release triggered sample(s) are played on sustain pedal up (default). */ |
473 |
sust_rel_trg_maxvelocity = 0x01, /**< Play release trigger sample(s) on sustain pedal up, and simply use 127 as MIDI velocity for playback. */ |
sust_rel_trg_maxvelocity = 0x01, /**< Play release trigger sample(s) on sustain pedal up, and simply use 127 as MIDI velocity for playback. */ |
474 |
sust_rel_trg_keyvelocity = 0x02 /**< Play release trigger sample(s) on sustain pedal up, and use the key's last MIDI note-on velocity for playback. */ |
sust_rel_trg_keyvelocity = 0x02 /**< Play release trigger sample(s) on sustain pedal up, and use the key`s last MIDI note-on velocity for playback. */ |
475 |
); |
); |
476 |
|
|
477 |
// just symbol prototyping |
// just symbol prototyping |
543 |
uint8_t EG1ControllerAttackInfluence; ///< Amount EG1 Controller has influence on the EG1 Attack time (0 - 3, where 0 means off). |
uint8_t EG1ControllerAttackInfluence; ///< Amount EG1 Controller has influence on the EG1 Attack time (0 - 3, where 0 means off). |
544 |
uint8_t EG1ControllerDecayInfluence; ///< Amount EG1 Controller has influence on the EG1 Decay time (0 - 3, where 0 means off). |
uint8_t EG1ControllerDecayInfluence; ///< Amount EG1 Controller has influence on the EG1 Decay time (0 - 3, where 0 means off). |
545 |
uint8_t EG1ControllerReleaseInfluence; ///< Amount EG1 Controller has influence on the EG1 Release time (0 - 3, where 0 means off). |
uint8_t EG1ControllerReleaseInfluence; ///< Amount EG1 Controller has influence on the EG1 Release time (0 - 3, where 0 means off). |
546 |
|
lfo_wave_t LFO1WaveForm; ///< [gig extension]: The fundamental wave form to be used by the amplitude LFO, e.g. sine, triangle, saw, square (default: sine). |
547 |
double LFO1Frequency; ///< Frequency of the sample amplitude LFO (0.10 - 10.00 Hz). |
double LFO1Frequency; ///< Frequency of the sample amplitude LFO (0.10 - 10.00 Hz). |
548 |
|
double LFO1Phase; ///< [gig extension]: Phase displacement of the amplitude LFO's wave form (0.0° - 360.0°). |
549 |
uint16_t LFO1InternalDepth; ///< Firm pitch of the sample amplitude LFO (0 - 1200 cents). |
uint16_t LFO1InternalDepth; ///< Firm pitch of the sample amplitude LFO (0 - 1200 cents). |
550 |
uint16_t LFO1ControlDepth; ///< Controller depth influencing sample amplitude LFO pitch (0 - 1200 cents). |
uint16_t LFO1ControlDepth; ///< Controller depth influencing sample amplitude LFO pitch (0 - 1200 cents). |
551 |
lfo1_ctrl_t LFO1Controller; ///< MIDI Controller which controls sample amplitude LFO. |
lfo1_ctrl_t LFO1Controller; ///< MIDI Controller which controls sample amplitude LFO. |
552 |
bool LFO1FlipPhase; ///< Inverts phase of the sample amplitude LFO wave. |
bool LFO1FlipPhase; ///< Inverts the polarity of the sample amplitude LFO wave, so it flips the wave form vertically. |
553 |
bool LFO1Sync; ///< If set to <i>true</i> only one LFO should be used for all voices. |
bool LFO1Sync; ///< If set to <i>true</i> only one LFO should be used for all voices. |
554 |
// Filter Cutoff Frequency EG/LFO |
// Filter Cutoff Frequency EG/LFO |
555 |
uint16_t EG2PreAttack; ///< Preattack value of the filter cutoff EG (0 - 1000 permille). |
uint16_t EG2PreAttack; ///< Preattack value of the filter cutoff EG (0 - 1000 permille). |
564 |
uint8_t EG2ControllerAttackInfluence; ///< Amount EG2 Controller has influence on the EG2 Attack time (0 - 3, where 0 means off). |
uint8_t EG2ControllerAttackInfluence; ///< Amount EG2 Controller has influence on the EG2 Attack time (0 - 3, where 0 means off). |
565 |
uint8_t EG2ControllerDecayInfluence; ///< Amount EG2 Controller has influence on the EG2 Decay time (0 - 3, where 0 means off). |
uint8_t EG2ControllerDecayInfluence; ///< Amount EG2 Controller has influence on the EG2 Decay time (0 - 3, where 0 means off). |
566 |
uint8_t EG2ControllerReleaseInfluence; ///< Amount EG2 Controller has influence on the EG2 Release time (0 - 3, where 0 means off). |
uint8_t EG2ControllerReleaseInfluence; ///< Amount EG2 Controller has influence on the EG2 Release time (0 - 3, where 0 means off). |
567 |
|
lfo_wave_t LFO2WaveForm; ///< [gig extension]: The fundamental wave form to be used by the filter cutoff LFO, e.g. sine, triangle, saw, square (default: sine). |
568 |
double LFO2Frequency; ///< Frequency of the filter cutoff LFO (0.10 - 10.00 Hz). |
double LFO2Frequency; ///< Frequency of the filter cutoff LFO (0.10 - 10.00 Hz). |
569 |
|
double LFO2Phase; ///< [gig extension]: Phase displacement of the filter cutoff LFO's wave form (0.0° - 360.0°). |
570 |
uint16_t LFO2InternalDepth; ///< Firm pitch of the filter cutoff LFO (0 - 1200 cents). |
uint16_t LFO2InternalDepth; ///< Firm pitch of the filter cutoff LFO (0 - 1200 cents). |
571 |
uint16_t LFO2ControlDepth; ///< Controller depth influencing filter cutoff LFO pitch (0 - 1200). |
uint16_t LFO2ControlDepth; ///< Controller depth influencing filter cutoff LFO pitch (0 - 1200). |
572 |
lfo2_ctrl_t LFO2Controller; ///< MIDI Controlle which controls the filter cutoff LFO. |
lfo2_ctrl_t LFO2Controller; ///< MIDI Controlle which controls the filter cutoff LFO. |
573 |
bool LFO2FlipPhase; ///< Inverts phase of the filter cutoff LFO wave. |
bool LFO2FlipPhase; ///< Inverts the polarity of the filter cutoff LFO wave, so it flips the wave form vertically. |
574 |
bool LFO2Sync; ///< If set to <i>true</i> only one LFO should be used for all voices. |
bool LFO2Sync; ///< If set to <i>true</i> only one LFO should be used for all voices. |
575 |
// Sample Pitch EG/LFO |
// Sample Pitch EG/LFO |
576 |
double EG3Attack; ///< Attack time of the sample pitch EG (0.000 - 10.000s). |
double EG3Attack; ///< Attack time of the sample pitch EG (0.000 - 10.000s). |
577 |
int16_t EG3Depth; ///< Depth of the sample pitch EG (-1200 - +1200). |
int16_t EG3Depth; ///< Depth of the sample pitch EG (-1200 - +1200). |
578 |
|
lfo_wave_t LFO3WaveForm; ///< [gig extension]: The fundamental wave form to be used by the pitch LFO, e.g. sine, triangle, saw, square (default: sine). |
579 |
double LFO3Frequency; ///< Frequency of the sample pitch LFO (0.10 - 10.00 Hz). |
double LFO3Frequency; ///< Frequency of the sample pitch LFO (0.10 - 10.00 Hz). |
580 |
|
double LFO3Phase; ///< [gig extension]: Phase displacement of the pitch LFO's wave form (0.0° - 360.0°). |
581 |
int16_t LFO3InternalDepth; ///< Firm depth of the sample pitch LFO (-1200 - +1200 cents). |
int16_t LFO3InternalDepth; ///< Firm depth of the sample pitch LFO (-1200 - +1200 cents). |
582 |
int16_t LFO3ControlDepth; ///< Controller depth of the sample pitch LFO (-1200 - +1200 cents). |
int16_t LFO3ControlDepth; ///< Controller depth of the sample pitch LFO (-1200 - +1200 cents). |
583 |
lfo3_ctrl_t LFO3Controller; ///< MIDI Controller which controls the sample pitch LFO. |
lfo3_ctrl_t LFO3Controller; ///< MIDI Controller which controls the sample pitch LFO. |
584 |
|
bool LFO3FlipPhase; ///< [gig extension]: Inverts the polarity of the pitch LFO wave, so it flips the wave form vertically (@b NOTE: this setting for LFO3 is a gig format extension; flipping the polarity was only available for LFO1 and LFO2 in the original Gigasampler/GigaStudio software). |
585 |
bool LFO3Sync; ///< If set to <i>true</i> only one LFO should be used for all voices. |
bool LFO3Sync; ///< If set to <i>true</i> only one LFO should be used for all voices. |
586 |
// Filter |
// Filter |
587 |
bool VCFEnabled; ///< If filter should be used. |
bool VCFEnabled; ///< If filter should be used. |
776 |
double* GetCutoffVelocityTable(curve_type_t vcfVelocityCurve, uint8_t vcfVelocityDynamicRange, uint8_t vcfVelocityScale, vcf_cutoff_ctrl_t vcfCutoffController); |
double* GetCutoffVelocityTable(curve_type_t vcfVelocityCurve, uint8_t vcfVelocityDynamicRange, uint8_t vcfVelocityScale, vcf_cutoff_ctrl_t vcfCutoffController); |
777 |
double* GetVelocityTable(curve_type_t curveType, uint8_t depth, uint8_t scaling); |
double* GetVelocityTable(curve_type_t curveType, uint8_t depth, uint8_t scaling); |
778 |
double* CreateVelocityTable(curve_type_t curveType, uint8_t depth, uint8_t scaling); |
double* CreateVelocityTable(curve_type_t curveType, uint8_t depth, uint8_t scaling); |
779 |
|
bool UsesAnyGigFormatExtension() const; |
780 |
}; |
}; |
781 |
|
|
782 |
/** @brief Encapsulates sample waves of Gigasampler/GigaStudio files used for playback. |
/** @brief Encapsulates sample waves of Gigasampler/GigaStudio files used for playback. |
1409 |
using DLS::File::Save; |
using DLS::File::Save; |
1410 |
using DLS::File::GetFileName; |
using DLS::File::GetFileName; |
1411 |
using DLS::File::SetFileName; |
using DLS::File::SetFileName; |
1412 |
|
using DLS::File::GetRiffFile; |
1413 |
// overridden methods |
// overridden methods |
1414 |
File(); |
File(); |
1415 |
File(RIFF::File* pRIFF); |
File(RIFF::File* pRIFF); |