IpatchGigEffects

IpatchGigEffects — GigaSampler instrument parameters and effects

Stability Level

Stable, unless otherwise indicated

Synopsis

                    IpatchGigEffects;
enum                IpatchGigFilterType;
enum                IpatchGigControlType;
void                ipatch_gig_parse_effects            (IpatchFileHandle *handle,
                                                         IpatchGigEffects *effects);
void                ipatch_gig_store_effects            (IpatchFileHandle *handle,
                                                         IpatchGigEffects *effects);
void                ipatch_gig_effects_init             (IpatchGigEffects *effects);
void                ipatch_gig_effects_to_gen_array     (IpatchGigEffects *effects,
                                                         IpatchSF2GenArray *array);
guint16             ipatch_gig_to_sf2_timecents         (gint32 gig_tc);
guint16             ipatch_gig_volsust_to_sf2_centibels (guint gig_tperc);

Description

Functions and types for GigaSampler instrument parameters and effects.

Details

IpatchGigEffects

typedef struct {
  guint32 unknown1;		/* byte 0-3, always 0x0000008C? */
  guint32 unknown7;		/* byte 44-47 */
  guint32 unknown14;		/* byte 100-103 */

  guint16 unknown2;		/* byte 12-13 */
  guint16 unknown3;		/* byte 16-17 */
  guint16 unknown4;		/* byte 20-21 */
  guint16 unknown5;		/* byte 24-25 */
  guint16 unknown6;		/* byte 36-37 */
  guint16 unknown8;		/* byte 60-61 */
  guint16 unknown9;		/* byte 68-69 */
  guint16 unknown10;		/* byte 76-77 */
  guint16 unknown11;		/* byte 84-85 */
  guint16 unknown13;		/* byte 98-99 */
  guint16 unknown15;		/* byte 106-107 */
  guint16 unknown17;		/* byte 116-117 */
  guint16 unknown18;		/* byte 122-123 */
  guint16 unknown20;		/* byte 126-127 */

  guint8 unknown12;		/* byte 93 */
  guint8 unknown16;		/* byte 111 */
  guint8 unknown19;		/* byte 125 */
  guint8 unknown21;		/* byte 129 */
  guint8 unknown22;		/* byte 130 */
  guint8 unknown23;		/* byte 135 */

  /* EG1 - Volume envelope */
  guint16 eg1_pre_attack; /* 10th percent */
  guint16 eg1_sustain;		/* 10th percent */
  guint32 eg1_attack;		/* timecents */
  guint32 eg1_decay;		/* timecents */
  guint32 eg1_decay2;		/* timecents (where is the "inf" flag?) */
  guint32 eg1_release;		/* timecents */
  guint8 eg1_hold;		/* bit 8=1:true */

  /* EG2 - Filter envelope */
  guint16 eg2_pre_attack; /* 10th percent */
  guint16 eg2_sustain;		/* 10th percent */
  guint32 eg2_attack;		/* timecents */
  guint32 eg2_decay;		/* timecents */
  guint32 eg2_decay2;		/* timecents */
  guint32 eg2_release;		/* timecents */

  /* EG3 - Pitch envelope */
  guint32 eg3_attack;		/* timecents */
  guint16 eg3_depth;		/* 12 bit signed (cents) */

  /* LFO1 - Volume LFO */
  guint16 lfo1_internal_depth; /* 0-1200 */
  guint32 lfo1_freq;		/* pitch cents */
  guint16 lfo1_ctrl_depth; /* 0-1200 */
  guint8 lfo1_ctrl;
  /* 0=internal, 1=mod wheel, 2=breath ctrl, 3=internal/mod wheel,
     4=internal/breath ctrl */
  /* bit 8=1:flip phase */
  /* bit 7=1:synch */
  /* bits 5 en 6: Res midictrl: 0=18, 1=19, 2=80, 3=81 */

  /* LFO2 - Filter LFO */
  guint8 lfo2_ctrl;
  /* 0=internal, 1=mod wheel, 2=breath ctrl, 3=internal/mod wheel,
     4=internal/breath ctrl */
  /* bit 6=1:synch */
  /* bit 8=1:flip phase */
  /* bit 7=1:Resonance midi ctrl */

  guint32 lfo2_freq;		/* pitch cents */
  guint16 lfo2_internal_depth; /* 0-1200 */
  guint16 lfo2_ctrl_depth; /* 0-1200 */

  /* LFO3 - Pitch LFO */
  guint32 lfo3_freq;		/* pitch cents */
  guint16 lfo3_internal_depth; /* cents */
  guint16 lfo3_ctrl_depth; /* cents */
  guint8 lfo3_ctrl; /* bit 6: LFO3 synch  bit 8:invert attentuation ctrl */


  /* filter parameters */
  guint8 filter_type; /* 0=lowpass, 1=bandpass, 2=highpass, 3=bandreject */
  guint8 turbo_lowpass; /* bit 7=0: on */
  guint8 filter_cutoff; /* bit 8=1:on */
  guint8 filter_midi_ctrl; /* bit 8=1:use ctrl  rest 0:aftertouch */
  guint8 filter_vel_scale;
  guint8 filter_resonance; /* bit 8=0:dynamic */
  guint8 filter_breakpoint; /* bit 8=1:keyboard tracking */

  /* velocity parameters */
  guint8 vel_response; /* 0-4 = nonlinear, 5-9 = linear, 10-14 = special */
  guint8 vel_dyn_range;

  /* release velocity paramaters */
  guint8 release_vel_response; /* 0-4 = nonlinear, 5-9 = linear, 10-14 = special */
  /* release velocity dynamic range? */

  guint8 release_trigger_decay;

  guint8 attn_ctrl;	      /* bit 1:on, rest=ctrl, 0xFF=velocity */
  guint8 max_velocity;		/* Used for velocity split */

  guint16 sample_offset;
  guint8 pitch_track_dim_bypass; /* bit 0=0: pitch track */
				/* 0x10/0x20=dim bypass ctrl 94/95 */
  guint8 layer_pan;		/* 7-bit signed */
  guint8 self_mask;		/* 1=true */
  guint8 channel_offset; /* (*4) */
  guint8 sust_defeat;		/* 2=on */
} IpatchGigEffects;

enum IpatchGigFilterType

typedef enum
{
  IPATCH_GIG_FILTER_LOWPASS = 0,
  IPATCH_GIG_FILTER_BANDPASS = 1,
  IPATCH_GIG_FILTER_HIGHPASS = 2,
  IPATCH_GIG_FILTER_BANDREJECT = 3
} IpatchGigFilterType;

enum IpatchGigControlType

typedef enum
{
  IPATCH_GIG_CTRL_MOD_WHEEL       = 0x01,
  IPATCH_GIG_CTRL_BREATH          = 0x02,
  IPATCH_GIG_CTRL_FOOT            = 0x04,
  IPATCH_GIG_CTRL_PORTAMENTO_TIME = 0x05,
  IPATCH_GIG_CTRL_EFFECT_1        = 0x0C,
  IPATCH_GIG_CTRL_EFFECT_2        = 0x0D,
  IPATCH_GIG_CTRL_GEN_PURPOSE_1   = 0x10,
  IPATCH_GIG_CTRL_GEN_PURPOSE_2   = 0x11,
  IPATCH_GIG_CTRL_GEN_PURPOSE_3   = 0x12,
  IPATCH_GIG_CTRL_GEN_PURPOSE_4   = 0x13,
  IPATCH_GIG_CTRL_SUSTAIN_PEDAL   = 0x40,
  IPATCH_GIG_CTRL_PORTAMENTO      = 0x41,
  IPATCH_GIG_CTRL_SOSTENUTO       = 0x42,
  IPATCH_GIG_CTRL_SOFT_PEDAL      = 0x43,
  IPATCH_GIG_CTRL_GEN_PURPOSE_5   = 0x50,
  IPATCH_GIG_CTRL_GEN_PURPOSE_6   = 0x51,
  IPATCH_GIG_CTRL_GEN_PURPOSE_7   = 0x52,
  IPATCH_GIG_CTRL_GEN_PURPOSE_8   = 0x53,
  IPATCH_GIG_CTRL_EFFECT_DEPTH_1  = 0x5B,
  IPATCH_GIG_CTRL_EFFECT_DEPTH_2  = 0x5C,
  IPATCH_GIG_CTRL_EFFECT_DEPTH_3  = 0x5D,
  IPATCH_GIG_CTRL_EFFECT_DEPTH_4  = 0x5E,
  IPATCH_GIG_CTRL_EFFECT_DEPTH_5  = 0x5F
} IpatchGigControlType;

ipatch_gig_parse_effects ()

void                ipatch_gig_parse_effects            (IpatchFileHandle *handle,
                                                         IpatchGigEffects *effects);

Parse an 3ewa GigaSampler effects chunk into a structure.

handle :

File handle containing buffered 3ewa data

effects :

Pointer to a user supplied GigaSampler effects structure to fill

ipatch_gig_store_effects ()

void                ipatch_gig_store_effects            (IpatchFileHandle *handle,
                                                         IpatchGigEffects *effects);

ipatch_gig_effects_init ()

void                ipatch_gig_effects_init             (IpatchGigEffects *effects);

Initialize GigaSampler effects structure to default values.

effects :

GigaSampler effects structure

ipatch_gig_effects_to_gen_array ()

void                ipatch_gig_effects_to_gen_array     (IpatchGigEffects *effects,
                                                         IpatchSF2GenArray *array);

Convert GigaSampler effects structure to SoundFont generator array

effects :

GigaSampler effects structure

array :

SoundFont generator array

ipatch_gig_to_sf2_timecents ()

guint16             ipatch_gig_to_sf2_timecents         (gint32 gig_tc);

Convert GigaSampler timecents to SoundFont timecents.

gig_tc :

Amount in GigaSampler timecents

Returns :

SoundFont timecent value

ipatch_gig_volsust_to_sf2_centibels ()

guint16             ipatch_gig_volsust_to_sf2_centibels (guint gig_tperc);

Convert GigaSampler volume sustain (tenth percent units) to centibels (10th of a decibel).

gig_tperc :

Tenth percent sustain level

Returns :

SoundFont centibels value