#pragma once #include "Range.h" #include #include enum class SfzTrigger { attack, release, release_key, first, legato }; enum class SfzLoopMode { no_loop, one_shot, loop_continuous, loop_sustain }; enum class SfzOffMode { fast, normal }; enum class SfzVelocityOverride { current, previous }; enum class SfzCrossfadeCurve { gain, power }; namespace sfz { namespace Default { // The categories match http://sfzformat.com/ // ******* SFZ 1 ******* // Sound source: sample playback inline constexpr float delay { 0.0 }; inline constexpr float delayRandom { 0.0 }; inline constexpr Range delayRange { 0.0, 100.0 }; inline constexpr uint32_t offset { 0 }; inline constexpr uint32_t offsetRandom { 0 }; inline constexpr Range offsetRange { 0, std::numeric_limits::max() }; inline constexpr Range sampleEndRange { 0, std::numeric_limits::max() }; inline constexpr Range sampleCountRange { 0, std::numeric_limits::max() }; inline constexpr SfzLoopMode loopMode { SfzLoopMode::no_loop }; inline constexpr Range loopRange { 0, std::numeric_limits::max() }; // Instrument setting: voice lifecycle inline constexpr uint32_t group { 0 }; inline constexpr Range groupRange { 0, std::numeric_limits::max() }; inline constexpr SfzOffMode offMode { SfzOffMode::fast }; // Region logic: key mapping inline constexpr Range keyRange { 0, 127 }; inline constexpr Range velocityRange { 0, 127 }; // Region logic: MIDI conditions inline constexpr Range channelRange { 1, 16 }; inline constexpr Range ccRange { 0, 127 }; inline constexpr uint8_t cc { 0 }; inline constexpr Range bendRange { -8192, 8192 }; inline constexpr int bend { 0 }; inline constexpr SfzVelocityOverride velocityOverride { SfzVelocityOverride::current }; // Region logic: internal conditions inline constexpr Range randRange { 0.0, 1.0 }; inline constexpr Range aftertouchRange { 0, 127 }; inline constexpr uint8_t aftertouch { 0 }; inline constexpr Range bpmRange { 0.0, 500.0 }; inline constexpr float bpm { 120.0 }; inline constexpr uint8_t sequenceLength{ 1 }; inline constexpr uint8_t sequencePosition{ 1 }; inline constexpr Range sequenceRange { 1, 100 }; // Region logic: Triggers inline constexpr SfzTrigger trigger { SfzTrigger::attack }; inline constexpr Range ccTriggerValueRange{ 0, 127 }; // Performance parameters: amplifier inline constexpr float volume { 0.0 }; inline constexpr Range volumeRange { -144.0, 6.0 }; inline constexpr Range volumeCCRange { -144.0, 6.0 }; inline constexpr float amplitude { 100.0 }; inline constexpr Range amplitudeRange { 0.0, 100.0 }; inline constexpr float pan { 0.0 }; inline constexpr Range panRange { -100.0, 100.0 }; inline constexpr Range panCCRange { -200.0, 200.0 }; inline constexpr float position { 0.0 }; inline constexpr Range positionRange { -100.0, 100.0 }; inline constexpr Range positionCCRange { -200.0, 200.0 }; inline constexpr float width { 0.0 }; inline constexpr Range widthRange { -100.0, 100.0 }; inline constexpr Range widthCCRange { -200.0, 200.0 }; inline constexpr uint8_t ampKeycenter { 60 }; inline constexpr float ampKeytrack { 0.0 }; inline constexpr Range ampKeytrackRange { -96, 12 }; inline constexpr float ampVeltrack { 100.0 }; inline constexpr Range ampVeltrackRange { -100.0, 100.0 }; inline constexpr Range ampVelcurveRange { 0.0, 1.0 }; inline constexpr float ampRandom { 0.0 }; inline constexpr Range ampRandomRange { 0.0, 24.0 }; inline constexpr Range crossfadeKeyInRange { 0, 0 }; inline constexpr Range crossfadeKeyOutRange { 127, 127 }; inline constexpr Range crossfadeVelInRange { 0, 0 }; inline constexpr Range crossfadeVelOutRange { 127, 127 }; inline constexpr SfzCrossfadeCurve crossfadeKeyCurve { SfzCrossfadeCurve::power }; inline constexpr SfzCrossfadeCurve crossfadeVelCurve { SfzCrossfadeCurve::power }; // Performance parameters: pitch inline constexpr uint8_t pitchKeycenter { 60 }; inline constexpr int pitchKeytrack { 100 }; inline constexpr Range pitchKeytrackRange { -1200, 1200 }; inline constexpr int pitchRandom { 0 }; inline constexpr Range pitchRandomRange { 0, 9600 }; inline constexpr int pitchVeltrack { 0 }; inline constexpr Range pitchVeltrackRange { -9600, 9600 }; inline constexpr int transpose { 0 }; inline constexpr Range transposeRange { -127, 127 }; inline constexpr int tune { 0 }; inline constexpr Range tuneRange { -100, 100 }; // Envelope generators inline constexpr float attack { 0 }; inline constexpr float decay { 0 }; inline constexpr float delayEG { 0 }; inline constexpr float hold { 0 }; inline constexpr float release { 0 }; inline constexpr float start { 0.0 }; inline constexpr float sustain { 100.0 }; inline constexpr float vel2sustain { 0.0 }; inline constexpr int depth { 0 }; inline constexpr Range egTimeRange { 0.0, 100.0 }; inline constexpr Range egPercentRange { 0.0, 100.0 }; inline constexpr Range egDepthRange { -12000, 12000 }; inline constexpr Range egOnCCTimeRange { -100.0, 100.0 }; inline constexpr Range egOnCCPercentRange { -100.0, 100.0 }; } }