## IpatchDLS2Region IpatchDLS2Region — DLS region object |

## Stability Level

Stable, unless otherwise indicated

## Synopsis

                        IpatchDLS2ParamArray;
    enum                IpatchDLS2Param;
                        IpatchDLS2Region;
    enum                IpatchDLS2RegionChannelType;
    #define             IPATCH_DLS2_REGION_CHANNEL_MONO
    enum                IpatchDLS2RegionFlags;
    #define             IPATCH_DLS2_REGION_FLAG_MASK
    #define             IPATCH_DLS2_REGION_UNUSED_FLAG_SHIFT
    IpatchDLS2Region *  ipatch_dls2_region_new              (void);
    IpatchDLS2Region *  ipatch_dls2_region_first            (IpatchIter *iter);
    IpatchDLS2Region *  ipatch_dls2_region_next             (IpatchIter *iter);
    char *              ipatch_dls2_region_get_info         (IpatchDLS2Region *region,
                                                             guint32 fourcc);
    void                ipatch_dls2_region_set_info         (IpatchDLS2Region *region,
                                                             guint32 fourcc,
                                                             const char *val);
    void                ipatch_dls2_region_set_sample       (IpatchDLS2Region *region,
                                                             IpatchDLS2Sample *sample);
    IpatchDLS2Sample *  ipatch_dls2_region_get_sample       (IpatchDLS2Region *region);
    IpatchDLS2Sample *  ipatch_dls2_region_peek_sample      (IpatchDLS2Region *region);
    void                ipatch_dls2_region_set_note_range   (IpatchDLS2Region *region,
                                                             int low,
                                                             int high);
    void                ipatch_dls2_region_set_velocity_range
                                                            (IpatchDLS2Region *region,
                                                             int low,
                                                             int high);
    gboolean            ipatch_dls2_region_in_range         (IpatchDLS2Region *region,
                                                             int note,
                                                             int velocity);
    void                ipatch_dls2_region_set_param        (IpatchDLS2Region *region,
                                                             IpatchDLS2Param param,
                                                             gint32 val);
    void                ipatch_dls2_region_set_param_array  (IpatchDLS2Region *region,
                                                             IpatchDLS2ParamArray *array);
    GSList *            ipatch_dls2_region_get_conns        (IpatchDLS2Region *region);
    void                ipatch_dls2_region_set_conn         (IpatchDLS2Region *region,
                                                             const IpatchDLS2Conn *conn);
    void                ipatch_dls2_region_unset_conn       (IpatchDLS2Region *region,
                                                             const IpatchDLS2Conn *conn);
    void                ipatch_dls2_region_unset_all_conns  (IpatchDLS2Region *region);
    guint               ipatch_dls2_region_conn_count       (IpatchDLS2Region *region);
    int                 ipatch_dls2_region_channel_map_stereo
                                                            (IpatchDLS2RegionChannelType chan);

## Object Hierarchy

      GObject
       +----IpatchItem
             +----IpatchDLS2Region

## Implemented Interfaces

IpatchDLS2Region implements IpatchSample.

## Properties

      "archive-location"         gchar*                : Read / Write
      "artist"                   gchar*                : Read / Write
      "channel"                  gint                  : Read / Write
      "comment"                  gchar*                : Read / Write
      "commissioned"             gchar*                : Read / Write
      "copyright"                gchar*                : Read / Write
      "date"                     gchar*                : Read / Write
      "engineer"                 gchar*                : Read / Write
      "fine-tune"                gint                  : Read / Write
      "flags"                    IpatchDLS2SampleFlags  : Read / Write
      "gain"                     gint                  : Read / Write
      "genre"                    gchar*                : Read / Write
      "key-group"                gint                  : Read / Write
      "keywords"                 gchar*                : Read / Write
      "layer-group"              gint                  : Read / Write
      "link-item"                IpatchDLS2Sample*     : Read / Write
      "loop-end"                 guint                 : Read / Write
      "loop-start"               guint                 : Read / Write
      "loop-type"                IpatchSampleLoopType  : Read / Write
      "medium"                   gchar*                : Read / Write
      "multi-channel"            gboolean              : Read / Write
      "name"                     gchar*                : Read / Write
      "note-range"               IpatchRange*          : Read / Write
      "phase-group"              gint                  : Read / Write
      "phase-master"             gboolean              : Read / Write
      "product"                  gchar*                : Read / Write
      "root-note"                gint                  : Read / Write
      "sample-info-override"     gboolean              : Read / Write
      "self-non-exclusive"       gboolean              : Read / Write
      "software"                 gchar*                : Read / Write
      "source"                   gchar*                : Read / Write
      "source-form"              gchar*                : Read / Write
      "subject"                  gchar*                : Read / Write
      "technician"               gchar*                : Read / Write
      "velocity-range"           IpatchRange*          : Read / Write

