settings.h
上传用户:tjmskj2
上传日期:2020-08-17
资源大小:577k
文件大小:7k
源码类别:

midi

开发平台:

C/C++

  1. /* FluidSynth - A Software Synthesizer
  2.  *
  3.  * Copyright (C) 2003  Peter Hanappe and others.
  4.  *
  5.  * This library is free software; you can redistribute it and/or
  6.  * modify it under the terms of the GNU Library General Public License
  7.  * as published by the Free Software Foundation; either version 2 of
  8.  * the License, or (at your option) any later version.
  9.  *
  10.  * This library is distributed in the hope that it will be useful, but
  11.  * WITHOUT ANY WARRANTY; without even the implied warranty of
  12.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  13.  * Library General Public License for more details.
  14.  *
  15.  * You should have received a copy of the GNU Library General Public
  16.  * License along with this library; if not, write to the Free
  17.  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
  18.  * 02111-1307, USA
  19.  */
  20. #ifndef _FLUIDSYNTH_SETTINGS_H
  21. #define _FLUIDSYNTH_SETTINGS_H
  22. #ifdef __cplusplus
  23. extern "C" {
  24. #endif
  25. /**
  26.  * @file settings.h
  27.  * @brief Synthesizer settings
  28.  * @defgroup SettingsFunctions Functions for settings management
  29.  *
  30.  * To create a synthesizer object you will have to specify its
  31.  * settings. These settings are stored in a fluid_settings_t object.
  32.  * @code
  33.  *     void
  34.  *     my_synthesizer ()
  35.  *     {
  36.  *       fluid_settings_t *settings;
  37.  *       fluid_synth_t *synth;
  38.  *       fluid_audio_driver_t *adriver;
  39.  *
  40.  *       settings = new_fluid_settings ();
  41.  *       fluid_settings_setstr(settings, "audio.driver", "alsa");
  42.  *       // ... change settings ...
  43.  *       synth = new_fluid_synth (settings);
  44.  *       adriver = new_fluid_audio_driver (settings, synth);
  45.  *       // ...
  46.  *     }
  47.  * @endcode
  48.  * @sa @ref CreatingSettings
  49.  */
  50. /**
  51.  * Hint FLUID_HINT_BOUNDED_BELOW indicates that the LowerBound field
  52.  * of the FLUID_PortRangeHint should be considered meaningful. The
  53.  * value in this field should be considered the (inclusive) lower
  54.  * bound of the valid range. If FLUID_HINT_SAMPLE_RATE is also
  55.  * specified then the value of LowerBound should be multiplied by the
  56.  * sample rate.
  57.  */
  58. #define FLUID_HINT_BOUNDED_BELOW   0x1
  59. /** Hint FLUID_HINT_BOUNDED_ABOVE indicates that the UpperBound field
  60.    of the FLUID_PortRangeHint should be considered meaningful. The
  61.    value in this field should be considered the (inclusive) upper
  62.    bound of the valid range. If FLUID_HINT_SAMPLE_RATE is also
  63.    specified then the value of UpperBound should be multiplied by the
  64.    sample rate. */
  65. #define FLUID_HINT_BOUNDED_ABOVE   0x2
  66. /**
  67.  * Hint FLUID_HINT_TOGGLED indicates that the data item should be
  68.  * considered a Boolean toggle. Data less than or equal to zero should
  69.  * be considered `off' or `false,' and data above zero should be
  70.  * considered `on' or `true.' FLUID_HINT_TOGGLED may not be used in
  71.  * conjunction with any other hint.
  72.  */
  73. #define FLUID_HINT_TOGGLED         0x4
  74. /**
  75.  * Hint FLUID_HINT_SAMPLE_RATE indicates that any bounds specified
  76.  * should be interpreted as multiples of the sample rate. For
  77.  * instance, a frequency range from 0Hz to the Nyquist frequency (half
  78.  * the sample rate) could be requested by this hint in conjunction
  79.  * with LowerBound = 0 and UpperBound = 0.5. Hosts that support bounds
  80.  * at all must support this hint to retain meaning.
  81.  */
  82. #define FLUID_HINT_SAMPLE_RATE     0x8
  83. /**
  84.  * Hint FLUID_HINT_LOGARITHMIC indicates that it is likely that the
  85.  * user will find it more intuitive to view values using a logarithmic
  86.  * scale. This is particularly useful for frequencies and gains.
  87.  */
  88. #define FLUID_HINT_LOGARITHMIC     0x10
  89. /**
  90.  * Hint FLUID_HINT_INTEGER indicates that a user interface would
  91.  * probably wish to provide a stepped control taking only integer
  92.  * values.
  93.  * @deprecated
  94.  *
  95.  * As there is an integer setting type, this hint is not used.
  96.  */
  97. #define FLUID_HINT_INTEGER         0x20
  98. #define FLUID_HINT_FILENAME        0x01         /**< String setting is a file name */
  99. #define FLUID_HINT_OPTIONLIST      0x02         /**< Setting is a list of string options */
  100. /**
  101.  * Settings type
  102.  *
  103.  * Each setting has a defined type: numeric (double), integer, string or a
  104.  * set of values. The type of each setting can be retrieved using the
  105.  * function fluid_settings_get_type()
  106.  */
  107. enum fluid_types_enum {
  108.   FLUID_NO_TYPE = -1, /**< Undefined type */
  109.   FLUID_NUM_TYPE,     /**< Numeric (double) */
  110.   FLUID_INT_TYPE,     /**< Integer */
  111.   FLUID_STR_TYPE,     /**< String */
  112.   FLUID_SET_TYPE      /**< Set of values */
  113. };
  114. FLUIDSYNTH_API fluid_settings_t* new_fluid_settings(void);
  115. FLUIDSYNTH_API void delete_fluid_settings(fluid_settings_t* settings);
  116. FLUIDSYNTH_API
  117. int fluid_settings_get_type(fluid_settings_t* settings, const char *name);
  118. FLUIDSYNTH_API
  119. int fluid_settings_get_hints(fluid_settings_t* settings, const char *name);
  120. FLUIDSYNTH_API
  121. int fluid_settings_is_realtime(fluid_settings_t* settings, const char *name);
  122. FLUIDSYNTH_API
  123. int fluid_settings_setstr(fluid_settings_t* settings, const char *name, const char *str);
  124. FLUIDSYNTH_API
  125. int fluid_settings_copystr(fluid_settings_t* settings, const char *name, char *str, int len);
  126. FLUIDSYNTH_API
  127. int fluid_settings_dupstr(fluid_settings_t* settings, const char *name, char** str);
  128. FLUIDSYNTH_API
  129. int fluid_settings_getstr(fluid_settings_t* settings, const char *name, char** str);
  130. FLUIDSYNTH_API
  131. char* fluid_settings_getstr_default(fluid_settings_t* settings, const char *name);
  132. FLUIDSYNTH_API
  133. int fluid_settings_str_equal(fluid_settings_t* settings, const char *name, const char *value);
  134. FLUIDSYNTH_API
  135. int fluid_settings_setnum(fluid_settings_t* settings, const char *name, double val);
  136. FLUIDSYNTH_API
  137. int fluid_settings_getnum(fluid_settings_t* settings, const char *name, double* val);
  138. FLUIDSYNTH_API
  139. double fluid_settings_getnum_default(fluid_settings_t* settings, const char *name);
  140. FLUIDSYNTH_API
  141. void fluid_settings_getnum_range(fluid_settings_t* settings, const char *name,
  142. double* min, double* max);
  143. FLUIDSYNTH_API
  144. int fluid_settings_setint(fluid_settings_t* settings, const char *name, int val);
  145. FLUIDSYNTH_API
  146. int fluid_settings_getint(fluid_settings_t* settings, const char *name, int* val);
  147. FLUIDSYNTH_API
  148. int fluid_settings_getint_default(fluid_settings_t* settings, const char *name);
  149. FLUIDSYNTH_API
  150. void fluid_settings_getint_range(fluid_settings_t* settings, const char *name,
  151. int* min, int* max);
  152. /**
  153.  * Callback function type used with fluid_settings_foreach_option()
  154.  * @param data User defined data pointer
  155.  * @param name Setting name
  156.  * @param option A string option for this setting (iterates through the list)
  157.  */
  158. typedef void (*fluid_settings_foreach_option_t)(void *data, char *name, char *option);
  159. FLUIDSYNTH_API
  160. void fluid_settings_foreach_option(fluid_settings_t* settings,
  161.   const char* name, void* data,
  162.   fluid_settings_foreach_option_t func);
  163. FLUIDSYNTH_API
  164. int fluid_settings_option_count (fluid_settings_t* settings, const char* name);
  165. FLUIDSYNTH_API char *fluid_settings_option_concat (fluid_settings_t* settings,
  166.                                                    const char* name,
  167.                                                    const char* separator);
  168. /**
  169.  * Callback function type used with fluid_settings_foreach()
  170.  * @param data User defined data pointer
  171.  * @param name Setting name
  172.  * @param type Setting type (#fluid_types_enum)
  173.  */
  174. typedef void (*fluid_settings_foreach_t)(void *data, char *name, int type);
  175. FLUIDSYNTH_API
  176. void fluid_settings_foreach(fluid_settings_t* settings, void* data,
  177.    fluid_settings_foreach_t func);
  178. #ifdef __cplusplus
  179. }
  180. #endif
  181. #endif /* _FLUIDSYNTH_SETTINGS_H */