This file is indexed.

/usr/include/libinstpatch-1.0/libinstpatch/IpatchSF2VoiceCache.h is in libinstpatch-dev 1.0.0-7.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
/*
 * libInstPatch
 * Copyright (C) 1999-2010 Joshua "Element" Green <jgreen@users.sourceforge.net>
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public License
 * as published by the Free Software Foundation; version 2.1
 * of the License only.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 * 02110-1301, USA or on the web at http://www.gnu.org.
 */
/**
 * SECTION: IpatchSF2VoiceCache
 * @short_description: SoundFont voice cache object
 * @see_also: 
 * @stability: Stable
 *
 * This is used for pre-processing instruments into arrays of SoundFont
 * compatible voices which can then be accessed very quickly without
 * multi-thread locking or other issues (during synthesis for example).
 */
#ifndef __IPATCH_SF2_VOICE_CACHE_H__
#define __IPATCH_SF2_VOICE_CACHE_H__

#include <stdarg.h>
#include <glib.h>
#include <glib-object.h>

#include <libinstpatch/IpatchSampleData.h>
#include <libinstpatch/IpatchSF2Gen.h>
#include <libinstpatch/IpatchSF2Mod.h>
#include <libinstpatch/IpatchSample.h>

/* forward type declarations */

typedef struct _IpatchSF2VoiceCache IpatchSF2VoiceCache;
typedef struct _IpatchSF2VoiceCacheClass IpatchSF2VoiceCacheClass;
typedef struct _IpatchSF2Voice IpatchSF2Voice;
typedef struct _IpatchSF2VoiceUpdate IpatchSF2VoiceUpdate;
typedef struct _IpatchSF2VoiceSelInfo IpatchSF2VoiceSelInfo;

#define IPATCH_TYPE_SF2_VOICE_CACHE   (ipatch_sf2_voice_cache_get_type ())
#define IPATCH_SF2_VOICE_CACHE(obj) \
  (G_TYPE_CHECK_INSTANCE_CAST ((obj), IPATCH_TYPE_SF2_VOICE_CACHE, \
  IpatchSF2VoiceCache))
#define IPATCH_SF2_VOICE_CACHE_CLASS(klass) \
  (G_TYPE_CHECK_CLASS_CAST ((klass), IPATCH_TYPE_SF2_VOICE_CACHE, \
  IpatchSF2VoiceCacheClass))
#define IPATCH_IS_SF2_VOICE_CACHE(obj) \
  (G_TYPE_CHECK_INSTANCE_TYPE ((obj), IPATCH_TYPE_SF2_VOICE_CACHE))
#define IPATCH_IS_SF2_VOICE_CACHE_CLASS(klass) \
  (G_TYPE_CHECK_CLASS_TYPE ((klass), IPATCH_TYPE_SF2_VOICE_CACHE))

/**
 * IpatchSF2VoiceCacheItemFunc:
 * @cache: Voice cache
 * @item: Item which voice cache is dependent on
 *
 * A callback function type which is called during voice cache population
 * for each item which the voice cache is dependent on. This can be useful
 * for determining when a voice cache needs to be updated or for real time
 * effects.
 */
typedef void (*IpatchSF2VoiceCacheItemFunc)(IpatchSF2VoiceCache *cache,
					    GObject *item);

/* SoundFont voice cache object */
struct _IpatchSF2VoiceCache
{
  GObject parent_instance;

  IpatchSF2VoiceSelInfo *sel_info;	/* array of selection criteria info */
  int sel_count;    /* count of selection ranges per voice (integer pairs) */

  GArray *voices;	/* array of IpatchSF2Voice structures */
  GArray *ranges;	/* array of selection integer pairs for each voice */

  GSList *default_mods;		/* default modulators */

  /* default loop type which can be used for objects that don't define it */
  IpatchSampleLoopType default_loop_type;

  /* dependent item callback function */
  IpatchSF2VoiceCacheItemFunc item_func;
  gpointer item_func_data;	/* user defined data used by item_func */

  /* IpatchSF2VoiceCache user defined */
  gpointer user_data;           /* Arbitrary data defined by IpatchSF2VoiceCache user */
  GDestroyNotify user_data_destroy; /* Optional callback to destroy user_data */
  GDestroyNotify voice_user_data_destroy; /* Optional callback to destroy user_data in each voice */
};

struct _IpatchSF2VoiceCacheClass
{
  GObjectClass parent_class;
};

/* a SoundFont voice */
struct _IpatchSF2Voice
{
  /* Set by SF2VoiceCache converter via ipatch_sf2_voice_set_sample_data() */
  IpatchSampleData *sample_data;	/* sample data for voice */
  IpatchSampleStore *sample_store;	/* Cached store */
  guint32 sample_size;			/* size of sample in frames */

  /* Set by SF2VoiceCache converter */
  guint32 loop_start;		/* loop start offset (in samples) */
  guint32 loop_end;   /* loop end offset (in samples, 1st sample after loop) */
  guint32 rate;			/* sample rate */
  guint8 root_note;		/* MIDI root note of sample */
  gint8 fine_tune;		/* fine tune (in cents, -99 - 99) */
  guint16 reserved;		/* reserved (should be 0) */

  IpatchSF2GenArray gen_array;	/* generator effect values */
  GSList *mod_list;		/* modulator list */

  /* IpatchSF2VoiceCache user defined */
  gpointer user_data;           /* Arbitrary data defined by IpatchSF2VoiceCache user */

  /* Set internally */
  int range_index;  /* index in ranges array (int *) to first selection range */
};

/* a voice parameter update (used for realtime effects) */
struct _IpatchSF2VoiceUpdate
{
  guint16 voice;	/* index of voice with parameter to update */

  union			/* new value for parameter */
  {
    gint16 ival;
    guint16 uval;
  };

  guint8 genid;		/* if type == IPATCH_SF2_VOICE_UPDATE_GEN: id of gen */
  guint8 reserved[3];	/* padding to 4 bytes */
};

/**
 * IpatchSF2VoiceCacheUpdateHandler:
 * @cache: Voice cache to get updates for
 * @select_values: The voice selection criteria to use, should be the same
 *   number of select values as in @cache
 * @cache_item: Original item @cache was created from
 * @item: Object for which a property changed
 * @pspec: Parameter specification of property which changed
 * @value: The new value of the property
 * @updates: Output array to store updates to
 * @max_updates: Size of @updates array (max possible update values).
 *
 * Function prototype used to re-calculate SoundFont effect generators for a
 * single object property change.  Useful for real time effect changes.
 *
 * Returns: Should return number of updates stored to @updates array.
 *   Will be 0 if no updates required.
 */
typedef int (*IpatchSF2VoiceCacheUpdateHandler)(IpatchSF2VoiceCache *cache,
					        int *select_values,
					        GObject *cache_item,
					        GObject *item, GParamSpec *pspec,
					        const GValue *value,
					        IpatchSF2VoiceUpdate *updates,
					        guint max_updates);
/* voice selection type */
typedef enum
{
  IPATCH_SF2_VOICE_SEL_NOTE,		/* MIDI note range */
  IPATCH_SF2_VOICE_SEL_VELOCITY,	/* MIDI velocity range */
  IPATCH_SF2_VOICE_SEL_AFTER_TOUCH,	/* MIDI aftertouch range */
  IPATCH_SF2_VOICE_SEL_MIDI_CC	/* MIDI custom controller (param1: ctrlnum) */
} IpatchSF2VoiceSelType;

/* selection info structure */
struct _IpatchSF2VoiceSelInfo
{
  IpatchSF2VoiceSelType type;
  int param1;
  int param2;				/* currently not used */
};

/* maximum allowed voice selection criteria (MIDI note, velocity, etc) */
#define IPATCH_SF2_VOICE_CACHE_MAX_SEL_VALUES   32

/* value used for wildcard selection */
#define IPATCH_SF2_VOICE_SEL_WILDCARD (G_MININT)

/* For voice cache propagation methods to declare dependent items */
#define ipatch_sf2_voice_cache_declare_item(cache, item) \
  if (cache->item_func) cache->item_func (cache, item)

/* Macro for retrieving a voice pointer from a cache */
#define IPATCH_SF2_VOICE_CACHE_GET_VOICE(cache, index) \
  (&g_array_index (cache->voices, IpatchSF2Voice, index))

GType ipatch_sf2_voice_cache_get_type (void);
IpatchSF2VoiceCache *ipatch_sf2_voice_cache_new (IpatchSF2VoiceSelInfo *info,
						 int sel_count);
void ipatch_sf2_voice_cache_set_default_mods (IpatchSF2VoiceCache *cache,
					      GSList *mods);

IpatchSF2Voice *ipatch_sf2_voice_cache_add_voice (IpatchSF2VoiceCache *cache);
void ipatch_sf2_voice_cache_set_voice_range (IpatchSF2VoiceCache *cache,
		IpatchSF2Voice *voice, guint sel_index, int low, int high);
void ipatch_sf2_voice_set_sample_data (IpatchSF2Voice *voice,
                                       IpatchSampleData *sample_data);
gboolean ipatch_sf2_voice_cache_sample_data (IpatchSF2Voice *voice, GError **err);
void ipatch_sf2_voice_copy (IpatchSF2Voice *dest, IpatchSF2Voice *src);
void ipatch_sf2_voice_cache_optimize (IpatchSF2VoiceCache *cache);
int ipatch_sf2_voice_cache_select (IpatchSF2VoiceCache *cache,
				   int *select_values,
				   guint16 *index_array,
				   guint16 max_indexes);
int ipatch_sf2_voice_cache_update (IpatchSF2VoiceCache *cache,
				   int *select_values,
				   GObject *cache_item,
				   GObject *item, GParamSpec *pspec,
				   const GValue *value,
				   IpatchSF2VoiceUpdate *updates,
				   guint max_updates);
#endif