Support the opcode oscillator_quality
This commit is contained in:
parent
c9b4687661
commit
80736aec99
4 changed files with 13 additions and 0 deletions
|
|
@ -67,6 +67,8 @@ namespace Default
|
|||
constexpr Range<int> oscillatorMultiRange { 1, config::oscillatorsPerVoice };
|
||||
constexpr float oscillatorDetune { 0 };
|
||||
constexpr Range<float> oscillatorDetuneRange { -9600, 9600 };
|
||||
constexpr int oscillatorQuality { 1 };
|
||||
constexpr Range<int> oscillatorQualityRange { 0, 3 };
|
||||
|
||||
// Instrument setting: voice lifecycle
|
||||
constexpr uint32_t group { 0 };
|
||||
|
|
|
|||
|
|
@ -135,6 +135,12 @@ bool sfz::Region::parseOpcode(const Opcode& rawOpcode)
|
|||
case hash("oscillator_detune"):
|
||||
setValueFromOpcode(opcode, oscillatorDetune, Default::oscillatorDetuneRange);
|
||||
break;
|
||||
case hash("oscillator_quality"):
|
||||
if (opcode.value == "-1")
|
||||
oscillatorQuality.reset();
|
||||
else
|
||||
setValueFromOpcode(opcode, oscillatorQuality, Default::oscillatorQualityRange);
|
||||
break;
|
||||
|
||||
// Instrument settings: voice lifecycle
|
||||
case hash("group"): // also polyphony_group
|
||||
|
|
|
|||
|
|
@ -276,6 +276,7 @@ struct Region {
|
|||
bool oscillator = false;
|
||||
int oscillatorMulti = Default::oscillatorMulti;
|
||||
float oscillatorDetune = Default::oscillatorDetune;
|
||||
absl::optional<int> oscillatorQuality;
|
||||
|
||||
// Instrument settings: voice lifecycle
|
||||
uint32_t group { Default::group }; // group
|
||||
|
|
|
|||
|
|
@ -65,16 +65,20 @@ void sfz::Voice::startVoice(Region* region, int delay, int number, float value,
|
|||
wave = resources.wavePool.getWaveSaw();
|
||||
break;
|
||||
}
|
||||
const int quality = region->oscillatorQuality ? *region->oscillatorQuality : Default::oscillatorQuality;
|
||||
for (WavetableOscillator& osc : waveOscillators) {
|
||||
osc.setWavetable(wave);
|
||||
osc.setPhase(region->getPhase());
|
||||
osc.setQuality(quality);
|
||||
}
|
||||
setupOscillatorUnison();
|
||||
} else if (region->oscillator) {
|
||||
const WavetableMulti* wave = resources.wavePool.getFileWave(region->sampleId.filename());
|
||||
const int quality = region->oscillatorQuality ? *region->oscillatorQuality : Default::oscillatorQuality;
|
||||
for (WavetableOscillator& osc : waveOscillators) {
|
||||
osc.setWavetable(wave);
|
||||
osc.setPhase(region->getPhase());
|
||||
osc.setQuality(quality);
|
||||
}
|
||||
setupOscillatorUnison();
|
||||
} else {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue