text: #ifndef MPG123_SYNTH_H
  #define MPG123_SYNTH_H
  
  /* This is included inside frame.h, which is included in mpg123lib_intern.h,
     at the appropriate place.
     Explicit header inclusions here would cause circular dependencies. */
  
  /* The handle needs these types for selecting the decoding routine at runtime.
     Not just for optimization, mainly for XtoY, mono/stereo. */
  typedef int (*func_synth)(real *,int, mpg123_handle *,int );
  typedef int (*func_synth_mono)(real *, mpg123_handle *);
  typedef int (*func_synth_stereo)(real *, real *, mpg123_handle *);
  enum synth_channel  { c_plain=0, c_stereo, c_m2s, c_mono, c_limit };
  enum synth_resample
  {
  	 r_none=-1
  	,r_1to1=0
  #	ifndef NO_DOWNSAMPLE
  	,r_2to1
  	,r_4to1
  #	endif
  #	ifndef NO_NTOM
  	,r_ntom
  #	endif
  	,r_limit
  };
  enum synth_format
  {
  	 f_none=-1
  #	ifndef NO_16BIT
  	,f_16
  #	endif
  #	ifndef NO_8BIT
  	,f_8
  #	endif
  #	ifndef NO_REAL
  	,f_real
  #	endif
  #	ifndef NO_32BIT
  	,f_32
  #	endif
  	,f_limit
  };
  struct synth_s
  {
  	func_synth              plain[r_limit][f_limit];
  	func_synth_stereo      stereo[r_limit][f_limit];
  	func_synth_mono   mono2stereo[r_limit][f_limit];
  	func_synth_mono          mono[r_limit][f_limit];
  };
  
  #endif
  