|  | /*************************************************************************************
 * Original code copyright (C) 2012 Steve Folta
 * Converted to Juce module (C) 2016 Leo Olivers
 * Forked from https://github.com/stevefolta/SFZero
 * For license info please see the LICENSE file distributed with this source code
 *************************************************************************************/
#ifndef SFZREGION_H_INCLUDED
#define SFZREGION_H_INCLUDED
#include "SFZCommon.h"
#include "water/text/String.h"
namespace sfzero
{
class Sample;
// Region is designed to be able to be bitwise-copied.
struct EGParameters
{
  float delay, start, attack, hold, decay, sustain, release;
  void clear();
  void clearMod();
};
struct Region
{
  enum Trigger
  {
    attack,
    release,
    first,
    legato
  };
  enum LoopMode
  {
    sample_loop,
    no_loop,
    one_shot,
    loop_continuous,
    loop_sustain
  };
  enum OffMode
  {
    fast,
    normal
  };
  Region();
  void clear();
  water::String dump();
  bool matches(int note, int velocity, Trigger trig)
  {
    return (note >= lokey && note <= hikey && velocity >= lovel && velocity <= hivel &&
            (trig == this->trigger || (this->trigger == attack && (trig == first || trig == legato))));
  }
  Sample *sample;
  int lokey, hikey;
  int lovel, hivel;
  Trigger trigger;
  int group;
  water::int64 off_by;
  OffMode off_mode;
  water::int64 offset;
  water::int64 end;
  bool negative_end;
  LoopMode loop_mode;
  water::int64 loop_start, loop_end;
  int transpose;
  int tune;
  int pitch_keycenter, pitch_keytrack;
  int bend_up, bend_down;
  float volume, pan;
  float amp_veltrack;
  EGParameters ampeg, ampeg_veltrack;
  static float timecents2Secs(int timecents);
};
}
#endif // SFZREGION_H_INCLUDED
 |