|
|
|
/*
|
|
|
|
|
|
|
|
Copyright (C) 2000-2001 Stefan Westerfeld
|
|
|
|
stefan@space.twc.de
|
|
|
|
2001-2003 Matthias Kretz
|
|
|
|
kretz@kde.org
|
|
|
|
2002-2003 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 as published by the Free Software Foundation; either
|
|
|
|
version 2 of the License, or (at your option) any later version.
|
|
|
|
|
|
|
|
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 artsmodules.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 <artsmidi.idl>
|
|
|
|
|
|
|
|
module Arts {
|
|
|
|
|
|
|
|
// Arithmetic & Mixing
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Divides two audio streams
|
|
|
|
*/
|
|
|
|
interface Synth_DIV : SynthModule {
|
|
|
|
in audio stream invalue1,invalue2;
|
|
|
|
out audio stream outvalue;
|
|
|
|
default invalue1, invalue2;
|
|
|
|
};
|
|
|
|
|
|
|
|
interface Synth_XFADE : SynthModule {
|
|
|
|
in audio stream invalue1,invalue2,percentage;
|
|
|
|
out audio stream outvalue;
|
|
|
|
};
|
|
|
|
|
|
|
|
interface Synth_AUTOPANNER : SynthModule {
|
|
|
|
in audio stream invalue, inlfo;
|
|
|
|
out audio stream outvalue1, outvalue2;
|
|
|
|
};
|
|
|
|
|
|
|
|
// Delays
|
|
|
|
|
|
|
|
interface Synth_DELAY : SynthModule {
|
|
|
|
attribute float maxdelay;
|
|
|
|
in audio stream invalue, time;
|
|
|
|
out audio stream outvalue;
|
|
|
|
};
|
|
|
|
|
|
|
|
interface Synth_CDELAY : SynthModule {
|
|
|
|
attribute float time;
|
|
|
|
in audio stream invalue;
|
|
|
|
out audio stream outvalue;
|
|
|
|
};
|
|
|
|
|
|
|
|
// Envelopes
|
|
|
|
|
|
|
|
interface Synth_ENVELOPE_ADSR : SynthModule {
|
|
|
|
in audio stream active,invalue,attack,decay,sustain,release;
|
|
|
|
out audio stream outvalue,done;
|
|
|
|
};
|
|
|
|
|
|
|
|
interface Synth_PSCALE : SynthModule {
|
|
|
|
attribute float top;
|
|
|
|
in audio stream invalue, pos;
|
|
|
|
out audio stream outvalue;
|
|
|
|
};
|
|
|
|
|
|
|
|
// Effects
|
|
|
|
|
|
|
|
interface Synth_TREMOLO : SynthModule {
|
|
|
|
in audio stream invalue, inlfo;
|
|
|
|
out audio stream outvalue;
|
|
|
|
};
|
|
|
|
|
|
|
|
interface Synth_FX_CFLANGER : SynthModule {
|
|
|
|
attribute float mintime, maxtime;
|
|
|
|
in audio stream invalue, lfo;
|
|
|
|
out audio stream outvalue;
|
|
|
|
};
|
|
|
|
|
|
|
|
interface Synth_COMPRESSOR : SynthModule {
|
|
|
|
attribute float attack, release, threshold, ratio, output;
|
|
|
|
in audio stream invalue;
|
|
|
|
out audio stream outvalue;
|
|
|
|
};
|
|
|
|
|
|
|
|
// Filters
|
|
|
|
|
|
|
|
interface Synth_PITCH_SHIFT : SynthModule {
|
|
|
|
attribute float speed, frequency;
|
|
|
|
in audio stream invalue;
|
|
|
|
out audio stream outvalue;
|
|
|
|
};
|
|
|
|
|
|
|
|
interface Synth_PITCH_SHIFT_FFT : SynthModule {
|
|
|
|
attribute float speed, scaleFactor;
|
|
|
|
attribute long frameSize, oversample;
|
|
|
|
in audio stream inStream;
|
|
|
|
out audio stream outStream;
|
|
|
|
};
|
|
|
|
|
|
|
|
interface Synth_SHELVE_CUTOFF : SynthModule {
|
|
|
|
in audio stream invalue,frequency;
|
|
|
|
out audio stream outvalue;
|
|
|
|
};
|
|
|
|
|
|
|
|
interface Synth_BRICKWALL_LIMITER : SynthModule {
|
|
|
|
in audio stream invalue;
|
|
|
|
out audio stream outvalue;
|
|
|
|
};
|
|
|
|
|
|
|
|
interface Synth_STD_EQUALIZER : SynthModule {
|
|
|
|
attribute float low, mid, high, frequency, q;
|
|
|
|
in audio stream invalue;
|
|
|
|
out audio stream outvalue;
|
|
|
|
};
|
|
|
|
|
|
|
|
interface Synth_RC : SynthModule {
|
|
|
|
attribute float b, f;
|
|
|
|
in audio stream invalue;
|
|
|
|
out audio stream outvalue;
|
|
|
|
};
|
|
|
|
|
|
|
|
interface Synth_MOOG_VCF : SynthModule {
|
|
|
|
attribute float frequency, resonance;
|
|
|
|
in audio stream invalue;
|
|
|
|
out audio stream outvalue;
|
|
|
|
};
|
|
|
|
|
|
|
|
interface Synth_ATAN_SATURATE : SynthModule {
|
|
|
|
attribute float inscale;
|
|
|
|
in audio stream invalue;
|
|
|
|
out audio stream outvalue;
|
|
|
|
};
|
|
|
|
|
|
|
|
// Midi + Sequencing
|
|
|
|
|
|
|
|
interface Synth_MIDI_TEST : SynthModule, MidiPort {
|
|
|
|
attribute string filename;
|
|
|
|
attribute string busname;
|
|
|
|
};
|
|
|
|
|
|
|
|
interface Synth_SEQUENCE : SynthModule {
|
|
|
|
attribute float speed;
|
|
|
|
attribute string seq;
|
|
|
|
out audio stream frequency, pos;
|
|
|
|
};
|
|
|
|
|
|
|
|
interface Synth_SEQUENCE_FREQ : SynthModule {
|
|
|
|
attribute float speed;
|
|
|
|
attribute string seq;
|
|
|
|
out audio stream frequency, pos;
|
|
|
|
};
|
|
|
|
|
|
|
|
// Oscillation & Modulation
|
|
|
|
|
|
|
|
interface Synth_FM_SOURCE : SynthModule {
|
|
|
|
in audio stream frequency, modulator, modlevel;
|
|
|
|
out audio stream pos;
|
|
|
|
};
|
|
|
|
|
|
|
|
// Waveforms
|
|
|
|
|
|
|
|
interface Synth_WAVE_TRI : SynthModule {
|
|
|
|
in audio stream pos;
|
|
|
|
out audio stream outvalue;
|
|
|
|
};
|
|
|
|
|
|
|
|
interface Synth_NOISE : SynthModule {
|
|
|
|
out audio stream outvalue;
|
|
|
|
};
|
|
|
|
|
|
|
|
interface Synth_WAVE_SQUARE : SynthModule {
|
|
|
|
in audio stream pos;
|
|
|
|
out audio stream outvalue;
|
|
|
|
};
|
|
|
|
|
|
|
|
interface Synth_WAVE_SOFTSAW : SynthModule {
|
|
|
|
in audio stream pos;
|
|
|
|
out audio stream outvalue;
|
|
|
|
};
|
|
|
|
|
|
|
|
interface Synth_WAVE_PULSE : SynthModule {
|
|
|
|
attribute float dutycycle;
|
|
|
|
in audio stream pos;
|
|
|
|
out audio stream outvalue;
|
|
|
|
};
|
|
|
|
|
|
|
|
enum SynthOscWaveForm {
|
|
|
|
soWaveSine,
|
|
|
|
soWaveTriangle,
|
|
|
|
soWaveSawRise,
|
|
|
|
soWaveSawFall,
|
|
|
|
soWavePeakRise,
|
|
|
|
soWavePeakFall,
|
|
|
|
soWaveMoogSaw,
|
|
|
|
soWaveSquare,
|
|
|
|
soWavePulseSaw
|
|
|
|
};
|
|
|
|
|
|
|
|
interface Synth_OSC : SynthModule {
|
|
|
|
/* streams */
|
|
|
|
in audio stream infrequency, modulation, inpwm, insync;
|
|
|
|
out audio stream outvalue, outsync;
|
|
|
|
|
|
|
|
attribute SynthOscWaveForm waveForm;
|
|
|
|
|
|
|
|
/* FM */
|
|
|
|
attribute boolean fmExponential;
|
|
|
|
attribute float fmStrength;
|
|
|
|
attribute float fmSelfStrength;
|
|
|
|
|
|
|
|
/* phase, frequency, fineTune */
|
|
|
|
attribute float phase;
|
|
|
|
attribute float frequency;
|
|
|
|
attribute long fineTune;
|
|
|
|
|
|
|
|
/* pulse width */
|
|
|
|
attribute float pulseWidth;
|
|
|
|
attribute float pulseModStrength;
|
|
|
|
};
|
|
|
|
|
|
|
|
interface Synth_PLAY_PAT : SynthModule {
|
|
|
|
attribute string filename;
|
|
|
|
in audio stream frequency;
|
|
|
|
out audio stream outvalue;
|
|
|
|
};
|
|
|
|
|
|
|
|
// Others
|
|
|
|
|
|
|
|
/**
|
|
|
|
* this interface currently has probably a problem - usually, if you are
|
|
|
|
* using such a module, you would expect that you can specify the filename
|
|
|
|
* with it - BUT, if you allow this, then any instrument definition file
|
|
|
|
* (.arts) and similar might overwrite every file the user can access, which
|
|
|
|
* might not be what you want, so I currently save it to a file in
|
|
|
|
* /tmp/mcop-<username>/<filename>.wav (which might be unlucky since the user
|
|
|
|
* might not have too much space there)
|
|
|
|
*/
|
|
|
|
interface Synth_CAPTURE_WAV : SynthModule {
|
|
|
|
attribute string filename;
|
|
|
|
default in audio stream left, right;
|
|
|
|
};
|
|
|
|
|
|
|
|
// Tests
|
|
|
|
|
|
|
|
interface Synth_NIL : SynthModule {
|
|
|
|
};
|
|
|
|
|
|
|
|
interface Synth_DEBUG : SynthModule {
|
|
|
|
attribute string comment;
|
|
|
|
in audio stream invalue;
|
|
|
|
};
|
|
|
|
|
|
|
|
interface Synth_DATA : SynthModule {
|
|
|
|
attribute float value;
|
|
|
|
out audio stream outvalue;
|
|
|
|
};
|
|
|
|
|
|
|
|
interface Synth_MIDI_DEBUG : SynthModule, MidiPort {
|
|
|
|
};
|
|
|
|
|
|
|
|
// EXPERIMENTAL MIDI
|
|
|
|
interface ObjectCache {
|
|
|
|
void put(object obj, string name);
|
|
|
|
object get(string name);
|
|
|
|
};
|
|
|
|
|
|
|
|
interface MidiReleaseHelper : SynthModule {
|
|
|
|
attribute SynthModule voice;
|
|
|
|
attribute string name;
|
|
|
|
attribute ObjectCache cache;
|
|
|
|
|
|
|
|
boolean terminate();
|
|
|
|
in audio stream done;
|
|
|
|
};
|
|
|
|
// END EXPERIMENTAL MIDI
|
|
|
|
|
|
|
|
};
|
|
|
|
|