ecasound(1)
๐ธ ecasound(1) โ NAME ๐ธ
hey bestie, welcome to the ecasound(1) manual page, part one of six ๐ grab a snack, we're doing this.
ecasound โ sample editor, multitrack recorder, fx-processor, etc.
โจ SYNOPSIS โจ
ecasound [ general_options ] { [ chain_setup ] [ effect_setup ] [ input_setup ] [ output_setup ] }
๐ฆ DESCRIPTION ๐ฆ
Ecasound is a software package designed for multitrack audio processing. It can be used for simple tasks like audio playback, recording and format conversions, as well as for multitrack effect processing, mixing, recording and signal recycling. Ecasound supports a wide range of audio inputs, outputs and effect algorithms. Effects and audio objects can be combined in various ways, and their parameters can be controlled by operator objects like oscillators and MIDI-CCs. A versatile console mode user-interface is included in the package.
like. the range?? iconic. ๐
๐ OPTIONS ๐
Note! All options except those mentioned in ecasound options and Global options, can be used in ecasound chainsetup files (.ecs).
๐ ECASOUND OPTIONS ๐
These options are parsed and handled by the ecasound frontend binary and are not passed to backend library. This means that these options may not work in other applications that use ecasound libraries for their functionality.
-cโ Starts ecasound in interactive mode. In interactive mode you can control ecasound with simple commands ("start", "stop", "pause", etc.). Seeecasound-iam.-Cโ Disables ecasound's interactive mode (see-cand-K).-Dโ Print all debug information to stderr (unbuffered, plain output without ncurses).-s[:]chainsetup-fileโ Create a new chainsetup from file chainsetup-file and add it to the current session. Chainsetup files commonly have a filename ending to the.ecsextension. A chainsetup can contain inputs, outputs, chains, effects, controllers โ i.e. objects one one specific configuration of audio processing elements. A session, on the other hand, is a collection of one or more chainsetups. Only one of the chainsetups may be connected (i.e. it can be run/processed). But it is possible to have another chainsetup select (i.e. can be configured) while other one is current connteced (i.e. running).-E "cmd1 [[args] ; cmd2 args ; ... ; cmdN]"โ Execute a set of Ecasound Interactive mode (EIAM) commands at launch. These commands are executed immediately after ecasound is started. If the command line contains sufficient options to create a valid chainsetup that will be executed, the launch commands are executed after the other command line options are parsed, but before the processing engine is started. Note that this command is a feature of the ecasound frontend binary and not supported by the library backend. This means that other clients may not support the-Eoption, and also that the launch commands are not saved as part of chainsetup or session state.--serverโ Enables the so called NetECI mode, in which ecasound can be controlled remotely over a socket connection. When activated, clients can connect to the running ecasound session, and use interactive mode commands to control and observe ecasound processing.
The NetECI protocol is defined in Ecasound's Programmer Guide
One example client using this feature is ecamonitor(1). This utility is included in the Ecasound distribution package (requires a working Python environment).
Warning! If the machine running ecasound, is connected to a public network, be sure to block ecasound's port in your firewall! As there is no access control implemented for incoming connections, anyone can otherwise connect, control and observe your ecasound sessions.
This option replaces --daemon (deprecated in 2.6.0).
--server-tcp-port=NNNโ Set the TCP port used by the daemon mode. By default ecasound will use port number2868. This option replaces--daemon-port(deprecated in 2.6.0).--no-serverโ Disable ecasound's daemon mode. This is the default. This option replaces--nodaemon(deprecated in 2.6.0).--osc-udp-port=NNNโ Enables support for Open Source Control (OSC). Ecasound will listen for incoming OSC messages on UDP port NNN. Ecasound's OSC interface is documented at:http://ecasound.git.sourceforge.net/git/gitweb.cgi?p=ecasound/ecasound;a=blob;f=Documentation/ecasound_osc_interface.txt;hb=HEAD
Note that OSC support is still experimental and the interface might change in later versions of Ecasound.
This option was added to ecasound 2.7.0.
--keep-running,-Kโ Do not exit when processing is finished/stopped. Only affects non-interactive operating mode (see-c/-C). Option added to ecasound 2.4.2.--help,-hโ Show this help.--versionโ Print version info.
๐ GLOBAL OPTIONS ๐
-d,-dd,-dddโ Increase the amount of printed debug messages.-dadds some verbosity, while-dddresults in very detailed output.-d:debug_levelโ Set the debug level mask to debug_level. This a bitmasked value with the following classes: errors (1), info (2), subsystems (4), module_names (8), user_objects (16), system_objects32, functions (64), continuous (128) and eiam_return_values (256). Default is271(1+2+4+8+256). See sourcode documentation for theECA_LOGGERclass for more detailed information.-R[:]path-to-fileโ Use ecasound resource file (seeecasoundrcman page) path-to-file as the only source of setting resource value. Specifying this option will disable the normal policy of querying both global and user (if exists) resource files.-qโ Quiet mode, no output. Same as-d:0.
๐ง GENERAL CHAINSETUP OPTIONS ๐ง
-a:chainname1, chainname2, ...โ Selects active signal chains. All inputs and outputs following this-aoption are assigned to selected chains (until a new-aoption is specified). When adding effects, controllers and other chain operators, only one chain can be selected at a time. If no-aoption has been given, chaindefaultis used instead when adding objects. Chain nameallis also reserved. It will cause all existing chains to be selected. By giving multiple-aoptions, you can control to which chains effects, inputs and outputs are assigned to. Look at the EXAMPLES section for more detailed info about the usage of this option.-n:nameโ Sets the name of chainsetup to name. If not specified, defaults either to"command-line-setup"or to the file name from which chainsetup was loaded. Whitespaces are not allowed.-xโ Truncate outputs. All output object are opened in overwrite mode. Any existing files will be truncated.-Xโ Open outputs for updating. Ecasound opens all outputs โ if target format allows it โ in readwrite mode.-z:featureโ Enables feature. Most features can be disabled using notation-z:nofeature.-z:db,dbsizeenables double-buffering for audio objects that support it (dbsize=0for default, otherwise buffer size in sample frames).-z:nodbdisables double-buffering.-z:intbufand-z:nointbufcontrol whether extra internal buffering is allowed for realtime devices. Disabling this can reduce latency times in some situations. With-z:xruns, processing will be halted if an under/overrun occurs.-z:multitrackandz:nomultitrackcan be used to force ecasound to enable or disable multitrack-mode. In rare cases you may want to explicitly specify the recording offset with-z:multitrack,offset-in-samples. The offset is the amount of samples skipped when recording from real-time inputs.-z:psrenables the precise-sample-rates mode for OSS-devices.-z:mixmode,sumenables mixing mode where channels are mixed by summing all channels. The default is-z:mixmode,avg, in which channels are mixed by averaging. Mixmode selection was first added to ecasound 2.4.0. Seeecasoundrcman page.
โญ CHAINSETUP BUFFERING AND PERFORMANCE OPTIONS โญ
-B:buffering_modeโ Selects the default buffering mode. Mode is one of:auto(default),nonrt,rt,rtlowlatency.-b:buffer_sizeโ Sets the processing engine buffer size in samples. The size must be an exponent of 2, and it is independent of channel count (e.g.-b:1024at 48kHz will result in 21.333ms buffer length whether input is mono, stereo or 5.1).
This is an important option as this defines the length of one processing engine iteration and affects ecasound behaviour in many ways. If not explicitly specified, ecasound will try to choose an optimal value based on current buffering mode (see -B option). For real-time processing, you can try to set this as low as possible to reduce the processing delay. Some machines can handle buffer values as low as 64 and 128. In some circumstances (for instance when using oscillator envelopes) small buffer sizes will make envelopes act more smoothly. When not processing in real-time (all inputs and outputs are normal files), larger values may help to avoid buffer overruns, lower CPU usage and/or otherwise improve performance.
Note that when any JACK input/outputs are used, the buffer size setting is overridden and set to period/buffer size reported by JACK server (e.g. jackd's -p option). It is not possible to turn off this behaviour.
If not explicitly specified, the default buffer size is chosen based on current buffering mode (see -B).
-r:sched_priorityโ Use realtime scheduling policy (SCHED_FIFO). This is impossible if ecasound doesn't have root priviledges.
Beware! This gives better performance, but can cause total lock-ups if something goes wrong.
The sched_priority can be omitted (0=omitted). If given, this is the static priority to the highest priority ecasound thread. Other ecasound threads run with priority sched_priority-1...n. Value -1 can be used to disable raised-priority mode.
-z:featureโ the relevant features are-z:db,xxx(or-z:nodb) and-z:intbuf(or-z:nointbuf). Peep the section General chainsetup options for the deets. โจ
๐ฅ PROCESSING CONTROL ๐ฅ
-t:secondsโ sets the processing time in seconds (and bestie, it doesn't have to be an integer value, like2.5is totally fine). If you don't set the processing time, the engine stops when all inputs are finished. This option is equivalent to thecs-set-lengthEIAM command. And a special-case value of-1will set the chainsetup length according to the longest input object. ๐-tlโ enables looping. When processing is finished, the engine will start again from the beginning. This option is equivalent to thecs-loopEIAM command. ๐
๐ง INPUT/OUTPUT SETUP ๐ง
See the ecasound user's guide for more detailed documentation. ๐
-G:mgrtype,optstringโ sets options for the audio object manager typemgrtype. For available options, see OBJECT TYPE SPECIFIC NOTES below. ๐-f:sample_format,channel,sample-rate,interleavingโ sets the audio stream parameters for subsequent audio objects.
To set different parameters for different audio objects, multiple -f options have to be specified (note the ordering โ the -f options should precede the audio objects for them to have any effect). See documentation for -i and -o options.
When an audio object is opened (e.g. a file or sound device is opened, or connection is made to a sound server), the audio stream parameters are passed to the object. It should be noted that not all audio objects allow you to set any or all of the parameters. For instance, when opening existing audio files, many file formats have a header describing the file audio parameters. In these cases the audio file header overrides the parameters passed with the -f option. Similarly, when creating JACK inputs and outputs, the JACK server mandates the sampling rate and sample format.
If no -f option is specified, or some of the argument fields are left empty (e.g. -f:,2,44100), ecasound will use default values. These default values are defined in the ecasoundrc configuration file. See ecasoundrc(5) manual page.
Note that ecasound opens out files by default in update mode. Unless the option -x (overwrite outputs) is given, audio parameters of an existing audio file take preference over the params set with -f.
Sample format is given as a formatted string. The first letter is either "u", "s" or "f" (unsigned, signed, floating point). The following number specifies sample size in bits. If the sample is little endian, "_le" is added to the end. Similarly if big endian, "_be" is added. If endianness is not specified, host byte-order is used. Currently supported formats are "u8" (same as "8"), "s16_le" (same as "16"), "s16_be", "s24_le", "s24_be", "s32_le", "s32_be", "f32_le" and "f32_be". An empty string "" picks the system default sample format.
The 4th parameter defines the channel layout. The available options are i (interleaved) and n (noninterleaved). With the noninterleaved setting, ecasound will process samples one channel at a time, and the blocksize is set with -b. The default setting is i. ๐
-y:secondsโ sets the starting position for the last specified input/output. If you need more flexible control over audio objects, you should use the.ewfformat. ๐ฏ-i[:]input-file-or-device[,params]โ specifies a new input source that is connected to all selected chains (chains are selected with-a:...). Connecting multiple inputs to the same chain is not possible, but one input can be connected to multiple chains. Input can be a file, device, or some other audio object (see below). If the input is a file, its type is determined using the file name extension. If the object name contains any commas, the name must be enclosed in backquotes to avoid confusing the parser. Currently supported formats are RIFF WAVE files (.wav), audio-cd tracks (.cdr), ecasound EWF files (.ewf), RAW audio data (.raw) and MPEG audio files (.mp2,.mp3). More audio formats are supported via libaudiofile and libsndfile libraries (see documentation below). MikMod is also supported (.xm,.mod,.s3m,.it, etc). MIDI files (.mid) are supported using Timidity++. Similarly Ogg Vorbis (.ogg) can be read, and written ifogg123andvorbizetools are installed; FLAC files (.flac) withflaccommand-line tools or using libsndfile; and AAC files (.aac/.m4a/.mp4) withfaad2/faactools. Supported realtime devices are OSS audio devices (/dev/dsp*), ALSA audio and loopback devices and JACK audio subsystem. If no inputs are specified, the first non-option (doesn't start with-) command line argument is considered to be an input. ๐ค-o[:]output-file-or-device[,params]โ works in the same way as the-ioption. If no outputs are specified, the default output device is used (see~/.ecasoundrc). If the object name contains any commas, the name must be enclosed in backquotes to avoid confusing the parser. Note, many object types do not support output (e.g. MikMod, MIDI and many others). ๐
๐ OBJECT TYPE SPECIFIC NOTES ๐
๐๏ธ ALSA devices - alsa ๐๏ธ
When using ALSA drivers, instead of a device filename, you need to use the following option syntax: -i[:]alsa,pcm_device_name. ๐
โก ALSA direct-hw and plugin access - alsahw, alsaplugin โก
It's also possible to use a specific card and device combination using the following notation: -i[:]alsahw,card_number,device_number,subdevice_number. Another option is the ALSA PCM plugin layer. It works just like the normal ALSA pcm-devices, but with automatic channel count and sample format conversions. Option syntax is -i[:]alsaplugin,card_number,device_number,subdevice_number. ๐ฅ
๐จ aRts input/output - arts ๐จ
If enabled at compile-time, ecasound supports audio input and output using aRts audio server. Option syntax is -i:arts, -o:arts. ๐ต
๐ Audio file sequencing - audioloop, select, playat ๐
Ecasound provides a set of special audio object types that can be used for temporal sequencing of audio files โ i.e. looping, playing only a select portion of a file, playing file at a specific time, and other such operations. ๐ฐ๏ธ
Looping is possible with -i:audioloop,file.ext,params. The file name (or any object type understood by Ecasound) given as the second parameter is played back continuously, looping back to the beginning when the end of file is reached. Any additional parameters given are passed unaltered to the file object. Parameters 3...N are passed as is to the child object (i.e. -i audioloop,foo.wav,bar1,bar2 will pass parameters bar1,bar2 to the foo.wav object).
To select and use only a specific segment of an audio object, the -i:select,start-time,duration,file.ext,params can be used. This will play duration of file.ext, starting at start-time. The time values should be given as seconds (e.g. "2.25"), or as samples (e.g. "25000sa"). Parameters 4...N are passed as is to the child object.
To play an audio object at a given moment in time, the -i:playat,play-at-time,file.ext,params can be used. This will play file.ext after position reaches play-at-time. The time values should be given as seconds (e.g. "2.25"), or as samples (e.g. "25000sa"). Parameters 2...N are passed as is to the child object. ๐ถ
๐ Ecasound Wave Files (EWF) - *.ewf ๐
A special file format that allows one to slice and loop full (or segments) of audio files. This format is specific to Ecasound. See ecasound user's guide for more detailed information. ๐
See also audio object types audioloop, select and playat. ๐
๐ง JACK input/outputs - Overview ๐ง
JACK is a low-latency audio server that can be used to connect multiple independent audio applications to each other. It is different from other audio server efforts in that it has been designed from the ground up to be suitable for low-latency professional audio work. ๐๏ธ
๐๏ธ JACK input/outputs - jack ๐๏ธ
Ecasound provides multiple ways to communicate with JACK servers. To create a JACK input or output object, one should use -i jack and -o jack. These create JACK client ports "ecasound:in_N" and "ecasound:out_n" respectively (N is replaced by the channel number). Ecasound automatically creates one JACK port for each channel (number of channels is set with -f:bits,channels,rate option).
It is important to note that by default JACK ports are not connected anywhere (e.g. to soundcard input/outputs, or to other apps). One thus has to connect the ports with an external program (e.g. "QJackCtl" or "jack_connect"). ๐
๐๏ธ JACK input/outputs - jack,clientname,portprefix ๐๏ธ
"jack,clientname" For simple use scenarios, ecasound provides a way to autoconnect the ecasound ports. This can be done by giving the peer client name as the second parameter to the "jack" object, e.g. -o jack,clientname. As an example, -o jack,system will create an output that is automatically connected to outputs of the default system soundcard. The client parameter can be omitted, in which case no automatic connections are made.
If one needs to change the port prefix (e.g. "in" in client name "ecasound:in_N"), the prefix can be specified as the third parameter to the "jack" object, e.g. -o jack,,fxout. Also the third parameter can be omitted, in which case the default prefixes "in" and "out" are used. ๐
JACK input/outputs โ jack_multi</p> ๐ฆ
okay so you know the jack object type? there's a lil glow-up variant called jack_multi and it's lowkey iconic. full object syntax is:
jack_multi,destport1,...,destportN
the way it works: when a jack_multi object gets connected to a JACK server, its first channel goes to JACK port destport1, its second channel goes to destport2, and so on down the line, periodt. for example:
-f:32,2,44100 -o jack_multi,foo:in,bar:in
creates a stereo ecasound output object with its left and right channels routed to two different JACK clients. split slay ๐
heads up bestie: the destination ports must be active when the ecasound engine is launched, or the connections literally cannot be established. no cap.
and if destination ports aren't specified for all channels, or you pass zero length strings in there, those ports just don't get connected at launch by ecasound. simple as.
JACK input/outputs โ jack_alsa</p>, jack_auto</p>, jack_generic</p> (deprecated since 2.6.0) ๐
so Ecasound 2.5 and older used to support jack_alsa, jack_auto and jack_generic object types, but they've been replaced by the more generic jack interface. so yeah, they're deprecated now โ they still work, but they're no longer documented. it's giving legacy. ๐
JACK input/outputs โ client options ๐
plus you can set global JACK options with the -G:jack,client_name,operation_mode option. let's break it down:
client_nameโ the name used when registering ecasound to the JACK system.operation_modeโ pick your vibe:"notransport"โ ecasound ignores any transport state changes in the JACK-system."send"โ ecasound sends all start, stop and position-change events to other JACK clients."recv"โ ecasound follows JACK start, stop and position-change events."sendrecv"โ a combination of the two previous modes. both worlds, main character energy ๐
if not explicitly set, in interactive mode (the -c option) the default mode is "sendrecv", while in batchmode the default is "notransport". either way, you can change the mode with -G like described above. โจ
more details about ecasound's JACK support can be found from the Ecasound User's Guide.
Libaudiofile โ audiofile</p> ๐
if libaudiofile support was enabled at compile-time, this option lets you force Ecasound to use libaudiofile for reading/writing a certain audio file. option syntax is:
-i:audiofile,foobar.ext
(same for -o.) ๐ซถ
Libsndfile โ sndfile</p> ๐ธ
if libsndfile support was enabled at compile-time, this option lets you force Ecasound to use libsndfile for reading/writing a certain audio file. option syntax is:
-i:sndfile,foobar.ext[,.format-ext]
(same for -o.) the optional third parameter "format" can be used to override the audio format โ for example you can create an AIFF file with the filename "foo.wav". sneaky but valid ๐
Loop device โ loop</p> ๐ฆ
loop devices make it possible to route (loop back) data between chains. option syntax is:
-[io][:]loop,tag
if you add a loop output with tag 1, all data written to this output is routed to any loop input with tag 1. the tag can be either numerical (e.g. -i:loop,1) or a string (e.g. -i:loop,vocals). and like with other input/output objects, you can attach the same loop device to multiple chains and this way split/mix the signal. ๐
note: thisloopdevice is different fromaudioloop(latter added to ecasound v2.5.0). don't mix them up bestie.
Mikmod โ mikmod</p> ๐
if mikmod support was enabled at compile-time, this option allows you to force Ecasound to use Mikmod for reading/writing a certain module file. option syntax is:
-i:mikmod,foobar.ext
Null inputs/outputs โ null</p> ๐
if you specify "null" or "/dev/null" as the input or output, a null audio device is created. super useful when you just wanna analyze sample data without writing it to a file. โจ
there's also a realtime variant, "rtnull", which behaves just like "null" objects, except all i/o is done at realtime speed. ๐โโ๏ธ
Resample โ resample</p> ๐
object type resample can be used to resample an audio object's audio data to match the sampling rate used in the active chainsetup. for example:
ecasound -f:16,2,44100 -i resample,22050,foo.wav -o /dev/dsp
will resample a file from 22.05kHz to 44.1kHz and write the result to the soundcard device. ๐
the child sampling rate can be replaced with the keyword auto. in this case ecasound will try to query the child object for its sampling rate โ this works with file formats such as .wav which store meta information about the audio file format. to use auto in the previous example:
ecasound -f:16,2,44100 -i resample,auto,foo.wav -o /dev/dsp
parameters 4...N are passed as is to the child object โ i.e. -i resample,22050,foo.wav,bar1,bar2 will pass parameters bar1,bar2 to the foo.wav object.
if ecasound was compiled with support for libsamplerate, you can use resample-hq to use the highest quality resampling algorithm available. ๐ and to force ecasound to use the internal resampler, resampler-lq (low-quality) can be used.
Reverse โ reverse</p> ๐
object type reverse can be used to reverse audio data coming from an audio object. as an example:
ecasound -i reverse,foo.wav -o /dev/dsp
will play foo.wav backwards. iconic. but heads up: reversing output objects is not supported. ๐ซ
Note! trying to reverse audio object types with really slow seek operation (like mp3) works extremely badly. try converting to an uncompressed format (wavorraw) first, and then do the reversation. fr fr.
parameters 3...N are passed as is to the child object โ i.e. -i reverse,foo.wav,bar1,bar2 will pass parameters bar1,bar2 to the foo.wav object.
System standard streams and named pipes โ stdin</p>, stdout</p> ๐
you can use standard streams (stdin and stdout) by giving stdin or stdout as the file name. audio data is assumed to be in raw/headerless (.raw) format. if you want to use named pipes, create them with the proper file name extension before use. โจ
Tone generator โ tone</p> ๐ฅ
to generate a test tone, use the input -i:tone,type,freq,duration-secs. the type parameter specifies the tone type โ currently only sine is supported. the freq parameter sets the frequency of the generated tone and duration-secs the length of the generated stream. specifying zero, or a negative value, as the duration will produce an infinite stream ๐ญโพ๏ธ. this feature was first added to Ecasound 2.4.7.
Typeselect โ typeselect</p> ๐ฆ
the special typeselect object type can be used to override how ecasound maps filename extensions and object types. for instance:
ecasound -i typeselect,.mp3,an_mp3_file.wav -o /dev/dsp.
would play the file an_mp3_file.wav as an mp3-file and not as an wav-file as would happen without typeselect. mind = blown ๐คฏ
parameters 4...N are passed as is to the child object โ i.e. -i typeselect,.au,foo.wav,bar1,bar2 will pass parameters bar1,bar2 to the foo.wav object.
โจ MIDI SETUP โจ
MIDI I/O devices โ general ๐น
if no MIDI-device is specified, the default MIDI-device is used (see ecasoundrc(5)).
-Md:rawmidi,device_name</p> ๐ธ
add a rawmidi MIDI I/O device to the setup. device_name can be anything that can be accessed using the normal UNIX file operations and produces raw MIDI bytes. valid devices are for example OSS rawmidi devices (/dev/midi00), ALSA rawmidi devices (/dev/snd/midiC2D0), named pipes (see mkfifo man page), and normal files. ๐
-Md:alsaseq,sequencer-port</p> ๐
adds an ALSA MIDI sequencer port to the setup. sequencer-port identifies a port to connect to. it can be numerical (e.g. 128:1), or a client name (e.g. "KMidimon"). ๐ซถ
-Mms:device_id</p> ๐
sends MMC start ("Deferred Play") and stop ("Stop") with device ID device_id.
while Ecasound does not directly support syncing transport state to incoming MMC messages, this can be achieved by connecting Ecasound to JACK input/outputs, and using a tool such as JackMMC and JackCtlMMC (see http://jackctlmmc.sourceforge.net/) to convert MMC messages into JACK transport change events. โจ
-Mss</p> ๐
sends MIDI-sync (i.e. "MIDI Start" and "MIDI Stop" system realtime messages) to the selected MIDI-device. notice that Ecasound will not send MIDI-clock, but only the start and stop messages. that's it, that's the whole thing ๐
โจ EFFECT SETUP โจ
PRESETS ๐
Ecasound has a powerful effect preset system that allows you create new effects by combining basic effects and controllers. see the ecasound user's guide for more detailed information. โจ
-pf:preset_file.eep</p> ๐
uses the first preset found from file preset_file.eep as a chain operator.
-pn:preset_name</p> ๐ฆ
find preset preset_name from global preset database and use it as a chain operator. see the ecasoundrc man page for info about the preset database.
โจ SIGNAL ANALYSIS โจ
-ev</p> ๐ฅ
analyzes sample data to find out how much the signal can be amplified without clipping. the resulting percent value can be used as a parameter to -ea (amplify). a statistical summary, containing info about the stereo-image and distribution of sample values, is printed out at the end of processing. ๐
-evp</p> ๐
peak amplitude watcher. maintains peak information for each processed channels. peak information is reset on every read. ๐
-ezf</p> ๐
finds the optimal value for DC-adjusting. you can use the result as a parameter to the -ezx effect.
โจ GENERAL SIGNAL PROCESSING ALGORITHMS โจ
-eS:stamp-id</p> ๐
audio stamp. takes a snapshot of passing audio data and stores it using id stamp-id (integer number). this data can later be used by controllers and other operators. ๐ธ
-ea:amplify%</p> ๐
adjusts the signal amplitude to amplify% percent (linear scale, i.e. individual samples are multiplied by amplify%/100). see also -eadb. ๐
-eac:amplify%,channel</p> ๐ธ
amplifies signal of channel channel by amplify-% percent (linear scale, i.e. individual samples are multiplied by amplify%/100). channel ranges from 1...n where n is the total number of channels. see also -eadb. ๐
-eadb:gain-dB[,channel]โ turns the volume up or down by gain-dB. A gain of0dBis literally doing nothing to your signal, negatives attenuate it, positives amplify it. The channel param (1...n) is optional โ if you pass it and it's nonzero, the gain only hits that one channel (1...n). selective slay ๐-eaw:amplify%,max-clipped-samplesโ amplifies by amplify-% percent on a linear scale, i.e. every single sample gets multiplied byamplify%/100. If you rack up a run of consecutive clipped samples (meaning the resulting sample value lands outside the nominal[-1,1]range), it'll throw a warning at you. watch out bestie โ ๏ธ-eal:limit-%โ the limiter effect. Caps the audio level at limit-% (linear scale). Values equal to or greater than100%= no change to the signal at all. nothing happens, and that's valid โจ-ec:rate,threshold-%โ a compressor, and yeah, a pretty simple one. rate is the compression rate in decibels (ratedB of change on the input side โ1dBof change on the output side). threshold ranges from0.0(silence) to1.0(max amplitude). ๐๏ธ-eca:peak-level-%, release-time-sec, fast-crate, crateโ the fancier compressor, original algorithm by John S. Dyson. Drop a value of0on any parameter and the default kicks in instead, no stress. peak-level-% is basically how hard you're shoving the peak limiter โ the default69%is a good spot. release_time is in seconds, and heads up: this compressor is very sophisticated, so the release time is genuinely complex. It's one of the dominant release-time controls, but the actual release time depends on a whole bunch of factors around the dynamics of the audio coming in. fastrate is the compression ratio for the fast compressor โ and okay it's not really the compression ratio. A value of1.0is infinity to one, while the default0.50is2:1. Another genuinely great value is special-cased right in the code:0.25is somewhat less than2:1and sounds super smooth. rate is the compression ratio for the entire compressor chain, default1.0, which holds the volume very constant without many nasty side effects โ but the dynamics in music get severely restricted, so0.5might keep your music more intact. the tradeoffs are real ๐-enm:threshold-level-%,pre-hold-time-msec,attack-time-msec,post-hold-time-msec,release-time-msecโ the noise gate. It supports multichannel processing, and each channel gets processed separately. When the signal amplitude drops belowthreshold_level_%percent (100%= maximum amplitude), the gate activates. If the signal keeps sitting below the threshold forth_timems, it fades out during the attack phase ofattackms. And if the signal climbs back abovethreshold_leveland stays there overholdms, the gate releases overreleasems. ๐ชโจ-ei:pitch-shift-%โ pitch shifter. Modifies the audio pitch by altering its length. ๐ฆ-epp:right-%โ the stereo panner. Changes the relative balance between the first two channels. When right-% is0, only the signal on the left (1st) channel passes through. Same energy if it's100โ then only the right (2nd) channel gets let through. ๐-ezx:channel-count,delta-ch1,...,delta-chNโ adjusts the signal DC by delta-chX, where X is the channel number. Use-ezfto find the optimal delta values. ๐
โจ ENVELOPE MODULATION โจ
-eemb:bpm,on-time-%โ pulse gate, with the pulse frequency given as beats-per-minute. ๐ฅ-eemp:freq-Hz,on-time-%โ pulse gate. (yes, again, but the frequency is in Hz this time bestie) ๐ฅ-eemt:bpm,depth-%โ tremolo effect, with the tremolo speed given as beats-per-minute. ๐
๐ธ FILTER EFFECTS ๐ธ
-ef1:center_freq, widthโ resonant bandpass filter. center_freq is the center frequency. Width is specified in Hz. ๐-ef3:cutoff_freq, reso, gainโ resonant lowpass filter. cutoffr_freq is the filter cutoff frequency. reso means resonance โ usually the best values for resonance sit between1.0and2.0, but you can absolutely go bigger. gain is the overall gain-factor, just a simple multiplier (1.0is the normal level). With high resonance values it often helps to pull the gain down. balance is everything โญ-ef4:cutoff, resonanceโ resonant lowpass filter, 3rd-order,36dB, original algorithm by Stefan M. Fendt. It simulates an analog active RC-lowpass design. Cutoff is a value between[0,1], while resonance is between[0,infinity). math girlies rise ๐-efa:delay-samples,feedback-%โ allpass filter. Passes all frequencies with no change in amplitude, but at the same time it imposes a frequency-dependent phase-shift. sneaky like that ๐ฆ-efc:delay-samples,radiusโ comb filter. Lets the spikes of the comb pass through. radius should be between[0, 1.0). ๐ชฎ-efb:center-freq,widthโ bandpass filter. center_freq is the center frequency. Width is specified in Hz. ๐ธ-efh:cutoff-freqโ highpass filter. Only frequencies above cutoff_freq are passed through. โฌ๏ธ-efi:delay-samples,radiusโ inverse comb filter. Filters out the spikes of the comb. There aredelay_in_samples-2spikes. radius should be between[0, 1.0). The closer it gets to the max value, the deeper the dips of the comb are. ๐ณ๏ธ-efl:cutoff-freqโ lowpass filter. Only frequencies below cutoff_freq are passed through. โฌ๏ธ-efr:center-freq,widthโ bandreject filter. center_freq is the center frequency. Width is specified in Hz. ๐ซ-efs:center-freq,widthโ resonator. center_freq is the center frequency. Width is specified in Hz. Basically just another resonating bandpass filter, ngl. ๐
๐ CHANNEL MIXING / ROUTING ๐
-chcopy:from-channel, to-channelโ copies channel from_channel to to_channel. If to_channel doesn't exist, it gets created. Channel indexing starts from1. Option added to ecasound2.4.5. ๐-chmove:from-channel, to-channelโ copies channel from_channel to to_channel, and mutes the source channel from_channel. Channel indexing starts from1. Option added to ecasound2.4.5. ๐-chorder:ch1,...,chNโ reorder, omit and/r duplicate chain channels. The resulting audio stream has a total of N channels, and each parameter specifies the source channel to use for that given output channel. For example,-chorder:2,1would reverse the channels of a stereo stream (out1,out2=in2,in1). Specifying the same source channel multiple times is allowed โ for example,-chorder:2,2would route the second channel to both output channels (out1,out2=in2,in2). And if chX is zero, that given channel X gets muted in the output stream. Option added to ecasound2.7.0. ๐-chmix:to-channelโ mixes all source channels into channel to_channel. If to_channel doesn't exist, it gets created. Channel indexing starts from1. Option added to ecasound2.4.5. ๐ฅฃ-chmute:channelโ mutes the channel channel. Channel indexing starts from1. Option added to ecasound2.4.5. ๐คซ-erc:from-channel,to-channelโ deprecated, see-chcopy. old news, use the new one ๐-erm:to-channelโ deprecated, see-chmix. same energy ๐
๐ TIME-BASED EFFECTS ๐
-etc:delay-time-msec,variance-time-samples,feedback-%,lfo-freqโ chorus. ๐-etd:delay-time-msec,surround-mode,number-of-delays,mix-%,feedback-%โ delay effect. delay time is the delay time in milliseconds. surround-mode is an integer with the following meanings:0= normal,1= surround,2= stereo-spread. number_of_delays should be obvious. Beware that a large number of delays plus huge delay times will eat a lot of CPU power. mix-% is the mix balance between the original and delayed signal, with0meaning no delayed signal,100meaning no original signal, and50(the default) achieving an equal balance. feedback-% is how much of the signal gets recycled in each delay, or if you prefer, the rate at which the repeated snippet of delayed audio fades. Note that sufficiently low feedback values may result in a number of audible repetitions lesser than what you specified for number_of_delays โ especially if you set a low value for mix-%. By default this parameter is100%, i.e. no signal loss. ๐-ete:room_size,feedback-%,wet-%โ a more advanced reverb effect, original algorithm by Stefan M. Fendt. room_size is given in meters, feedback-% is the feedback level in percents, and wet-% is the amount of reverbed signal added to the original signal. ๐๏ธโจ-etf:delay-time-msecโ fake-stereo effect. The input signal gets summed to mono, then the original signal goes to the left channels while a delayed version (delayed by delay time milliseconds) goes to the right. With a delay time of1-40milliseconds this adds a stereo-feel to mono-signals. mono glow-up ๐-etl:delay-time-msec,variance-time-samples,feedback-%,lfo-freqโ flanger. ๐-etm:delay-time-msec,number-of-delays,mix-%โ multitap delay. delay time is the delay time in milliseconds. number_of_delays should be obvious. mix-% determines how much effected (wet) signal is mixed into the original. ๐๏ธ-etp:delay-time-msec,variance-time-samples,feedback-%,lfo-freqโ phaser. โจ-etr:delay-time,surround-mode,feedback-%โ reverb effect. delay time is the delay time in milliseconds. If surround-mode issurround, the reverbed signal moves around the stereo image. feedback-% determines how much effected (wet) signal is fed back into the reverb. ๐ณ๏ธ๐
๐ LADSPA-PLUGINS ๐
-el:plugin_unique_name,param-1,...,param-Nโ ecasound supports LADSPA-effect plugins (Linux Audio Developer's Simple Plugin API). Parameters1..Nare set as values of the plugin's control ports. plug-in era, we love to see it ๐ง
okay so when a plugin has more than one audio input and/or output port, ecasound only spins up one single instance of that plugin, and all the channels in the chain get fed into that same instance. But if the plugin has at most one input and at most one output audio port, then a separate plugin instance gets created for <em>each</em> channel of the ecasound chain โ like, for a stereo audio channel you get two LADSPA plugins of the same type, one per channel. ๐
Plugins live inside shared library (.so) files. Ecasound goes looking for them in @prefix@/lib/ladspa (so like "/usr/local/lib/ladspa"), plus whatever directories are listed in the environment variable LADSPA_PATH. You can also configure the plugin search path via ecasoundrc โ go peek at ecasoundrc(5) man page bestie. ๐ซถ One shared library file can hold multiple plugin objects, but every plugin has a unique plugin name, and that name is what you use to select it.
Wanna know more about LADSPA? Check the LAD mailing list web site. Other useful spots are the LADSPA home page and the LADSPA documentation. ๐ฅ
-eli:plugin_unique_number,param-1,...,param-Nโ Same energy as-elabove, except you reference the plugin by its unique id-number instead. And fr fr, these id-numbers are guaranteed to be unique across <em>all</em> LADSPA plugins. โจ
๐ฆ LV2 PLUGINS ๐ฆ
-elv2:plugin-id-uri,param-1,...,param-Nโ Ecasound also rocks with LV2 audio plugins! LV2 plugins are identified by a globally unique, case-sensitive identifier. Periodt. ๐
If a plugin has more than one audio input and/or output port, only one instance gets created and the chain channels all feed into that same instance. If it has at most one input and at most one output audio port, then a separate instance is made for each channel of the ecasound chain (so for a stereo channel, two LV2 plugins of the same type, one per channel). ๐
LV2 is a plugin standard for audio systems. The more you know โจ
๐ GATE SETUP ๐
-gc:start-time,lenโ The time crop gate. The gate starts out closed, okay? Oncestart-timeseconds have gone by, the gate opens and stays open forlenseconds. While it's closed, any audio buffers passing through get truncated to zero length. ๐ช-ge:open-threshold-%,close-thold-%,volume-mode,reopen-countโ The threshold gate. Starts closed. It opens up when the volume goes overothresholdpercent. After that, if volume drops belowctholdpercent, the gate closes and won't open again โ unlessreopen-countis set to anything other than zero, bestie. Ifvalue_modeisrms, then average RMS volume is what's used; otherwise it's peak average. When closed, passing audio buffers get truncated to zero length. ๐ซฅ
If reopen-count is a positive number, the gate restarts its whole operation that many times โ so like, a reopen count of 1 gives you up to 2 openings of the gate. A negative value for reopen-count means the gate reopens indefinitely. ๐ This is lowkey invaluable for recording vinyl and tapes: you set things up, recording starts whenever the needle hits the vinyl, and stops when it's off. As many sides as you like, all in one session. You will need to experiment with buffer lengths and start/stop levels to get settings that are actually reliable for your equipment. ngl, patience is the vibe here.
-gm:stateโ The manual gate. Ifstateis1, the gate is open and all samples pass through. Ifstateis zero, the gate is closed and no samples get let through. This chain operator is iconic when writing to an output needs to be stopped dynamically โ without stopping the whole engine. ๐
๐ CONTROL ENVELOPE SETUP ๐
Controllers let you dynamically change effect parameters while processing is happening. Every controller gets attached to the selected effect (which is <em>usually the last specified effect/controller</em>). The first three parameters are common across all controllers: fx_param picks which parameter gets controlled โ value 1 means the first parameter, 2 means the second, and so on. start_value and end_value set the value range. For examples, go look at the the EXAMPLES section. ๐ง
-kos:fx-param,start-value,end-value,freq,i-phaseโ Sine oscillator, with a frequency offreqHz and an initial phase ofi_phasetimes pi. ๐-kog:fx-param,start-value,end-value,freq,mode,point-pairs,first-value,last-value,pos1,value1,...โ Generic oscillator. Frequency isfreqHz, andmodeis either0for static values or1for linear interpolation.point-pairssays how manyposNโvalueNpairs you're including.first-valueandlast-valueact as border values (the values for position 0.0/first and position 1.0/last). AllposNandvalueNmust be between0.0and1.0. Also, for allposNvalues,pos1 < pos2 < ... < posNhas to be true. ๐-kf:fx-param,start-value,end-value,freq,mode,genosc-numberโ Generic oscillator again, but this timegenosc_numberis the number of the oscillator preset to load. Mode is either0for static values or1for linear interpolation. The location for the preset file comes from./ecasoundrc(see theecasoundrcman page). ๐-kl:fx-param,start-value,end-value,time-secondsโ Linear envelope that starts atstart_valueand linearly shifts toend_valueovertime_in_seconds. Perfect for fadeins and fadeouts. โจ-kl2:fx-param,start-value,end-value,1st-stage-length-sec,2nd-stage-length-secโ Two-stage linear envelope โ a way more versatile tool for doing fade-ins and fade-outs. It stays atstart_valuefor1st_stage_lengthseconds, then linearly moves towardend_valueover2nd_stage_lengthseconds. ๐๏ธ-klg:fx-param,low-value,high-value,point_count,pos1,value1,...,posN,valueNโ Generic linear envelope. You can use this controller source to map custom envelopes onto chain operator parameters. The number of envelope points goes inpoint_count. Each envelope point is a position plus a matching value, and the number of pairs must matchpoint_count(i.e.N==point_count). TheposXparameters are given as seconds (from the start of the stream). Envelope points are specified as float values in the range[0,1]. Before envelope values get mapped to operator parameters, they're mapped to the target range of[low-value,high-value]โ so like, a value of0sets the operator parameter tolow-value, and a value of1sets it tohigh-value. For that initial segment[0,pos1], the envelope outputs the value ofvalue1(e.g.low-value). ๐ซ-km:fx-param,start-value,end-value,controller,channelโ MIDI continuous controller (control change messages). Messages on MIDI-channelchannelcoming from controller numbercontrollerare used as the controller source. As recommended by the MIDI-specification, channel numbering runs from 1 to 16. Possible controller numbers are values from 0 to 127. The MIDI-device that bytes get read from can be set with the-Mdoption โ otherwise the default MIDI-device is used, as specified in~ecasound/ecasoundrc(see theecasoundrcman page). Defaults to/dev/midi. ๐น-ksv:fx-param,start-value,end-value,stamp-id,rms-toggleโ Volume analyze controller. It analyzes the audio stored in stampstamp-id(check the-eS:iddocs), and creates control data based on the results. Ifrms-toggleis non-zero, RMS-volume is used to calculate the control value โ otherwise average peak-amplitude is used. ๐-kxโ Ooh, this is a special switch for when you need to control controller parameters with another controller. When you specify-kx, the last specified controller becomes the control target. Then you just add another controller like normal. ๐ช
๐ธ INTERACTIVE MODE ๐ธ
Go read the ecasound-iam(1) man page. ๐
๐ ENVIRONMENT ๐
๐ ECASOUND
If it's defined, some utility programs and scripts will use the ECASOUND environment as the default path to the ecasound executable.
๐ซถ ECASOUND_LOGFILE
Outputs all debugging messages to a separate log file. If defined, ECASOUND_LOGFILE sets that logfile path. This is a great tool for debugging ECI/EIAM scripts and applications. ๐
โจ ECASOUND_LOGLEVEL
Selects which messages get written to the logfile defined by ECASOUND_LOGFILE. The syntax for -d:level is what's used. If it's not defined, all messages get written. Defaults to -d:319 (everything else but functions (64) and continuous (128) class messages).
๐ COLUMNS
Ecasound honors the COLUMNS environment variable when formatting printed trace messages. If COLUMNS isn't set, a default of 74 is used.
๐ฆ TMPDIR
Some functions of Ecasound (e.g. the "cs-edit" interactive command) require creating temporary files. By default these files get created under "/tmp", but you can override that by setting the TMPDIR environment variable.
๐ RETURN VALUES ๐
In interactive mode, ecasound always returns zero. No drama.
In non-interactive (batch) mode, a non-zero value gets returned for these errors:
1โ Unable to create a valid chainsetup with the given parameters. Can be caused by invalid option syntax, etc.2โ Unable to start processing. This can be caused by insufficient file permissions, inability to access some system resources, etc.3โ Error during processing. Possible causes: output object has run out of free disk space, etc. ๐4โ Error during process termination and/or cleanup. See section on'SIGNALS'for further details.
๐จ SIGNALS ๐จ
Okay bestie, this is the part where you learn how to politely (or *un*politely) tell ecasound to wrap it up. ๐
When ecasound catches any of these POSIX signals โ SIGINT (that's your ctrl-c, queen), SIGHUP, SIGTERM or SIGQUIT โ it starts its normal cleanup-and-exit procedure. And "normal exit" here means the good stuff: file headers get updated before closing, helper processes get terminated the normal way, all of that. It's giving responsible adult energy. โจ
But listen. If, while it's doing all that cleanup, ecasound gets another signal (from that same set of POSIX signals), it will skip the normal cleanup procedure entirely and just terminate immediately. Any remaining cleanup tasks? Skipped. Gone. Not doing them. ๐ญ Depending on the runtime state and configuration, this brute-force exit may have some side-effects, so like... be aware.
Ecasound will return exit code of '4' if normal cleanup was skipped. Noted. Remember it. ๐ซถ
Now for the special case handling, and it's applied to SIGINT (ctrl-c) specifically. If a SIGINT signal arrives during the cleanup procedure, ecasound will ignore the signal once, and emit a notice to 'stderr' that cleanup is already in progress. Basically it's like "girl I heard you the first time, I'm ON it." ๐ But any subsequent SIGINT signals will no longer get special handling โ instead the process terminates immediately, and possibly without proper cleanup. So mash that ctrl-c at your own risk. ๐
๐ FILES ๐
The lore. The receipts. Here's where ecasound keeps its stuff:
~/.ecasoundโ the default directory for ecasound user resource files. See theecasoundrc(5) man page man page for the deets. ๐*.ecsโ Ecasound Chainsetup files. The syntax is more or less the same as with command-line arguments, so if you already speak command-line, you already speak this. Slay. ๐ธ*.ecpโ Ecasound Chain Preset files. These are used for storing effect and chain operator presets. See the ecasound user's guide for more better documentation. ๐*.ewsโ Ecasound Wave Stats. These files are used to cache waveform data. Speedy vibes. โก
๐งช EXAMPLES ๐งช
Wanna see how to actually do the common tasks with ecasound? Bestie, there's a whole page for that:
http://nosignal.fi/ecasound/Documentation/examples.html
Go. Click. Learn. Ate. ๐ฅ
๐ SEE ALSO ๐
Your reading list, in no particular order of slay:
ecatools(1) man pageecasound-iam(1) man pageecasoundrc(5) man page- "HTML docs in the Documentation subdirectory"
iykyk. ๐
๐ BUGS ๐
See file BUGS.
And if ecasound behaves weirdly, try to increase the debug level to see what's going on. That's it. That's the tip. Turn up the debug and watch the chaos in high definition. ๐
๐ AUTHOR ๐
Kai Vehmanen, <kvehmanen -at- eca -dot- cx <kvehmanen -at- eca -dot- cx>>
Give it up for the legend who built all this. ๐โจ
and that's a wrap on the whole ecasound(1) page, bestie ๐ซถ This absolute icon of a manpage comes from source/version ecasound(1), dated 05.05.2011. Go make some beautiful noise, you main character. ๐
๐๐ฆ
๐ฆ where this page comes from
- debian bookworm: ecasound 2.9.3-4+b1 ยท GPL-2.0-or-later
- debian trixie: ecasound 2.9.3-4+b5 ยท GPL-2.0-or-later
- ubuntu jammy: ecasound 2.9.3-4 ยท GPL-2.0-or-later
- ubuntu noble: ecasound 2.9.3-4build2 ยท GPL-2.0-or-later
- ubuntu questing: ecasound 2.9.3-4build2
- ubuntu resolute: ecasound 2.9.3-4build3 ยท GPL-2.0-or-later
- ubuntu stonking: ecasound 2.9.3-4build3 ยท GPL-2.0-or-later
- ๐ girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms