/*  This file is part of the KDE project
    Copyright (C) 2002 Arnold Krille <arnold@arnoldarts.de>

    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Library General Public
    License version 2 as published by the Free Software Foundation.

    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Library General Public License for more details.

    You should have received a copy of the GNU Library General Public License
    along with this library; see the file COPYING.LIB.  If not, write to
    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
    Boston, MA 02110-1301, USA.

*/

/*
 * DISCLAIMER: The interfaces in envmixer.idl (and the derived .cpp/.h files)
 *             DO NOT GUARANTEE BINARY COMPATIBILITY YET.
 *
 * They are intended for developers. You shouldn't expect that applications in
 * binary form will be fully compatibile with further releases of these
 * interfaces.
 */

#include <artsflow.idl>
#include <artsgui.idl>
#include <artsmodulescommon.idl>

module Arts {

	interface StereoToMono : Arts::SynthModule {
		attribute float pan; // From -1(left) to +1(right)
		in audio stream inleft, inright;
		out audio stream outmono;
	};

	interface MonoToStereo : Arts::SynthModule {
		attribute float pan; // Same as StereoToMono
		in audio stream inmono;
		out audio stream outleft, outright;
	};

	interface StereoBalance : Arts::StereoEffect {
		attribute float balance;
	};
	interface StereoBalanceGuiFactory : Arts::GuiFactory {};

	interface FiveBandMonoComplexEQ : Arts::StereoEffect {
		readonly attribute StereoToMono s2m;
		attribute float lowfreq, lowq, lowgain;
		attribute float mid1freq, mid1q, mid1gain;
		attribute float mid2freq, mid2q, mid2gain;
		attribute float mid3freq, mid3q, mid3gain;
		attribute float highfreq, highq, highgain;
		readonly attribute MonoToStereo m2s;
	};
	interface FiveBandMonoComplexEQGuiFactory : Arts::GuiFactory {};

	interface Synth_VOICE_REMOVAL : StereoEffect {
		attribute float position, frequency;
	};

	interface VoiceRemovalGuiFactory : GuiFactory {
	};

	interface Synth_STEREO_COMPRESSOR : StereoEffect {
		attribute float attack, release, threshold, ratio, output;
		attribute boolean thru;
	};

	interface StereoCompressorGuiFactory : GuiFactory {
	};

	interface Synth_STEREO_PITCH_SHIFT : StereoEffect {
		attribute float speed, frequency;
	};

	interface Synth_STEREO_PITCH_SHIFT_FFT : StereoEffect {
		attribute float speed, scaleFactor;
		attribute long frameSize, oversample;
	};

	interface Synth_STEREO_FIR_EQUALIZER : StereoEffect {
		attribute sequence<GraphPoint> frequencies;
		attribute long taps;
	};

	interface StereoFirEqualizerGuiFactory : GuiFactory {
	};

	interface Synth_FREEVERB : StereoEffect {
		attribute float roomsize, damp, wet, dry, width, mode;
	};

	interface FreeverbGuiFactory : GuiFactory {
	};

	interface Effect_WAVECAPTURE : StereoEffect {
		attribute string filename;
	};

	interface StereoVolumeControlGui : LayoutBox  {
		/**
			Creates a Gui for a StereoVolumeControl.
			This should be the most often used function.
		*/
		void constructor( Arts::StereoVolumeControl svc );
		/*
			The direction from min to max for all elements.
			The elements will be order 90 degree clockwise to it.
		*/
		//attribute Direction direction; // Is already in LayoutBox

		/// The title of this volumecontrol
		attribute string title;
		/// the minimum and maximum value for levelmeter(only min, max is 0dB) and volumecontrol
		attribute float dbmin, dbmax;

		/**
			The elements separate:
				- the two levelmeter
				- the volumefader
				- the tickmarks for levelmeter and volumefader
				- the Label showing the title of the VolumeControl
			Use this only if you want to connect them to own devices.
		*/
		readonly attribute LevelMeter left, right;
		readonly attribute VolumeFader fader;
		readonly attribute Tickmarks levelmetertickmarks, volumefadertickmarks;
		readonly attribute Label label;

		/**
			Couples the two VolumeSlider
			Is currently useless since StereoVolumeControl::scaleFactor is
			only one value for both channels.
		*/
		attribute boolean couple;

	};

	interface StereoVolumeControlGuiFactory : Arts::GuiFactory {};
};

