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

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_GEN_H
  21. #define _FLUIDSYNTH_GEN_H
  22. #ifdef __cplusplus
  23. extern "C" {
  24. #endif
  25. /**
  26.  * @file gen.h
  27.  * @brief Functions and defines for SoundFont generator effects.
  28.  */
  29. /**
  30.  * Generator (effect) numbers (Soundfont 2.01 specifications section 8.1.3)
  31.  */
  32. enum fluid_gen_type {
  33.   GEN_STARTADDROFS, /**< Sample start address offset (0-32767) */
  34.   GEN_ENDADDROFS, /**< Sample end address offset (-32767-0) */
  35.   GEN_STARTLOOPADDROFS, /**< Sample loop start address offset (-32767-32767) */
  36.   GEN_ENDLOOPADDROFS, /**< Sample loop end address offset (-32767-32767) */
  37.   GEN_STARTADDRCOARSEOFS, /**< Sample start address coarse offset (X 32768) */
  38.   GEN_MODLFOTOPITCH, /**< Modulation LFO to pitch */
  39.   GEN_VIBLFOTOPITCH, /**< Vibrato LFO to pitch */
  40.   GEN_MODENVTOPITCH, /**< Modulation envelope to pitch */
  41.   GEN_FILTERFC, /**< Filter cutoff */
  42.   GEN_FILTERQ, /**< Filter Q */
  43.   GEN_MODLFOTOFILTERFC, /**< Modulation LFO to filter cutoff */
  44.   GEN_MODENVTOFILTERFC, /**< Modulation envelope to filter cutoff */
  45.   GEN_ENDADDRCOARSEOFS, /**< Sample end address coarse offset (X 32768) */
  46.   GEN_MODLFOTOVOL, /**< Modulation LFO to volume */
  47.   GEN_UNUSED1, /**< Unused */
  48.   GEN_CHORUSSEND, /**< Chorus send amount */
  49.   GEN_REVERBSEND, /**< Reverb send amount */
  50.   GEN_PAN, /**< Stereo panning */
  51.   GEN_UNUSED2, /**< Unused */
  52.   GEN_UNUSED3, /**< Unused */
  53.   GEN_UNUSED4, /**< Unused */
  54.   GEN_MODLFODELAY, /**< Modulation LFO delay */
  55.   GEN_MODLFOFREQ, /**< Modulation LFO frequency */
  56.   GEN_VIBLFODELAY, /**< Vibrato LFO delay */
  57.   GEN_VIBLFOFREQ, /**< Vibrato LFO frequency */
  58.   GEN_MODENVDELAY, /**< Modulation envelope delay */
  59.   GEN_MODENVATTACK, /**< Modulation envelope attack */
  60.   GEN_MODENVHOLD, /**< Modulation envelope hold */
  61.   GEN_MODENVDECAY, /**< Modulation envelope decay */
  62.   GEN_MODENVSUSTAIN, /**< Modulation envelope sustain */
  63.   GEN_MODENVRELEASE, /**< Modulation envelope release */
  64.   GEN_KEYTOMODENVHOLD, /**< Key to modulation envelope hold */
  65.   GEN_KEYTOMODENVDECAY, /**< Key to modulation envelope decay */
  66.   GEN_VOLENVDELAY, /**< Volume envelope delay */
  67.   GEN_VOLENVATTACK, /**< Volume envelope attack */
  68.   GEN_VOLENVHOLD, /**< Volume envelope hold */
  69.   GEN_VOLENVDECAY, /**< Volume envelope decay */
  70.   GEN_VOLENVSUSTAIN, /**< Volume envelope sustain */
  71.   GEN_VOLENVRELEASE, /**< Volume envelope release */
  72.   GEN_KEYTOVOLENVHOLD, /**< Key to volume envelope hold */
  73.   GEN_KEYTOVOLENVDECAY, /**< Key to volume envelope decay */
  74.   GEN_INSTRUMENT, /**< Instrument ID (shouldn't be set by user) */
  75.   GEN_RESERVED1, /**< Reserved */
  76.   GEN_KEYRANGE, /**< MIDI note range */
  77.   GEN_VELRANGE, /**< MIDI velocity range */
  78.   GEN_STARTLOOPADDRCOARSEOFS, /**< Sample start loop address coarse offset (X 32768) */
  79.   GEN_KEYNUM, /**< Fixed MIDI note number */
  80.   GEN_VELOCITY, /**< Fixed MIDI velocity value */
  81.   GEN_ATTENUATION, /**< Initial volume attenuation */
  82.   GEN_RESERVED2, /**< Reserved */
  83.   GEN_ENDLOOPADDRCOARSEOFS, /**< Sample end loop address coarse offset (X 32768) */
  84.   GEN_COARSETUNE, /**< Coarse tuning */
  85.   GEN_FINETUNE, /**< Fine tuning */
  86.   GEN_SAMPLEID, /**< Sample ID (shouldn't be set by user) */
  87.   GEN_SAMPLEMODE, /**< Sample mode flags */
  88.   GEN_RESERVED3, /**< Reserved */
  89.   GEN_SCALETUNE, /**< Scale tuning */
  90.   GEN_EXCLUSIVECLASS, /**< Exclusive class number */
  91.   GEN_OVERRIDEROOTKEY, /**< Sample root note override */
  92.   /* the initial pitch is not a "standard" generator. It is not
  93.    * mentioned in the list of generator in the SF2 specifications. It
  94.    * is used, however, as the destination for the default pitch wheel
  95.    * modulator. */
  96.   GEN_PITCH, /**< Pitch (NOTE: Not a real SoundFont generator) */
  97.   GEN_LAST /**< Value defines the count of generators (#fluid_gen_type) */
  98. };
  99. /**
  100.  * SoundFont generator structure.
  101.  */
  102. typedef struct _fluid_gen_t
  103. {
  104.   unsigned char flags; /**< Is the generator set or not (#fluid_gen_flags) */
  105.   double val;          /**< The nominal value */
  106.   double mod;          /**< Change by modulators */
  107.   double nrpn;         /**< Change by NRPN messages */
  108. } fluid_gen_t;
  109. /**
  110.  * Enum value for 'flags' field of #fluid_gen_t (not really flags).
  111.  */
  112. enum fluid_gen_flags
  113. {
  114.   GEN_UNUSED, /**< Generator value is not set */
  115.   GEN_SET, /**< Generator value is set */
  116.   GEN_ABS_NRPN /**< Generator is an absolute value */
  117. };
  118. FLUIDSYNTH_API int fluid_gen_set_default_values(fluid_gen_t* gen);
  119. #ifdef __cplusplus
  120. }
  121. #endif
  122. #endif /* _FLUIDSYNTH_GEN_H */