## Description

DLS regions are child items of IpatchDLSInst objects and define how an individual audio sample is synthesized in an instrument.

## Details

### IpatchDLS2ParamArray

    typedef struct {
      gint32 values[IPATCH_DLS2_PARAM_COUNT];
    } IpatchDLS2ParamArray;

### enum IpatchDLS2Param

    typedef enum
    {
      IPATCH_DLS2_PARAM_MOD_LFO_FREQ,
      IPATCH_DLS2_PARAM_MOD_LFO_DELAY,

      IPATCH_DLS2_PARAM_VIB_LFO_FREQ,
      IPATCH_DLS2_PARAM_VIB_LFO_DELAY,

      IPATCH_DLS2_PARAM_VOL_EG_DELAY,
      IPATCH_DLS2_PARAM_VOL_EG_ATTACK,
      IPATCH_DLS2_PARAM_VOL_EG_HOLD,
      IPATCH_DLS2_PARAM_VOL_EG_DECAY,
      IPATCH_DLS2_PARAM_VOL_EG_SUSTAIN,
      IPATCH_DLS2_PARAM_VOL_EG_RELEASE,
      IPATCH_DLS2_PARAM_VOL_EG_SHUTDOWN,
      IPATCH_DLS2_PARAM_VOL_EG_VELOCITY_TO_ATTACK,
      IPATCH_DLS2_PARAM_VOL_EG_NOTE_TO_DECAY,
      IPATCH_DLS2_PARAM_VOL_EG_NOTE_TO_HOLD,

      IPATCH_DLS2_PARAM_MOD_EG_DELAY,
      IPATCH_DLS2_PARAM_MOD_EG_ATTACK,
      IPATCH_DLS2_PARAM_MOD_EG_HOLD,
      IPATCH_DLS2_PARAM_MOD_EG_DECAY,
      IPATCH_DLS2_PARAM_MOD_EG_SUSTAIN,
      IPATCH_DLS2_PARAM_MOD_EG_RELEASE,
      IPATCH_DLS2_PARAM_MOD_EG_VELOCITY_TO_ATTACK,
      IPATCH_DLS2_PARAM_MOD_EG_NOTE_TO_DECAY,
      IPATCH_DLS2_PARAM_MOD_EG_NOTE_TO_HOLD,

      IPATCH_DLS2_PARAM_SCALE_TUNE,
      IPATCH_DLS2_PARAM_RPN2_TO_NOTE,

      IPATCH_DLS2_PARAM_FILTER_CUTOFF,
      IPATCH_DLS2_PARAM_FILTER_Q,
      IPATCH_DLS2_PARAM_MOD_LFO_TO_FILTER_CUTOFF,
      IPATCH_DLS2_PARAM_MOD_LFO_CC1_TO_FILTER_CUTOFF,
      IPATCH_DLS2_PARAM_MOD_LFO_CHANNEL_PRESS_TO_FILTER_CUTOFF,
      IPATCH_DLS2_PARAM_MOD_EG_TO_FILTER_CUTOFF,
      IPATCH_DLS2_PARAM_VELOCITY_TO_FILTER_CUTOFF,
      IPATCH_DLS2_PARAM_NOTE_TO_FILTER_CUTOFF,
      IPATCH_DLS2_PARAM_MOD_LFO_TO_GAIN,
      IPATCH_DLS2_PARAM_MOD_LFO_CC1_TO_GAIN,
      IPATCH_DLS2_PARAM_MOD_LFO_CHANNEL_PRESS_TO_GAIN,
      IPATCH_DLS2_PARAM_VELOCITY_TO_GAIN,
      IPATCH_DLS2_PARAM_CC7_TO_GAIN,
      IPATCH_DLS2_PARAM_CC11_TO_GAIN,

      IPATCH_DLS2_PARAM_TUNE,
      IPATCH_DLS2_PARAM_PITCH_WHEEL_RPN0_TO_PITCH,
      IPATCH_DLS2_PARAM_NOTE_NUMBER_TO_PITCH,
      IPATCH_DLS2_PARAM_RPN1_TO_PITCH,
      IPATCH_DLS2_PARAM_VIB_LFO_TO_PITCH,
      IPATCH_DLS2_PARAM_VIB_LFO_CC1_TO_PITCH,
      IPATCH_DLS2_PARAM_VIB_LFO_CHANNEL_PRESS_TO_PITCH,
      IPATCH_DLS2_PARAM_MOD_LFO_TO_PITCH,
      IPATCH_DLS2_PARAM_MOD_LFO_CC1_TO_PITCH,
      IPATCH_DLS2_PARAM_MOD_LFO_CHANNEL_PRESS_TO_PITCH,
      IPATCH_DLS2_PARAM_MOD_EG_TO_PITCH,

      IPATCH_DLS2_PARAM_PAN,
      IPATCH_DLS2_PARAM_CC10_TO_PAN,
      IPATCH_DLS2_PARAM_CC91_TO_REVERB_SEND,
      IPATCH_DLS2_PARAM_REVERB_SEND,
      IPATCH_DLS2_PARAM_CC93_TO_CHORUS_SEND,
      IPATCH_DLS2_PARAM_CHORUS_SEND,
      IPATCH_DLS2_PARAM_COUNT
    } IpatchDLS2Param;

### IpatchDLS2Region

    typedef struct _IpatchDLS2Region IpatchDLS2Region;

### enum IpatchDLS2RegionChannelType

    typedef enum
    {
      IPATCH_DLS2_REGION_CHANNEL_LEFT = 0,
      IPATCH_DLS2_REGION_CHANNEL_RIGHT = 1,
      IPATCH_DLS2_REGION_CHANNEL_CENTER = 2,
      IPATCH_DLS2_REGION_CHANNEL_LOW_FREQ = 3,
      IPATCH_DLS2_REGION_CHANNEL_SURROUND_LEFT = 4,
      IPATCH_DLS2_REGION_CHANNEL_SURROUND_RIGHT = 5,
      IPATCH_DLS2_REGION_CHANNEL_LEFT_OF_CENTER = 6,
      IPATCH_DLS2_REGION_CHANNEL_RIGHT_OF_CENTER = 7,
      IPATCH_DLS2_REGION_CHANNEL_SURROUND_CENTER = 8,
      IPATCH_DLS2_REGION_CHANNEL_SIDE_LEFT = 9,
      IPATCH_DLS2_REGION_CHANNEL_SIDE_RIGHT = 10,
      IPATCH_DLS2_REGION_CHANNEL_TOP = 11,
      IPATCH_DLS2_REGION_CHANNEL_TOP_FRONT_LEFT = 12,
      IPATCH_DLS2_REGION_CHANNEL_TOP_FRONT_CENTER = 13,
      IPATCH_DLS2_REGION_CHANNEL_TOP_FRONT_RIGHT = 14,
      IPATCH_DLS2_REGION_CHANNEL_TOP_REAR_LEFT = 15,
      IPATCH_DLS2_REGION_CHANNEL_TOP_REAR_CENTER = 16,
      IPATCH_DLS2_REGION_CHANNEL_TOP_REAR_RIGHT = 17
    } IpatchDLS2RegionChannelType;

### IPATCH_DLS2_REGION_CHANNEL_MONO

    #define IPATCH_DLS2_REGION_CHANNEL_MONO  IPATCH_DLS2_REGION_CHANNEL_LEFT

### enum IpatchDLS2RegionFlags

    typedef enum
    {
      IPATCH_DLS2_REGION_SELF_NON_EXCLUSIVE = 1 << IPATCH_ITEM_UNUSED_FLAG_SHIFT,
      IPATCH_DLS2_REGION_PHASE_MASTER = 1 << (IPATCH_ITEM_UNUSED_FLAG_SHIFT + 1),
      IPATCH_DLS2_REGION_MULTI_CHANNEL = 1 << (IPATCH_ITEM_UNUSED_FLAG_SHIFT + 2),
      IPATCH_DLS2_REGION_SAMPLE_INFO_OVERRIDE=1 << (IPATCH_ITEM_UNUSED_FLAG_SHIFT+3)
    } IpatchDLS2RegionFlags;

### IPATCH_DLS2_REGION_FLAG_MASK

    #define IPATCH_DLS2_REGION_FLAG_MASK  (0x0F << IPATCH_ITEM_UNUSED_FLAG_SHIFT)

### IPATCH_DLS2_REGION_UNUSED_FLAG_SHIFT

    #define IPATCH_DLS2_REGION_UNUSED_FLAG_SHIFT (IPATCH_ITEM_UNUSED_FLAG_SHIFT + 6)

### ipatch_dls2_region_new ()

    IpatchDLS2Region *  ipatch_dls2_region_new              (void);

Create a new DLS region object.

Returns : | Newly created DLS region with a ref count of 1 which the caller owns.

### ipatch_dls2_region_first ()

    IpatchDLS2Region *  ipatch_dls2_region_first            (IpatchIter *iter);

Gets the first item in a region iterator. A convenience wrapper for `ipatch_iter_first()`.

`iter` : | Patch item iterator containing IpatchDLS2Region items
Returns : | The first region in `iter` or `NULL` if empty.

### ipatch_dls2_region_next ()

    IpatchDLS2Region *  ipatch_dls2_region_next             (IpatchIter *iter);

Gets the next item in a region iterator. A convenience wrapper for `ipatch_iter_next()`.

`iter` : | Patch item iterator containing IpatchDLS2Region items
Returns : | The next region in `iter` or `NULL` if at the end of the list.

### ipatch_dls2_region_get_info ()

    char *              ipatch_dls2_region_get_info         (IpatchDLS2Region *region,
                                                             guint32 fourcc);

Get a DLS region info string by FOURCC integer ID (integer representation of a 4 character RIFF chunk ID, see IpatchRiff).

`region` : | DLS region to get info from
`fourcc` : | FOURCC integer id of INFO to get
Returns : | New allocated info string value or `NULL` if no info with the given `fourcc` ID. String should be freed when finished with it.

### ipatch_dls2_region_set_info ()

    void                ipatch_dls2_region_set_info         (IpatchDLS2Region *region,
                                                             guint32 fourcc,
                                                             const char *val);

Sets an INFO value in a DLS region object. Emits changed signal.

`region` : | DLS region to set info of
`fourcc` : | FOURCC integer ID of INFO to set
`val` : | Value to set info to or `NULL` to unset (clear) info.

### ipatch_dls2_region_set_sample ()

    void                ipatch_dls2_region_set_sample       (IpatchDLS2Region *region,
                                                             IpatchDLS2Sample *sample);

Sets the referenced sample of a region.

`region` : | Region to set sample of
`sample` : | Sample to set region to

### ipatch_dls2_region_get_sample ()

    IpatchDLS2Sample *  ipatch_dls2_region_get_sample       (IpatchDLS2Region *region);

Gets the referenced sample from a region. The returned item's reference count is incremented and the caller is responsible for unrefing it with `g_object_unref()`.

`region` : | Region to get referenced sample from
Returns : | Region's referenced sample or `NULL` if not set yet. Remember to unreference the item with `g_object_unref()` when done with it.

### ipatch_dls2_region_peek_sample ()

    IpatchDLS2Sample *  ipatch_dls2_region_peek_sample      (IpatchDLS2Region *region);

Like `ipatch_dls2_region_get_sample()` but does not add a reference to the returned item. This function should only be used if a reference of the returned item is ensured or only the pointer value is of interest.

`region` : | Region to get referenced sample from
Returns : | Region's referenced sample or `NULL` if not set yet. Remember that the item has NOT been referenced.

### ipatch_dls2_region_set_note_range ()

    void                ipatch_dls2_region_set_note_range   (IpatchDLS2Region *region,
                                                             int low,
                                                             int high);

Set the MIDI note range that a region is active on.

`region` : | Region to set note range of
`low` : | Low value of range (MIDI note # between 0 and 127)
`high` : | High value of range (MIDI note # between 0 and 127)

### ipatch_dls2_region_set_velocity_range ()

    void                ipatch_dls2_region_set_velocity_range
                                                            (IpatchDLS2Region *region,
                                                             int low,
                                                             int high);

Set the MIDI velocity range that a region is active on.

`region` : | Region to set velocity range of
`low` : | Low value of range (MIDI velocity # between 0 and 127)
`high` : | High value of range (MIDI velocity # between 0 and 127)

### ipatch_dls2_region_in_range ()

    gboolean            ipatch_dls2_region_in_range         (IpatchDLS2Region *region,
                                                             int note,
                                                             int velocity);

Check if a note and velocity falls in a region's ranges

`region` : | Region to check if in range
`note` : | MIDI note number or -1 for wildcard
`velocity` : | MIDI velocity or -1 for wildcard
Returns : | `TRUE` if region is in note and velocity range, `FALSE` otherwise

### ipatch_dls2_region_set_param ()

    void                ipatch_dls2_region_set_param        (IpatchDLS2Region *region,
                                                             IpatchDLS2Param param,
                                                             gint32 val);

Sets an effect parameter of a DLS2 Region. DLS2 defines a standard set of connections (effect parameters). Any non-standard connections can be manipulated with the connection related functions.

`region` : | Region to set parameter of
`param` : | Parameter to set
`val` : | Value for parameter

### ipatch_dls2_region_set_param_array ()

    void                ipatch_dls2_region_set_param_array  (IpatchDLS2Region *region,
                                                             IpatchDLS2ParamArray *array);

### ipatch_dls2_region_get_conns ()

    GSList *            ipatch_dls2_region_get_conns        (IpatchDLS2Region *region);

Gets a list of connections from a DLS region. List should be freed with `ipatch_dls2_conn_list_free()` (free_conns set to `TRUE`) when finished with it.

`region` : | Region to get connections from
Returns : | New list of connections (IpatchDLS2Conn) in `region` or `NULL` if no connections. Remember to free it when finished.

### ipatch_dls2_region_set_conn ()

    void                ipatch_dls2_region_set_conn         (IpatchDLS2Region *region,
                                                             const IpatchDLS2Conn *conn);

Set a DLS connection in a region. See `ipatch_dls2_conn_list_set()` for more details.

`region` : | DLS region
`conn` : | Connection

### ipatch_dls2_region_unset_conn ()

    void                ipatch_dls2_region_unset_conn       (IpatchDLS2Region *region,
                                                             const IpatchDLS2Conn *conn);

Remove a DLS connection from a region. See `ipatch_dls2_conn_list_unset()` for more details.

`region` : | DLS region
`conn` : | Connection

### ipatch_dls2_region_unset_all_conns ()

    void                ipatch_dls2_region_unset_all_conns  (IpatchDLS2Region *region);

Remove all connections in a region.

`region` : | DLS region

### ipatch_dls2_region_conn_count ()

    guint               ipatch_dls2_region_conn_count       (IpatchDLS2Region *region);

Count number of connections in a region

`region` : | Region to count connections in
Returns : | Count of connections

### ipatch_dls2_region_channel_map_stereo ()

    int                 ipatch_dls2_region_channel_map_stereo
                                                            (IpatchDLS2RegionChannelType chan);

Map a DLS2 channel steering enumeration (surround sound capable) to stereo steering.

`chan` : | Channel steering enum
Returns : | -1 = left, 0 = center, 1 = right

## Property Details

### The `"archive-location"` property

      "archive-location"         gchar*                : Read / Write

Location where subject is archived.

Default value: NULL

### The `"artist"` property

      "artist"                   gchar*                : Read / Write

Original artist.

Default value: NULL

### The `"channel"` property

      "channel"                  gint                  : Read / Write

DLS audio channel identifier.

Allowed values: [0,262143]

Default value: 0

### The `"comment"` property

      "comment"                  gchar*                : Read / Write

Comments.

Default value: NULL

### The `"commissioned"` property

      "commissioned"             gchar*                : Read / Write

Who commissioned the material.

Default value: NULL

### The `"copyright"` property

      "copyright"                gchar*                : Read / Write

Copyright.

Default value: NULL

### The `"date"` property

      "date"                     gchar*                : Read / Write

Creation date (YYYY-MM-DD).

Default value: NULL

### The `"engineer"` property

      "engineer"                 gchar*                : Read / Write

Engineers separated by "; ".

Default value: NULL

### The `"fine-tune"` property

      "fine-tune"                gint                  : Read / Write

Fine tuning in cents.

Allowed values: [-99,99]

Default value: 0

### The `"flags"` property

      "flags"                    IpatchDLS2SampleFlags  : Read / Write

Sample flags.

### The `"gain"` property

      "gain"                     gint                  : Read / Write

Gain in DLS relative gain units.

Default value: 0

### The `"genre"` property

      "genre"                    gchar*                : Read / Write

Genre.

Default value: NULL

### The `"key-group"` property

      "key-group"                gint                  : Read / Write

Percussion key group.

Allowed values: [0,15]

Default value: 0

### The `"keywords"` property

      "keywords"                 gchar*                : Read / Write

Keywords (separated by "; ").

Default value: NULL

### The `"layer-group"` property

      "layer-group"              gint                  : Read / Write

Layer group.

Allowed values: [0,65535]

Default value: 0

### The `"link-item"` property

      "link-item"                IpatchDLS2Sample*     : Read / Write

Link item.

### The `"loop-end"` property

      "loop-end"                 guint                 : Read / Write

Loop end in frames (after loop).

Default value: 0

### The `"loop-start"` property

      "loop-start"               guint                 : Read / Write

Start of loop in frames.

Default value: 0

### The `"loop-type"` property

      "loop-type"                IpatchSampleLoopType  : Read / Write

Loop method type.

Default value: IPATCH_SAMPLE_LOOP_NONE

### The `"medium"` property

      "medium"                   gchar*                : Read / Write

Original medium of the material (record, CD, etc).

Default value: NULL

### The `"multi-channel"` property

      "multi-channel"            gboolean              : Read / Write

Multi channel.

Default value: FALSE

### The `"name"` property

      "name"                     gchar*                : Read / Write

Name.

Default value: "untitled"

### The `"note-range"` property

      "note-range"               IpatchRange*          : Read / Write

MIDI note range.

### The `"phase-group"` property

      "phase-group"              gint                  : Read / Write

Phase locked sample group.

Allowed values: [0,65535]

Default value: 0

### The `"phase-master"` property

      "phase-master"             gboolean              : Read / Write

Multi channel phase lock master.

Default value: FALSE

### The `"product"` property

      "product"                  gchar*                : Read / Write

Product intended for.

Default value: NULL

### The `"root-note"` property

      "root-note"                gint                  : Read / Write

Root MIDI note.

Allowed values: [0,127]

Default value: 60

### The `"sample-info-override"` property

      "sample-info-override"     gboolean              : Read / Write

Override sample info.

Default value: FALSE

### The `"self-non-exclusive"` property

      "self-non-exclusive"       gboolean              : Read / Write

Self non exclusive.

Default value: FALSE

### The `"software"` property

      "software"                 gchar*                : Read / Write

Editor software used.

Default value: NULL

### The `"source"` property

      "source"                   gchar*                : Read / Write

Source of the original material.

Default value: NULL

### The `"source-form"` property

      "source-form"              gchar*                : Read / Write

Original source that was digitized.

Default value: NULL

### The `"subject"` property

      "subject"                  gchar*                : Read / Write

Subject of the material.

Default value: NULL

### The `"technician"` property

      "technician"               gchar*                : Read / Write

Technician who sampled the material.

Default value: NULL

### The `"velocity-range"` property

      "velocity-range"           IpatchRange*          : Read / Write

MIDI velocity range.

## See Also

#IpatchDLSInst