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

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. /* Author: Markus Nentwig, nentwig@users.sourceforge.net
  21.  */
  22. #ifndef _FLUID_LADSPA_H
  23. #define _FLUID_LADSPA_H
  24. /***************************************************************
  25.  *
  26.  *                         INCLUDES
  27.  */
  28. #include "fluidsynth_priv.h"
  29. #ifdef LADSPA
  30. #include "fluid_list.h"
  31. #include <pthread.h>
  32. #include <ladspa.h>
  33. /***************************************************************
  34.  *
  35.  *                         DEFINES
  36.  */
  37. /* How many different plugin libraries may be used at the same time? */
  38. #define FLUID_LADSPA_MaxLibs 100
  39. /* How many plugin instances may be used at the same time? */
  40. #define FLUID_LADSPA_MaxPlugins 100
  41. /* How many nodes are allowed? */
  42. #define FLUID_LADSPA_MaxNodes 100
  43. /* How many tokens are allowed in one command line? (for example 152 => max. 50 port plugin allowed) */
  44. #define FLUID_LADSPA_MaxTokens 152
  45. /* What is the maximum path length? */
  46. #define FLUID_LADSPA_MaxPathLength 512
  47. /***************************************************************
  48.  *
  49.  *                         ENUM
  50.  */
  51. typedef enum {
  52.   fluid_LADSPA_NoMatch,
  53.   fluid_LADSPA_PartialMatch,
  54.   fluid_LADSPA_FullMatch
  55. } fluid_LADSPA_Stringmatch_t;
  56. /* Bypass state of the Fx unit */
  57. typedef enum {
  58.   fluid_LADSPA_Active,
  59.   fluid_LADSPA_Bypassed,
  60.   fluid_LADSPA_BypassRequest
  61. } fluid_LADSPA_BypassState;
  62. typedef enum {
  63.   fluid_LADSPA_node_is_source=1,
  64.   fluid_LADSPA_node_is_sink=2,
  65.   fluid_LADSPA_node_is_audio=4,
  66.   fluid_LADSPA_node_is_control=8,
  67.   fluid_LADSPA_node_is_dummy=16,
  68.   fluid_LADSPA_node_is_user_ctrl=32
  69. } fluid_LADSPA_nodeflags;
  70. /* fluid_LADSPA_Node_t
  71.  * An internal node of the Fx unit.
  72.  * A 'node' is the 'glue' that connects several LADSPA plugins.
  73.  * Basically it's a real-valued variable (control node) or a real-valued buffer (audio node).
  74.  */
  75. typedef struct {
  76.   LADSPA_Data * buf;      /*Either the buffer (Audio node) or a single control value (Control node)*/
  77.   char * Name;            /* Unique identifier*/
  78.   int InCount;            /* How many sources feed into this node? (0 or 1) */
  79.   int OutCount;           /* How many other elements take data out of this node? */
  80.   int flags;
  81. } fluid_LADSPA_Node_t;
  82. /*
  83.  * fluid_LADSPA_Fx_t
  84.  * Fx unit using LADSPA.
  85.  * This includes a number of LADSPA plugins, their libraries, nodes etc.
  86.  * The Fx unit connects its input to Fluidsynth and its output to the soundcard.
  87.  */
  88. typedef struct {
  89.   /* LADSPA-plugins are in shared libraries (for example aw.so).
  90.    * Pointers to them are stored here. A library is uniquely identified through
  91.    * its filename (full path).*/
  92.   fluid_synth_t* synth;
  93.   int NumberLibs;
  94.   void * ppvPluginLibs[FLUID_LADSPA_MaxLibs];
  95.   char * ppvPluginLibNames[FLUID_LADSPA_MaxLibs];
  96.   /*List of plugins (descriptor and instance)
  97.    * A LADSPA plugin descriptor points to the code, which is executed, when a plugin is run.
  98.    * The plugin instance is given as a parameter, when calling.
  99.    */
  100.   int NumberPlugins;
  101.   const LADSPA_Descriptor * PluginDescriptorTable[FLUID_LADSPA_MaxPlugins];
  102.   LADSPA_Handle * PluginInstanceTable[FLUID_LADSPA_MaxPlugins];
  103.   /* List of nodes */
  104.   int NumberNodes;
  105.   fluid_LADSPA_Node_t * Nodelist[FLUID_LADSPA_MaxNodes];
  106.   /* List of Command lines
  107.    * During the setup phase, each ladspa_add command creates one command sequence. For example:
  108.    * ./aw.so alienwah_stereo Input <- Master_L_Synth Output -> Master_R_Synth Parameter <- #42.0
  109.    * Those lists are stored in LADSPA_Command_Sequence.
  110.    * One command line results in one plugin => size MaxPlugins.
  111.    */
  112.   int NumberCommands;
  113.   char ** LADSPA_Command_Sequence[FLUID_LADSPA_MaxPlugins];
  114.   /* User control nodes
  115.    * A user control node is declared at any time before the ladspa_start command.
  116.    * It acts as a constant node, but it has a name and can be changed with the ladspa_nodeset command. */
  117.   int NumberUserControlNodes;
  118.   char * UserControlNodeNames[FLUID_LADSPA_MaxNodes];
  119.   fluid_real_t UserControlNodeValues[FLUID_LADSPA_MaxNodes];
  120.   /* Bypass switch
  121.    * If set, the LADSPA Fx unit does not touch the signal.*/
  122.   fluid_LADSPA_BypassState Bypass;
  123.   /* Communication between the 'command line' process and the synthesis process.
  124.    * A possible conflict situation arises, when fluid_clear is called, and starts to destroy
  125.    * the plugins. But the synthesis thread still processes plugins at the same time. The consequences are ugly.
  126.    * Therefore ladspa_clear waits for acknowledgement from the synthesis thread, that the Fx unit is bypassed.
  127.    * 'cond' is used for the communication, the mutex is required for changing the condition.
  128.    */
  129.   pthread_cond_t cond;
  130.   pthread_mutex_t mutex;
  131. } fluid_LADSPA_FxUnit_t;
  132. /*
  133.  * misc
  134.  */
  135. /* Purpose:
  136.  * Creates a new Fx unit in bypass mode with default settings.
  137.  * It is ready for further calls (add, clear, start).
  138.  */
  139. fluid_LADSPA_FxUnit_t* new_fluid_LADSPA_FxUnit(fluid_synth_t* synth);
  140. /* Purpose:
  141.  * Applies the master gain (from command line option --gain or gain command).
  142.  * Processes one block of sound data (generated from the synthesizer) through
  143.  * the LADSPA Fx unit.
  144.  * Acknowledges a bypass request.
  145.  */
  146. void fluid_LADSPA_run(fluid_LADSPA_FxUnit_t* Fx_unit, fluid_real_t* left_buf[], fluid_real_t* right_buf[], fluid_real_t* fx_left_buf[], fluid_real_t* fx_right_buf[]);
  147. /* Purpose:
  148.  * Returns the node belonging to Name or NULL, if not found
  149.  */
  150. fluid_LADSPA_Node_t* fluid_LADSPA_RetrieveNode(fluid_LADSPA_FxUnit_t* FxUnit, char * Name);
  151. /* Purpose:
  152.  * Creates a new node with the given characteristics.
  153.  */
  154. fluid_LADSPA_Node_t* fluid_LADSPA_CreateNode(fluid_LADSPA_FxUnit_t* FxUnit, char * Name, int flags);
  155. /* Purpose:
  156.  * - Resets LADSPA Fx unit to bypass.
  157.  * - Removes all plugins from the reverb unit.
  158.  * - Releases all libraries.
  159.  * Note: It would be more efficient to keep the libraries. But then the user would have to restart fluidsynth each time
  160.  * a plugin is recompiled.
  161.  */
  162. void fluid_LADSPA_clear(fluid_LADSPA_FxUnit_t* FxUnit);
  163. /* Purpose:
  164.  * Frees all memory and shuts down the Fx block.
  165.  * The synthesis thread must be stopped, when calling.
  166.  */
  167. void fluid_LADSPA_shutdown(fluid_LADSPA_FxUnit_t* FxUnit);
  168. /*
  169.  * fluid_handle_LADSPA_XXX
  170.  * Those functions are called from fluid_cmd, when a command is entered on the command line.
  171.  */
  172. /* Purpose:
  173.  * - Resets LADSPA Fx unit to bypass.
  174.  * - Removes all plugins from the reverb unit.
  175.  * - Releases all libraries.
  176.  * Note: It would be more efficient to keep the libraries. But then the user would have to restart fluidsynth each time
  177.  * a plugin is recompiled.
  178.  */
  179. int fluid_LADSPA_handle_clear(fluid_synth_t* synth, int ac, char** av, fluid_ostream_t out);
  180. /* Purpose:
  181.  * Loads the plugins added with 'ladspa_add' and then start the Fx unit.
  182.  * Internal processes:
  183.  * - load the LADSPA plugin libraries
  184.  * - instantiate the plugins
  185.  * - connect the plugins
  186.  * - set the bypass switch to 'not bypassed'
  187.  */
  188. int fluid_LADSPA_handle_start(fluid_synth_t* synth, int ac, char** av, fluid_ostream_t out);
  189. /* Purpose:
  190.  * Adds one plugin into the list of the LADSPA Fx unit.
  191.  * This is only allowed, while the Fx block is in 'bypass' state (after clear).
  192.  */
  193. int fluid_LADSPA_handle_add(fluid_synth_t* synth, int ac, char** av, fluid_ostream_t out);
  194. /* Purpose:
  195.  * Declares a user control node and a value; for further processing in ladspa_start.
  196.  */
  197. int fluid_LADSPA_handle_declnode(fluid_synth_t* synth, int ac, char** av, fluid_ostream_t out);
  198. /* Purpose:
  199.  * Assigns a value to the a user control node
  200.  */
  201. int fluid_LADSPA_handle_setnode(fluid_synth_t* synth, int ac, char** av, fluid_ostream_t out);
  202. #endif /* LADSPA */
  203. #endif  /* _FLUID_LADSPA_H */