{

      balance: {
        vars: {
	   in:      { type:real, value:0.5, doc:"Input vaue" },
	   out:     { type:real, doc:"Ouput value. Same as input value."},
	   inv_out: { type:real, doc:"1.0 minus output value."}
	}
      }

      audio_in: {
        vars: {
	  dev_label: { type:string,  doc:"Audio device label." },
          out:       { type:audio,   doc:"Audio output" },
          }
      }

      audio_out: {
        vars: {
          dev_label: { type:string,            doc:"Audio device label." },
          in:        { type:audio, flags:["src"], doc:"Audio input." }
          }
      }
      
      audioFileIn: {
        vars: {
          fname: {   type:string, doc:"Audio file name." },
          out:{      type:audio,  doc:"Audio file output" },
	  on_off:{   type:bool, value:false, doc:"1=on 0=off" },,
	  seekSecs:{ type:real, value:0.0, doc:"Seek to the specified seconds offset." } 
          eofFl:{     type:bool,  eofFl: true, doc:"Set the system 'halt' flag when the audio is completely read."},
          }
      }

      audioFileOut: {
        vars: {
          fname: { type:string,            doc:"Audio file name." },
	  bits:  { type:uint, value:32,    doc:"Audio file word width. (8,16,24,32,0=float32)."},
          in:    { type:audio, flags:["src"], doc:"Audio file input." }
          }
      }

      audio_gain: {
        vars: {
	   in:   { type:audio, flags:["src"], doc:"Audio input." },
	   gain: { type:real, value:1.0, doc:"Gain coefficient." }
	   out:  { type:audio,             doc:"Audio output." },
        }
      }

      audio_split: {
         vars: {
	   in:     { type:audio, flags:["src"], doc:"Audio input." },
	   select: { type:bool,              doc:"Enable/Disable each channel" }
	   gain:   { type:real, value:1.0,   doc:"Audio gain for each selected (output) channel." }
	   out:    { type:audio,             doc:"Audio output." },
	 }

        presets:
	{
	   mute_off: { gain:1   },
	   mute_on:  { gain:0 },
	}
      }

      audio_duplicate: {
         vars: {
	   in:        { type:audio, flags:["src"], doc:"Audio input."},
	   duplicate: { type: uint,            doc:"Count of times to repeat this channel." },
	   gain:      { type: real, value:1.0, doc:"Audio gain." },
	   out:       { type:audio,             doc:"Audio output containing repeat * input channel count channels."}
	 }
      }

      audio_merge: {
         vars: {
	   in0:  { type:audio, flags:["src"],            doc:"First audio input." },
	   in1:  { type:audio, flags:["src"],            doc:"Second audio input." },
	   in2:  { type:audio, flags:["src","src_opt"],  doc:"Third audio input." },
	   in3:  { type:audio, flags:["src","src_opt"],  doc:"Fourth audio input." },
	   in4:  { type:audio, flags:["src","src_opt"],  doc:"Fifth audio input." },
	   in5:  { type:audio, flags:["src","src_opt"],  doc:"Sixth audio input." },
	   in6:  { type:audio, flags:["src","src_opt"],  doc:"Seventh audio input." },
	   in7:  { type:audio, flags:["src","src_opt"],  doc:"Eigth audio input." },
	   gain: { type:real, value:1.0, doc:"Audio gain for each selected (output) channel." }
	   out:  { type:audio,             doc:"Audio output. Channel count is the sum of the input channel count." },
	 }
      }

      audio_mix: {
         vars: {
	   in0:   { type:audio, flags:["src"], doc:"First audio input." },
	   in1:   { type:audio, flags:["src"], doc:"Second audio input." },
	   gain0: { type:real, value:0.5,   doc:"Audio gain for input 0." },
	   gain1: { type:real, value:0.5,   doc:"Audio gain for input 1." },
	   out:   { type:audio,             doc:"Audio output. Channel count is max of the input signal channels." },
	 }
      }

      audio_delay: {
        vars: {
	   in:         { type:audio, flags:["src"],   doc:"Audio input." },
	   maxDelayMs: { type:real, value:1000.0   doc:"Maximum possible delay in milliseconds." },
	   delayMs:    { type:real,                doc:"Delay in milliseconds." },
	   out:        { type:audio,               doc:"Audio output." },
	}
      }


      sine_tone: {
        vars: {
	  srate:     { type:real, value:48000.0, doc:"Sine tone sample rate."}
	  chCnt:     { type:uint, value:2,       doc:"Output signal channel count."},
	  hz:        { type:real, value:440.0,   doc:"Frequency in Hertz."},
	  gain:      { type:real, value:0.8,     doc:"Signal frequency."},
          out:       { type:audio,               doc:"Audio output" },
          }

	presets: {
	  a: { hz:220 },
	  b: { hz:880 },
	}
      }

      pv_analysis: {
        vars: {
          in:		{ type:audio,    flags:["src"],   doc:"Audio input." },
	  maxWndSmpN:	{ type:uint,     value: 512,  doc:"Maximum window sample count." },
          wndSmpN:	{ type:uint,     value: 512,  doc:"Window sample count." },
          hopSmpN:	{ type:uint,     value:  128,  doc:"Hop sample count." },
          hzFl:		{ type:bool,     value: false, doc:"Calculate frequency via the method of phase changeof each bin." },
          out:		{ type:spectrum,               doc:"Spectrum output." }
          }

        presets: {

	  dry: {
	    wndSmpN:  512,
	    hopSmpN:  128	  
	  }

	  kc: {
	    wndSmpN:  512,
	    hopSmpN:  128
	  }
	  
          a: {
	    wndSmpN:  512,
	    hopSmpN:  128
          }

          b: {
	    wndSmpN:  512,
	    hopSmpN:  128
          }

          c: {
	    wndSmpN:  512,
	    hopSmpN:  128
          }

          d: {
	    wndSmpN:  512,
	    hopSmpN:  128
          }

          f_1: {
	    wndSmpN:  512,
	    hopSmpN:  128
          }
	  
          f_2: {
	    wndSmpN:  512,
	    hopSmpN:  128
          }

          f_3: {
	    wndSmpN:  512,
	    hopSmpN:  128
          }

          f_4: {
	    wndSmpN:  512,
	    hopSmpN:  128
          }

          g: {
	    wndSmpN:  512,
	    hopSmpN:  128
          }
	  
          g_a: {
	    wndSmpN:  512,
	    hopSmpN:  128
          }

          g_1_a: {
	    wndSmpN:  512,
	    hopSmpN:  128
          }

          g_1_d: {
	    wndSmpN:  512,
	    hopSmpN:  128
          }	  
	}
      }

      pv_synthesis: {
        vars: {
          in:  { type:spectrum,  flags:["src"],  doc:"Spectrum input." },
          out: { type:audio,                  doc:"Audio output." }
          }
      }

      spec_dist: {
        vars: {
          in:       { type:spectrum, flags:["src"], doc:"Spectrum input." },

	  bypass:   { type:bool, value: false, doc:"Copy input to output without transform."},
          ceiling:  { type:real, value: 30.0, doc:"Ceiling parameter."},
          expo:     { type:real, value:  2.0, doc:"Exponent parameter."},
          thresh:   { type:real, value: 54.0, doc:"Threshold parameter."},
          upr:      { type:real, value: -0.7, doc:"Upper slope parameter."},
          lwr:      { type:real, value:  2.0, doc:"Lower slope  parameter."},
          mix:      { type:real, value:  0.0, doc:"Basic/Bump Mix parameter."},

          out:      { type:spectrum,          doc:"Spectrum output." },

          }
          
        presets: {

	  dry: {
	       
	  }

	  kc: {
	    ceiling:  20.0,
	    expo:      2.0,
	    thresh:   65.0,
	    upr:       0.0,
	    lwr:       2.0,
	    mix:       0.0
	  }
	  
          a: {
            ceiling:  20.0
            expo:     2.0
            thresh:   60.0
            upr:      [   -1.1, -0.99],
            lwr:      2.0
            mix:      0.0
          }

          b: {
            ceiling:  20.0
            expo:      2.0
            thresh:   [   77.0, 74.0 ], 
            upr:      -0.5
            lwr:      [    3.0,  2.0 ],
            mix:       0.0
          }

          c: {
            ceiling:  20.0
            expo:      2.0
            thresh:   80.0
            upr:      -0.5
            lwr:       5.0
            mix:       0.0
          }

          d: {
            ceiling:  20.0
            expo:      2.0
            thresh:   70.0
            upr:    [ -3.9, 04.5]
            lwr:       4.0
            mix:       0.0
          }

          f_1: {
            ceiling:  20.0
            expo:      2.0
            thresh:   50.0
            upr:      -3.0
            lwr:       1.0
            mix:       0.0
          }
	  
          f_2: {
            ceiling:  20.0
            expo:      2.0
            thresh:   60.0
            upr:      -3.0
            lwr:       1.0
            mix:       0.0
          }

          f_3: {
            ceiling:  20.0
            expo:      2.0
            thresh:   55.0
            upr:      -3.0
            lwr:       1.0
            mix:       0.0
          }

          f_4: {
            ceiling:  20.0
            expo:      2.0
            thresh:   55.0
            upr:      -5.0
            lwr:       1.0
            mix:       0.0
          }

          g: {
            ceiling:  40.0
            expo:      8.0
            thresh:   [60.0 64.0]
            upr:      -0.7
            lwr:       8.0
            mix:       1.0
          }
	  
          g_a: {
            ceiling:  40.0
            expo:      2.0
            thresh:   [50.0 54.0]
            upr:      -0.7
            lwr:       2.0
            mix:       1.0
          }

          g_1_a: {
            ceiling:  20.0
            expo:      2.0
            thresh:   [50.0 54.0]
            upr:      -0.7
            lwr:       8.0
            mix:       1.0
          }

          g_1_d: {
            ceiling:  [60.0 64.0]
            expo:     [ 7.0  5.0]
            thresh:   [40.0 34.0]
            upr:      [-0.4 -0.3]
            lwr:      [ 7.0  5.0]
            mix:        1.0
          }
	}  
      }
      

      compressor: {
        vars: {
          in:        { type:audio, flags:["src"]  true, doc:"Audio input." },	  
          bypass:    { type:bool, value:  false, doc:"Bypass the compressor."},
	  igain:     { type:real, value:    1.0, doc:"Input gain."},
	  thresh:    { type:real, value:   90.0, doc:"Attack threshold in dB."},
	  ratio:     { type:real, value:    2.0, doc:"Compression ratio."},
	  atk_ms:    { type:real, value:   20.0, doc:"Attack time in milliseconds."},
	  rls_ms:    { type:real, value:   20.0, doc:"Release time in milliseconds."},
	  wnd_ms:    { type:real, value:  200.0, doc:"RMS calc. window length in milliseconds."},
	  maxWnd_ms: { type:real, value: 1000.0, doc:"Maximim (allocated) window length in milliseconds."},
	  ogain:     { type:real, value:    1.0, doc:"Output gain."},	  
          out:       { type:audio,               doc:"Audio output." },	
	}
	
	presets: {
	  dflt: {
	     igain:   3.0
	     thresh: 60.0
	     ratio:   5.0
	     atk_ms:  5.0
	     rls_ms: 20.0
	     wnd_ms:100.0
	     ogain:   1.0
	  }
	  
	  kc: {
	     bypass:   false
	     igain:     3.0
	     thresh:   80.0
	     ratio:     2.0
	     atk_ms:   20.0
	     rls_ms: 1000.0
	     wnd_ms:  200.0
	     ogain:     1.0
	  }

	  input: {
              bypass: false
  	      igain:   2.0
	      thresh: 30.0
	      ratio:  12.0
	      atk_ms:  5.0
	      rls_ms: 20.0
	      wnd_ms: 20.0
	      ogain:   0.5	  
	  }

	  dry: {
	       
	  }

	   a: {
	     igain: 6.0
	     ogain: 1.0
	  }

	   b: {
	     igain: 10.0
	     ogain: 1.0
	  }

	   c: {
	     igain: 11.0
	     ogain: 1.0
	  }

	  d: {
	     igain: 9.0
	     ogain: 1.0
	  }

	  f_1: {
	     igain: 6.0
	     ogain: 1.0
	  }

	  f_2: {
	     igain: 6.0
	     ogain: 1.0
	  }

	  f_3: {
	     igain: 6.0
	     ogain: 1.0
	  }
	  
	  f_4: {
	     igain: 6.0
	     ogain: 1.0
	  }
	  
	  g: {
	     igain: 10.0
	     ogain: 0.75	
	  }
	  
	  g_a: {
	     igain: 10.0
	     ogain: 0.75
	  }

	  g_1_a: {
	     igain: 10.0
	     ogain: 0.75
	  }

	  g_1_d: {
	     igain: 10.0
	     ogain: 0.75
	  }


	}
      }

      limiter: {
        vars: {
          in:        { type:audio, flags:["src"]  true, doc:"Audio input." },	  
          bypass:    { type:bool, value:  false, doc:"Bypass the limiter."},
	  igain:     { type:real, value:    1.0, doc:"Input gain."},
	  thresh:    { type:real, value:    0.0, doc:"Linear (0.0-1.0) threshold."},
	  ogain:     { type:real, value:    1.0, doc:"Output gain."},	  
          out:       { type:audio,               doc:"Audio output." },	
	}
	
	presets: {
	    dflt: {
		bypass: false,
		igain:   1.0
		thresh:  0.9,
		ogain:   1.0
	  }

	}
      }

      dc_filter: {
        vars: {
          in:        { type:audio, flags:["src"], doc:"Audio input." },	  
          bypass:    { type:bool, value:  false, doc:"Bypass the DC filter."},
	  gain:      { type:real, value:    1.0, doc:"Output gain."},
          out:       { type:audio,               doc:"Audio output." },	
	}
	
	presets: {
	    dflt: {
		bypass: false,
		gain:   1.0
	  }

	}
      }

      audio_meter: {
        vars: {
	  in:      { type:audio, flags:["src"], doc:"Audio input." },
	  dbFl:    { type:bool, value: true, doc:"Output in Decibels." },
	  wndMs:   { type:real, value: 100.0, doc:"RMS window length." },
	  peakDb:  { type:real, value: -10.0, doc:"Peak threshold." },
	  out:     { type:real, value: 0.0,  doc:"Meter output." },
	  peakFl: { type:bool, value: false, doc:"Peak output." }
	  clipFl: { type:bool, value: false, doc:"Clip indicator output."}
	}
      }

      audio_marker: {
        vars: {
	   in:   { type:audio, flags:["src"], doc:"Audio input." },
	   mark: { type:real, value:1.0, doc:"Marker value." }
	   out:  { type:audio,             doc:"Audio output." },
        }
      }

    
}
