\documentclass[10pt,a4paper]{article} % Packages \usepackage{fancyhdr} % For header and footer \usepackage{multicol} % Allows multicols in tables \usepackage{tabularx} % Intelligent column widths \usepackage{tabulary} % Used in header and footer \usepackage{hhline} % Border under tables \usepackage{graphicx} % For images \usepackage{xcolor} % For hex colours %\usepackage[utf8x]{inputenc} % For unicode character support \usepackage[T1]{fontenc} % Without this we get weird character replacements \usepackage{colortbl} % For coloured tables \usepackage{setspace} % For line height \usepackage{lastpage} % Needed for total page number \usepackage{seqsplit} % Splits long words. %\usepackage{opensans} % Can't make this work so far. Shame. Would be lovely. \usepackage[normalem]{ulem} % For underlining links % Most of the following are not required for the majority % of cheat sheets but are needed for some symbol support. \usepackage{amsmath} % Symbols \usepackage{MnSymbol} % Symbols \usepackage{wasysym} % Symbols %\usepackage[english,german,french,spanish,italian]{babel} % Languages % Document Info \author{eweitzman} \pdfinfo{ /Title (camilladsp.pdf) /Creator (Cheatography) /Author (eweitzman) /Subject (CamillaDSP Cheat Sheet) } % Lengths and widths \addtolength{\textwidth}{6cm} \addtolength{\textheight}{-1cm} \addtolength{\hoffset}{-3cm} \addtolength{\voffset}{-2cm} \setlength{\tabcolsep}{0.2cm} % Space between columns \setlength{\headsep}{-12pt} % Reduce space between header and content \setlength{\headheight}{85pt} % If less, LaTeX automatically increases it \renewcommand{\footrulewidth}{0pt} % Remove footer line \renewcommand{\headrulewidth}{0pt} % Remove header line \renewcommand{\seqinsert}{\ifmmode\allowbreak\else\-\fi} % Hyphens in seqsplit % This two commands together give roughly % the right line height in the tables \renewcommand{\arraystretch}{1.3} \onehalfspacing % Commands \newcommand{\SetRowColor}[1]{\noalign{\gdef\RowColorName{#1}}\rowcolor{\RowColorName}} % Shortcut for row colour \newcommand{\mymulticolumn}[3]{\multicolumn{#1}{>{\columncolor{\RowColorName}}#2}{#3}} % For coloured multi-cols \newcolumntype{x}[1]{>{\raggedright}p{#1}} % New column types for ragged-right paragraph columns \newcommand{\tn}{\tabularnewline} % Required as custom column type in use % Font and Colours \definecolor{HeadBackground}{HTML}{333333} \definecolor{FootBackground}{HTML}{666666} \definecolor{TextColor}{HTML}{333333} \definecolor{DarkBackground}{HTML}{265FD1} \definecolor{LightBackground}{HTML}{F1F5FC} \renewcommand{\familydefault}{\sfdefault} \color{TextColor} % Header and Footer \pagestyle{fancy} \fancyhead{} % Set header to blank \fancyfoot{} % Set footer to blank \fancyhead[L]{ \noindent \begin{multicols}{3} \begin{tabulary}{5.8cm}{C} \SetRowColor{DarkBackground} \vspace{-7pt} {\parbox{\dimexpr\textwidth-2\fboxsep\relax}{\noindent \hspace*{-6pt}\includegraphics[width=5.8cm]{/web/www.cheatography.com/public/images/cheatography_logo.pdf}} } \end{tabulary} \columnbreak \begin{tabulary}{11cm}{L} \vspace{-2pt}\large{\bf{\textcolor{DarkBackground}{\textrm{CamillaDSP Cheat Sheet}}}} \\ \normalsize{by \textcolor{DarkBackground}{eweitzman} via \textcolor{DarkBackground}{\uline{cheatography.com/214563/cs/46734/}}} \end{tabulary} \end{multicols}} \fancyfoot[L]{ \footnotesize \noindent \begin{multicols}{3} \begin{tabulary}{5.8cm}{LL} \SetRowColor{FootBackground} \mymulticolumn{2}{p{5.377cm}}{\bf\textcolor{white}{Cheatographer}} \\ \vspace{-2pt}eweitzman \\ \uline{cheatography.com/eweitzman} \\ \end{tabulary} \vfill \columnbreak \begin{tabulary}{5.8cm}{L} \SetRowColor{FootBackground} \mymulticolumn{1}{p{5.377cm}}{\bf\textcolor{white}{Cheat Sheet}} \\ \vspace{-2pt}Not Yet Published.\\ Updated 13th July, 2025.\\ Page {\thepage} of \pageref{LastPage}. \end{tabulary} \vfill \columnbreak \begin{tabulary}{5.8cm}{L} \SetRowColor{FootBackground} \mymulticolumn{1}{p{5.377cm}}{\bf\textcolor{white}{Sponsor}} \\ \SetRowColor{white} \vspace{-5pt} %\includegraphics[width=48px,height=48px]{dave.jpeg} Measure your website readability!\\ www.readability-score.com \end{tabulary} \end{multicols}} \begin{document} \raggedright \raggedcolumns % Set font size to small. Switch to any value % from this page to resize cheat sheet text: % www.emerson.emory.edu/services/latex/latex_169.html \footnotesize % Small font. \begin{multicols*}{2} \begin{tabularx}{8.4cm}{x{4 cm} x{4 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{8.4cm}}{\bf\textcolor{white}{top level}} \tn % Row 0 \SetRowColor{LightBackground} \{\{width=20\}\}\{\{link="https://github.com/HEnquist/camilladsp?tab=readme-ov-file\#title-and-description"\}\}title:\{\{/link\}\} & Configuration name. \tn % Row Count 6 (+ 6) % Row 1 \SetRowColor{white} \{\{link="https://github.com/HEnquist/camilladsp?tab=readme-ov-file\#title-and-description"\}\}description:\{\{/link\}\} & Configuration description. \tn % Row Count 12 (+ 6) % Row 2 \SetRowColor{LightBackground} \{\{link="https://github.com/HEnquist/camilladsp?tab=readme-ov-file\#devices"\}\}devices:\{\{/link\}\} & Defines devices for "capture" and "playback" (input and output devices). \tn % Row Count 17 (+ 5) % Row 3 \SetRowColor{white} \{\{link="https://github.com/HEnquist/camilladsp?tab=readme-ov-file\#mixers"\}\}mixers:\{\{/link\}\} & Mixers define channels, route audio, and change the number of channels in the pipeline. \tn % Row Count 22 (+ 5) % Row 4 \SetRowColor{LightBackground} \{\{link="https://github.com/HEnquist/camilladsp?tab=readme-ov-file\#filters"\}\}filters:\{\{/link\}\} & Define and configure filters used in the pipeline. \tn % Row Count 27 (+ 5) % Row 5 \SetRowColor{white} \{\{link="https://github.com/HEnquist/camilladsp?tab=readme-ov-file\#processors"\}\}processors:\{\{/link\}\} & Special "filters" that work on several channels at once.. \tn % Row Count 32 (+ 5) \end{tabularx} \par\addvspace{1.3em} \vfill \columnbreak \begin{tabularx}{8.4cm}{x{4 cm} x{4 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{8.4cm}}{\bf\textcolor{white}{top level (cont)}} \tn % Row 6 \SetRowColor{LightBackground} \{\{link="https://github.com/HEnquist/camilladsp?tab=readme-ov-file\#pipeline"\}\}pipeline:\{\{/link\}\} & The processing steps to be followed. \tn % Row Count 5 (+ 5) \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{8.4cm}{x{4 cm} x{4 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{8.4cm}}{\bf\textcolor{white}{devices:}} \tn % Row 0 \SetRowColor{LightBackground} samplerate: & The samplerate setting decides the sample rate that everything will run at. This rate must be supported by both the capture and playback device. \tn % Row Count 8 (+ 8) % Row 1 \SetRowColor{white} chunksize: & All processing is done in chunks of data. The chunksize is the number of samples each chunk will have per channel.\{\{nl\}\}\{\{nl\}\}Suggested starting points for different sample rates:\{\{nl\}\}44.1 or 48 kHz: 1024\{\{nl\}\}88.2 or 96 kHz: 2048\{\{nl\}\} 176.4 or 192 kHz: 4096\{\{nl\}\}\{\{nl\}\}The duration in seconds of a chunk is \seqsplit{chunksize/samplerate}, so the suggested values corresponds to about 22 ms per chunk. This is a reasonable value. \tn % Row Count 30 (+ 22) \end{tabularx} \par\addvspace{1.3em} \vfill \columnbreak \begin{tabularx}{8.4cm}{x{4 cm} x{4 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{8.4cm}}{\bf\textcolor{white}{devices: (cont)}} \tn % Row 2 \SetRowColor{LightBackground} queuelimit:* & {[}defaults to 4{]} The field queuelimit should normally be left out to use the default of 4. It sets the limit for the length of the queues between the capture device and the processing thread, as well as between the processing thread and the playback device. The total queue size limit will be 2 * {\emph{chunksize}} * {\emph{queuelimit}} samples per channel. \tn % Row Count 18 (+ 18) % Row 3 \SetRowColor{white} \seqsplit{enable\_rate\_adjust:*} & {[}default {\emph{false}}{]} This enables the playback device to control the rate of the capture device, in order to avoid buffer underruns or a slowly increasing latency. This is currently supported when using an Alsa, Wasapi or CoreAudio playback device (and any capture device). \tn % Row Count 32 (+ 14) \end{tabularx} \par\addvspace{1.3em} \vfill \columnbreak \begin{tabularx}{8.4cm}{x{4 cm} x{4 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{8.4cm}}{\bf\textcolor{white}{devices: (cont)}} \tn % Row 4 \SetRowColor{LightBackground} target\_level:* & {[}default {\emph{chunksize}}{]} The value is the number of samples that should be left in the buffer of the playback device when the next chunk arrives. Only applies when {\emph{enable\_rate\_adjust}} is set to true. \tn % Row Count 10 (+ 10) % Row 5 \SetRowColor{white} adjust\_period:* & {[}defaults 10{]} Set the interval between corrections, in seconds. Only applies when {\emph{enable\_rate\_adjust}} is set to true \tn % Row Count 16 (+ 6) % Row 6 \SetRowColor{LightBackground} silence\_threshold:*\{\{nl\}\}silence\_timeout:* & Pause processing if the input is silent. The threshold is the threshold level in dB. \tn % Row Count 21 (+ 5) % Row 7 \SetRowColor{white} \seqsplit{capture\_samplerate:*} & The capture samplerate. Setting it to null sets the capture samplerate to the same value as samplerate. \tn % Row Count 27 (+ 6) % Row 8 \SetRowColor{LightBackground} stop\_on\_rate\_change:*\{\{nl\}\}rate\_measure\_interval:* & Setting {\emph{stop\_on\_rate\_change}} to true makes CamillaDSP stop the processing if the measured capture sample rate changes. \tn % Row Count 33 (+ 6) \end{tabularx} \par\addvspace{1.3em} \vfill \columnbreak \begin{tabularx}{8.4cm}{x{4 cm} x{4 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{8.4cm}}{\bf\textcolor{white}{devices: (cont)}} \tn % Row 9 \SetRowColor{LightBackground} volume\_ramp\_time:* & {[}default 400 ms{]} Set the duration of the ramp when changing volume of the default volume control. \tn % Row Count 5 (+ 5) % Row 10 \SetRowColor{white} multithreaded:*\{\{nl\}\}worker\_threads:* & {[}defaults to false and automatic){]} Setting true enables multithreaded processing. When this is enabled, CamillaDSP creates several filtering tasks by grouping the filters for each channel. \tn % Row Count 15 (+ 10) % Row 11 \SetRowColor{LightBackground} capture:\{\{nl\}\}playback: & Defines input and output devices respectively. See the dedicated section. \tn % Row Count 19 (+ 4) % Row 12 \SetRowColor{white} resampler:* & Defines the resampler. Setting it to null or leaving it out disables resampling. See the dedicated section below. \tn % Row Count 25 (+ 6) \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{8.4cm}{x{1.44 cm} x{6.56 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{8.4cm}}{\bf\textcolor{white}{(devices:) capture: and playback:}} \tn % Row 0 \SetRowColor{LightBackground} type: & Type type of device. See {\emph{Note1}} below. \tn % Row Count 2 (+ 2) % Row 1 \SetRowColor{white} \seqsplit{channels:} & Number of channels. \tn % Row Count 4 (+ 2) % Row 2 \SetRowColor{LightBackground} \seqsplit{device:} & Device name (for Alsa, Pulse, Wasapi, CoreAudio). For CoreAudio and Wasapi, null will give the default device \tn % Row Count 8 (+ 4) % Row 3 \SetRowColor{white} \seqsplit{filename:} & Path to the file (for File, RawFile and WavFile). \tn % Row Count 10 (+ 2) % Row 4 \SetRowColor{LightBackground} \seqsplit{format:} & Sample format (for all except Jack). \tn % Row Count 12 (+ 2) \hhline{>{\arrayrulecolor{DarkBackground}}--} \SetRowColor{LightBackground} \mymulticolumn{2}{x{8.4cm}}{{\bf{Note1}} - List of device types for the {\emph{type:}} node. \newline {\emph{All devices:}} Jack, Wasapi, CoreAudio, Alsa, Pulse \newline {\emph{Capture devices only:}} Bluez, RawFile, WavFile, SignalGenerator, and Stdin \newline {\emph{Playback devices only:}} File and Stdout. \newline {\bf{Note2}} - {\emph{capture:}} device types have an optional {\emph{labels:}} property. This accepts a list of strings, and is meant to be used by a GUI to display meaningful channel names. CamillaDSP itself does not use these labels.} \tn \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{8.4cm}{x{4 cm} x{4 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{8.4cm}}{\bf\textcolor{white}{(devices:) resampler:}} \tn % Row 0 \SetRowColor{LightBackground} \{\{width=35\}\}type: & One of AsyncSinc, AsyncPoly, or Synchronous. \tn % Row Count 3 (+ 3) % Row 1 \SetRowColor{white} \{\{link="https://github.com/HEnquist/camilladsp?tab=readme-ov-file\#asyncsinc-asynchronous-resampling-with-anti-aliasing"\}\}AsyncSinc resampling\{\{/link\}\} & Asynchronous resampling with anti-aliasing. \tn % Row Count 11 (+ 8) % Row 2 \SetRowColor{LightBackground} profile: (AsyncSinc) & One of Balanced, Fast, VeryFast, or Accurate \tn % Row Count 14 (+ 3) % Row 3 \SetRowColor{white} more AsyncSinc parameters & See the \{\{link="https://github.com/HEnquist/camilladsp?tab=readme-ov-file\#asyncpoly-asynchronous-resampling-without-anti-aliasing"\}\}CamillaDSP resampling\{\{/link\}\} documentation or the \{\{link="https://docs.rs/rubato/latest/rubato/index.html"\}\}Rubato\{\{/link\}\} documentation. \tn % Row Count 28 (+ 14) % Row 4 \SetRowColor{LightBackground} \{\{link="https://github.com/HEnquist/camilladsp?tab=readme-ov-file\#asyncpoly-asynchronous-resampling-without-anti-aliasing"\}\}AsyncPoly resampling\{\{/link\}\} & Asynchronous resampling without anti-aliasing. \tn % Row Count 36 (+ 8) \end{tabularx} \par\addvspace{1.3em} \vfill \columnbreak \begin{tabularx}{8.4cm}{x{4 cm} x{4 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{8.4cm}}{\bf\textcolor{white}{(devices:) resampler: (cont)}} \tn % Row 5 \SetRowColor{LightBackground} interpolation: (AsyncPoly) & One of Linear, Cubic, Quintic, or Septic. \tn % Row Count 3 (+ 3) % Row 6 \SetRowColor{white} \{\{link="https://github.com/HEnquist/camilladsp?tab=readme-ov-file\#synchronous-synchronous-resampling-with-anti-aliasing"\}\}Synchronous resampling\{\{/link\}\} & Synchronous resampling with anti-aliasing. \tn % Row Count 11 (+ 8) % Row 7 \SetRowColor{LightBackground} \mymulticolumn{2}{x{8.4cm}}{The Synchronous resampler has no additional nodes.} \tn % Row Count 12 (+ 1) \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{8.4cm}{x{1.296 cm} p{0.792 cm} x{1.008 cm} x{4.104 cm} } \SetRowColor{DarkBackground} \mymulticolumn{4}{x{8.4cm}}{\bf\textcolor{white}{mixer:}} \tn % Row 0 \SetRowColor{LightBackground} \mymulticolumn{4}{x{8.4cm}}{Each child node of the {\emph{mixer:}} node is a user-defined mixer name that will be referenced in the {\emph{\_\_\_\_}} node(s). Each mixer has the following nodes. See the \{\{link="https://github.com/HEnquist/camilladsp?tab=readme-ov-file\#mixers"\}\}CamillaDSP documentation\{\{/link\}\} for more info.} \tn % Row Count 6 (+ 6) % Row 1 \SetRowColor{white} \seqsplit{description:*} & & & Mixer description. \tn % Row Count 8 (+ 2) % Row 2 \SetRowColor{LightBackground} \seqsplit{labels:*} & & & Labels for GUI display.. \tn % Row Count 10 (+ 2) % Row 3 \SetRowColor{white} \mymulticolumn{4}{x{8.4cm}}{channels:} \tn % Row Count 11 (+ 1) % Row 4 \SetRowColor{LightBackground} & in: & & Number of input channels. \tn % Row Count 13 (+ 2) % Row 5 \SetRowColor{white} & out: & & Number of output channels. \tn % Row Count 15 (+ 2) % Row 6 \SetRowColor{LightBackground} \seqsplit{mapping:} & & & A list containing one {\emph{dest}} entry for each output channel. Channel numbers are 0-based. \tn % Row Count 19 (+ 4) % Row 7 \SetRowColor{white} & dest: & & An output channel. \tn % Row Count 21 (+ 2) % Row 8 \SetRowColor{LightBackground} & \seqsplit{mute:*} & & Should the output channel be muted? Boolean. \tn % Row Count 23 (+ 2) % Row 9 \SetRowColor{white} & \seqsplit{sources:} & & A list of sources contributing to the output channel. \tn % Row Count 26 (+ 3) % Row 10 \SetRowColor{LightBackground} & & \seqsplit{channel:} & Input source channel number. 0-based. \tn % Row Count 28 (+ 2) % Row 11 \SetRowColor{white} & & \seqsplit{gain:*} & Gain to apply to the input channel. Units are in {\emph{scale}}. \tn % Row Count 31 (+ 3) \end{tabularx} \par\addvspace{1.3em} \vfill \columnbreak \begin{tabularx}{8.4cm}{x{1.296 cm} p{0.792 cm} x{1.008 cm} x{4.104 cm} } \SetRowColor{DarkBackground} \mymulticolumn{4}{x{8.4cm}}{\bf\textcolor{white}{mixer: (cont)}} \tn % Row 12 \SetRowColor{LightBackground} & & \seqsplit{scale:*} & Units for {\emph{gain}}. Must be one of {\emph{dB}} or {\emph{linear}}. \tn % Row Count 3 (+ 3) % Row 13 \SetRowColor{white} & & \seqsplit{inverted:*} & Should the channel be inverted? Boolean. \tn % Row Count 5 (+ 2) \hhline{>{\arrayrulecolor{DarkBackground}}----} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{8.4cm}{x{1.76 cm} x{6.24 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{8.4cm}}{\bf\textcolor{white}{processors:}} \tn % Row 0 \SetRowColor{LightBackground} \mymulticolumn{2}{x{8.4cm}}{Each node under the {\emph{processors:}} node is a user-defined name for a configured processor.} \tn % Row Count 2 (+ 2) % Row 1 \SetRowColor{white} type: & A processor type, one of Compressor or NoiseGate. \tn % Row Count 4 (+ 2) % Row 2 \SetRowColor{LightBackground} \seqsplit{parameters:} & See \{\{link="https://github.com/HEnquist/camilladsp?tab=readme-ov-file\#compressor"\}\}Compressor parameters\{\{/link\}\} and \{\{link="https://github.com/HEnquist/camilladsp?tab=readme-ov-file\#noise-gate"\}\}NoiseGate parameters\{\{/link\}\} \tn % Row Count 12 (+ 8) % Row 3 \SetRowColor{white} \seqsplit{Compressor} & A standard dynamic range compressor configured with the most common parameters. \tn % Row Count 15 (+ 3) % Row 4 \SetRowColor{LightBackground} \seqsplit{NoiseGate} & Simple noise gate that estimates current loudness using the compressor's algorithm. \tn % Row Count 18 (+ 3) \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{8.4cm}{x{2.08 cm} x{5.92 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{8.4cm}}{\bf\textcolor{white}{pipeline:}} \tn % Row 0 \SetRowColor{LightBackground} \mymulticolumn{2}{x{8.4cm}}{The pipeline consists of a list of processing steps between input and output. Each step has a type , affected channels, and the name(s) of each filter, mixer, or processor.} \tn % Row Count 4 (+ 4) % Row 1 \SetRowColor{white} type: & One of Mixer, Filter, or Processor. \tn % Row Count 6 (+ 2) % Row 2 \SetRowColor{LightBackground} \seqsplit{description*:} & {[}blank{]} The pipeline description. \tn % Row Count 8 (+ 2) % Row 3 \SetRowColor{white} name: & For Mixer or Processor steps only. User-defined name for a mixer or processor to use.. \tn % Row Count 11 (+ 3) % Row 4 \SetRowColor{LightBackground} names: & For Filter steps only. List of user-defined names of filters to use. \tn % Row Count 14 (+ 3) % Row 5 \SetRowColor{white} channels: & For Filter steps only. List of channels to filter. \tn % Row Count 16 (+ 2) % Row 6 \SetRowColor{LightBackground} \seqsplit{bypassed*:} & {[}false{]} Bypasses the processing step if {\emph{true}}. \tn % Row Count 18 (+ 2) % Row 7 \SetRowColor{white} \mymulticolumn{2}{x{8.4cm}}{If the name of a mixer, processor or filter includes the tokens \$samplerate\$ or \$channels\$, these will be replaced by the corresponding values from the config. For example, if the samplerate is 44100, the filter name {\emph{fir\_\$samplerate\$}} will be updated to {\emph{fir\_44100}}.} \tn % Row Count 24 (+ 6) \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{8.4cm}{x{3.116 cm} x{1.292 cm} x{3.192 cm} } \SetRowColor{DarkBackground} \mymulticolumn{3}{x{8.4cm}}{\bf\textcolor{white}{filters: Utility filters}} \tn % Row 0 \SetRowColor{LightBackground} Gain & & Gain to apply. \tn % Row Count 1 (+ 1) % Row 1 \SetRowColor{white} & gain: & Range is +/-150 dB or +/- 10 (linear scale). \tn % Row Count 4 (+ 3) % Row 2 \SetRowColor{LightBackground} & \seqsplit{scale*:} & {[}dB{]} {\emph{dB}} or {\emph{linear}}. \tn % Row Count 6 (+ 2) % Row 3 \SetRowColor{white} & \seqsplit{mute*:} & {[}false{]} Mute the signal. \tn % Row Count 8 (+ 2) % Row 4 \SetRowColor{LightBackground} & \seqsplit{inverted*:} & {[}false{]} Invert the signal. \tn % Row Count 10 (+ 2) % Row 5 \SetRowColor{white} Volume & & Volume control that reacts to a websocket request to change the volume of a fader. All Volume filters responding to the fader in the request will change their volume. \tn % Row Count 21 (+ 11) % Row 6 \SetRowColor{LightBackground} & \seqsplit{fader:} & Which fader (`Aux1` to `Aux4`) that this filter responds to. \tn % Row Count 25 (+ 4) % Row 7 \SetRowColor{white} & \seqsplit{limit*:} & {[}+50 dB{]} Maximum value allowed for the filter. \tn % Row Count 28 (+ 3) % Row 8 \SetRowColor{LightBackground} & \seqsplit{ramp\_time*:} & {[}400 ms{]} Time interval (in milliseconds) over which the volume changes to a new value. Must be positive. \tn % Row Count 35 (+ 7) \end{tabularx} \par\addvspace{1.3em} \vfill \columnbreak \begin{tabularx}{8.4cm}{x{3.116 cm} x{1.292 cm} x{3.192 cm} } \SetRowColor{DarkBackground} \mymulticolumn{3}{x{8.4cm}}{\bf\textcolor{white}{filters: Utility filters (cont)}} \tn % Row 9 \SetRowColor{LightBackground} Loudness & & Apply loudness compensation using the \{\{link="https://www.rme-audio.de/adi-2-dac.html"\}\}RME ADI-2 DAC FS\{\{/link\}\} method. Reacts to changes in volume for any of the five faders. Can be used with an external volume control if changes to that control are also sent to CamillaDSP's websocket. \tn % Row Count 19 (+ 19) % Row 10 \SetRowColor{white} & \seqsplit{reference\_level:} & If the fader is above this level, no compensation is applied. Below 20 dB below the {\emph{reference\_level}}, the full amount of each boost is applied. Otherwise, the boosts are scaled linearly. Range is +20/-100. \tn % Row Count 32 (+ 13) \end{tabularx} \par\addvspace{1.3em} \vfill \columnbreak \begin{tabularx}{8.4cm}{x{3.116 cm} x{1.292 cm} x{3.192 cm} } \SetRowColor{DarkBackground} \mymulticolumn{3}{x{8.4cm}}{\bf\textcolor{white}{filters: Utility filters (cont)}} \tn % Row 11 \SetRowColor{LightBackground} & \seqsplit{fader*:} & {[}Main{]} The fader whose volume is monitored to determine the amount of compensation to apply. \tn % Row Count 6 (+ 6) % Row 12 \SetRowColor{white} & \seqsplit{high\_boost*:} & {[}10 dB{]} Maximum HF boost in dB. Range is 0-20. \tn % Row Count 9 (+ 3) % Row 13 \SetRowColor{LightBackground} & \seqsplit{low\_boost*:} & {[}10 dB{]} Maximum LF boost in dB. Range is 0-20. \tn % Row Count 12 (+ 3) % Row 14 \SetRowColor{white} & \seqsplit{attenuate\_mid*:} & {[}false{]} Attenuates mids instead of boosting HF and LF to avoid clipping when used with external volume controls and web API. \tn % Row Count 20 (+ 8) % Row 15 \SetRowColor{LightBackground} Delay & & Delays the signal. If {\emph{unit:}} is {\emph{mm}}, the speed of sound of 343 m/sec is used to calculate the delay. \tn % Row Count 27 (+ 7) % Row 16 \SetRowColor{white} & \seqsplit{delay:} & Amount of delay. Must be zero or positive. \tn % Row Count 30 (+ 3) \end{tabularx} \par\addvspace{1.3em} \vfill \columnbreak \begin{tabularx}{8.4cm}{x{3.116 cm} x{1.292 cm} x{3.192 cm} } \SetRowColor{DarkBackground} \mymulticolumn{3}{x{8.4cm}}{\bf\textcolor{white}{filters: Utility filters (cont)}} \tn % Row 17 \SetRowColor{LightBackground} & \seqsplit{unit*:} & {[}ms{]} {\emph{delay:}} units, one of {\emph{ms}}, {\emph{mm}}, or {\emph{samples}}. \tn % Row Count 4 (+ 4) % Row 18 \SetRowColor{white} & \seqsplit{subsample:} & When {\emph{true}}, an IIR filter is used to achieve subsample delay precision. When {\emph{false}}, will round to the nearest number of full samples. This is faster. \tn % Row Count 14 (+ 10) % Row 19 \SetRowColor{LightBackground} \{\{link="https://github.com/HEnquist/camilladsp?tab=readme-ov-file\#dither"\}\}Dither\{\{/link\}\} & & Intended to add shaped noise to 16-bit output. Several types are supported \tn % Row Count 20 (+ 6) % Row 20 \SetRowColor{white} & type: & Type of dither. See \{\{link="https://github.com/HEnquist/camilladsp?tab=readme-ov-file\#dither"\}\}{\bf{documentation}}\{\{/link\}\}. \tn % Row Count 28 (+ 8) % Row 21 \SetRowColor{LightBackground} & bits: & Target bit depth. Should match bitdepth of oversampling delta-sigma DACs. For true NOS DACs, should match the number of bits where the DAC is linear. \tn % Row Count 38 (+ 10) \end{tabularx} \par\addvspace{1.3em} \vfill \columnbreak \begin{tabularx}{8.4cm}{x{3.116 cm} x{1.292 cm} x{3.192 cm} } \SetRowColor{DarkBackground} \mymulticolumn{3}{x{8.4cm}}{\bf\textcolor{white}{filters: Utility filters (cont)}} \tn % Row 22 \SetRowColor{LightBackground} \{\{link="https://github.com/HEnquist/camilladsp?tab=readme-ov-file\#limiter"\}\}Limiter\{\{/link\}\} & & Limits output signal to a given level. \tn % Row Count 6 (+ 6) % Row 23 \SetRowColor{white} & \seqsplit{clip\_limit:} & Clipping level in dB. \tn % Row Count 8 (+ 2) % Row 24 \SetRowColor{LightBackground} & \seqsplit{soft\_clip*:} & {[}false{]} Enable soft clipping, introducing some harmonic distortion.. \tn % Row Count 13 (+ 5) % Row 25 \SetRowColor{white} \{\{link="https://github.com/HEnquist/camilladsp?tab=readme-ov-file\#difference-equation"\}\}DiffEq\{\{/link\}\} & & Implements a generic difference equation. See \{\{link="https://github.com/HEnquist/camilladsp?tab=readme-ov-file\#difference-equation"\}\}documentation\{\{/link\}\}. \tn % Row Count 23 (+ 10) % Row 26 \SetRowColor{LightBackground} & a: & {[}1.0{]} Coefficients a\textasciitilde{}0\textasciitilde{}, a\textasciitilde{}1\textasciitilde{}, ..., a\textasciitilde{}n\textasciitilde{}. \tn % Row Count 26 (+ 3) % Row 27 \SetRowColor{white} & b: & {[}1.0{]} Coefficients b\textasciitilde{}0\textasciitilde{}, b\textasciitilde{}1\textasciitilde{}, ..., b\textasciitilde{}n\textasciitilde{}. \tn % Row Count 29 (+ 3) \hhline{>{\arrayrulecolor{DarkBackground}}---} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{8.4cm}{x{1.9 cm} x{2.888 cm} x{2.812 cm} } \SetRowColor{DarkBackground} \mymulticolumn{3}{x{8.4cm}}{\bf\textcolor{white}{filters: Biquad filters (IIR)}} \tn % Row 0 \SetRowColor{LightBackground} \mymulticolumn{3}{x{8.4cm}}{Many standard filters are implemented as \{\{link="https://github.com/HEnquist/camilladsp?tab=readme-ov-file\#iir"\}\}Biquad IIR filters\{\{/link\}\}. These are specified using another {\emph{type:}} node beneath the biquad's {\emph{parameters:}} node. Values for this second {\emph{type:}} node follow. Type-specific nodes define each parameter for that type and are shown below.\{\{nl\}\}{\bf{Note}}: {\emph{bandwidth}} is given in octaves.} \tn % Row Count 8 (+ 8) % Row 1 \SetRowColor{white} Free & a1: a2: b0: b1: b2: & Normalized coefficients. \tn % Row Count 10 (+ 2) % Row 2 \SetRowColor{LightBackground} Highpass\{\{nl\}\}Lowpass & freq: q: & Second order high/lowpass filters (12dB/oct). \tn % Row Count 14 (+ 4) % Row 3 \SetRowColor{white} HighpassFO\{\{nl\}\}LowpassFO & freq: & First order high/lowpass filters (6dB/oct) \tn % Row Count 17 (+ 3) % Row 4 \SetRowColor{LightBackground} Highshelf\{\{nl\}\}Lowshelf & freq: gain:\{\{nl\}\}q: or slope: & {\emph{freq:}} is the center frequency, where the gain is half of {\emph{grain:}}. {\emph{slope:}} is in dB/octave. \tn % Row Count 24 (+ 7) % Row 5 \SetRowColor{white} HighshelfFO\{\{nl\}\}LowshelfFO & freq: gain: & {\emph{freq:}} is the center frequency, where the gain is half of {\emph{grain:}}. \tn % Row Count 29 (+ 5) % Row 6 \SetRowColor{LightBackground} Peaking & freq: gain:\{\{nl\}\}q: or bandwidth: & \tn % Row Count 32 (+ 3) \end{tabularx} \par\addvspace{1.3em} \vfill \columnbreak \begin{tabularx}{8.4cm}{x{1.9 cm} x{2.888 cm} x{2.812 cm} } \SetRowColor{DarkBackground} \mymulticolumn{3}{x{8.4cm}}{\bf\textcolor{white}{filters: Biquad filters (IIR) (cont)}} \tn % Row 7 \SetRowColor{LightBackground} Notch & freq:\{\{nl\}\}q: or bandwidth: & Has a large negative gain. \tn % Row Count 2 (+ 2) % Row 8 \SetRowColor{white} \seqsplit{GeneralNotch} & freq\_z:\{\{nl\}\}freq\_p:\{\{nl\}\}q\_p:\{\{nl\}\}normalize\_at\_dc:* & A notch filter where the pole and zero can be placed at different frequencies.\{\{nl\}\}{\emph{q\_p}} is the pole Q. \tn % Row Count 10 (+ 8) % Row 9 \SetRowColor{LightBackground} Bandpass & freq:\{\{nl\}\}q: or bandwidth: & Second order bandpass filter. \tn % Row Count 13 (+ 3) % Row 10 \SetRowColor{white} Allpass & freq:\{\{nl\}\}q: or bandwidth: & Second order allpass filter. \tn % Row Count 15 (+ 2) % Row 11 \SetRowColor{LightBackground} AllpassFO & freq: & First order allpass filter. \tn % Row Count 17 (+ 2) % Row 12 \SetRowColor{white} \seqsplit{LinkwitzTransform} & freq\_act:\{\{nl\}\}q\_act:\{\{nl\}\}freq\_target:\{\{nl\}\}q\_target: & Modifies a given actual speaker HP response (frequency and q) with a new target. \tn % Row Count 23 (+ 6) \hhline{>{\arrayrulecolor{DarkBackground}}---} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{8.4cm}{x{2.66 cm} x{2.356 cm} x{2.584 cm} } \SetRowColor{DarkBackground} \mymulticolumn{3}{x{8.4cm}}{\bf\textcolor{white}{filters: BiquadCombo filters (IIR)}} \tn % Row 0 \SetRowColor{LightBackground} \mymulticolumn{3}{x{8.4cm}}{These filters are composed of several \{\{link="https://github.com/HEnquist/camilladsp?tab=readme-ov-file\#iir"\}\}Biquad IIR filters\{\{/link\}\}. These are specified using another {\emph{type:}} node beneath the biquad's {\emph{parameters:}} node. Values for this second {\emph{type:}} node follow. Type-specific nodes define each parameter for that type and are shown below.\{\{nl\}\}{\bf{Note1}}: {\emph{bandwidth}} is given in octaves.\{\{nl\}\}{\bf{Note2:}} See also \{\{link="https://github.com/HEnquist/camilladsp/blob/master/filterfunctions.md"\}\}Higher order biquads\{\{/link\}\}} \tn % Row Count 11 (+ 11) % Row 1 \SetRowColor{white} ButterworthHighpass\{\{nl\}\}ButterworthLowpass & freq: order: & \tn % Row Count 15 (+ 4) % Row 2 \SetRowColor{LightBackground} LinkwitzRileyHighpass\{\{nl\}\}LinkwitzRileyLowpass & freq: order: & {\emph{order:}} must be even. \tn % Row Count 19 (+ 4) % Row 3 \SetRowColor{white} Tilt & gain: & Tilts across entire spectrum. Positive values increase the high frequencies. Half the gain is applied to the highs and negative half is applied to the lows. Gain limited to +/-100dB \tn % Row Count 33 (+ 14) \end{tabularx} \par\addvspace{1.3em} \vfill \columnbreak \begin{tabularx}{8.4cm}{x{2.66 cm} x{2.356 cm} x{2.584 cm} } \SetRowColor{DarkBackground} \mymulticolumn{3}{x{8.4cm}}{\bf\textcolor{white}{filters: BiquadCombo filters (IIR) (cont)}} \tn % Row 4 \SetRowColor{LightBackground} FivePointPeq & & Five band PEQ with a low shelf, three peaking filters, and a high shelf. All 15 values are required.\{\{nl\}\}fls: gls: qls:\{\{nl\}\}fp1: gp1: qp1:\{\{nl\}\}fp2: gp2: qp2:\{\{nl\}\}fp3: gp3: qp3:\{\{nl\}\}fhs: ghs: qhs: \tn % Row Count 16 (+ 16) % Row 5 \SetRowColor{white} \seqsplit{GraphicEqualizer} & freq\_min:\{\{nl\}\}freq\_max:\{\{nl\}\}gains: & Min/max frequencies default to 20Hz and 20kHz. {\emph{gains:}} is an array of gains for each band. The number of bands is set by the length of the array. \tn % Row Count 28 (+ 12) \hhline{>{\arrayrulecolor{DarkBackground}}---} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{8.4cm}{p{0.76 cm} p{0.76 cm} p{0.76 cm} } \SetRowColor{DarkBackground} \mymulticolumn{3}{x{8.4cm}}{\bf\textcolor{white}{filters: Convolution filters (FIR)}} \tn % Row 0 \SetRowColor{LightBackground} \mymulticolumn{3}{x{8.4cm}}{Conv (FIR)} \tn % Row Count 1 (+ 1) \hhline{>{\arrayrulecolor{DarkBackground}}---} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{8.4cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{8.4cm}}{\bf\textcolor{white}{Volume control faders}} \tn \SetRowColor{white} \mymulticolumn{1}{x{8.4cm}}{There are five volume control "channels" called "faders", named "Main" and "Aux1" to "Aux4". See \{\{link="https://github.com/HEnquist/camilladsp?tab=readme-ov-file\#volume-control"\}\}volume control.\{\{/link\}\}% Row Count 5 (+ 5) } \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{8.4cm}{x{1.44 cm} x{6.56 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{8.4cm}}{\bf\textcolor{white}{Supported sample formats}} \tn % Row 0 \SetRowColor{LightBackground} S16LE & Signed 16-bit int, stored as two bytes \tn % Row Count 2 (+ 2) % Row 1 \SetRowColor{white} S24LE & Signed 24-bit int, stored as four bytes (three bytes of data, one padding byte) \tn % Row Count 5 (+ 3) % Row 2 \SetRowColor{LightBackground} S24LE3 & Signed 24-bit int, stored as three bytes (with no padding) \tn % Row Count 7 (+ 2) % Row 3 \SetRowColor{white} S32LE & Signed 32-bit int, stored as four bytes \tn % Row Count 9 (+ 2) % Row 4 \SetRowColor{LightBackground} \seqsplit{FLOAT32LE} & 32-bit float, stored as four bytes \tn % Row Count 11 (+ 2) % Row 5 \SetRowColor{white} \seqsplit{FLOAT64LE} & 64-bit float, stored as eight bytes \tn % Row Count 13 (+ 2) \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{8.4cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{8.4cm}}{\bf\textcolor{white}{Supported sample formats by device type}} \tn % Row 0 \SetRowColor{LightBackground} \mymulticolumn{1}{x{8.4cm}}{} \tn % Row Count 0 (+ 0) % Row 1 \SetRowColor{white} \mymulticolumn{1}{x{8.4cm}}{S16LE} \tn % Row Count 1 (+ 1) % Row 2 \SetRowColor{LightBackground} \mymulticolumn{1}{x{8.4cm}}{S24LE} \tn % Row Count 2 (+ 1) % Row 3 \SetRowColor{white} \mymulticolumn{1}{x{8.4cm}}{S24LE3} \tn % Row Count 3 (+ 1) % Row 4 \SetRowColor{LightBackground} \mymulticolumn{1}{x{8.4cm}}{S32LE} \tn % Row Count 4 (+ 1) % Row 5 \SetRowColor{white} \mymulticolumn{1}{x{8.4cm}}{FLOAT32LE} \tn % Row Count 5 (+ 1) % Row 6 \SetRowColor{LightBackground} \mymulticolumn{1}{x{8.4cm}}{FLOAT64LE} \tn % Row Count 6 (+ 1) % Row 7 \SetRowColor{white} \mymulticolumn{1}{x{8.4cm}}{{\bf{Other = File/Stdin/Stdout}}} \tn % Row Count 7 (+ 1) \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{8.4cm}{x{3.268 cm} x{2.28 cm} x{2.052 cm} } \SetRowColor{DarkBackground} \mymulticolumn{3}{x{8.4cm}}{\bf\textcolor{white}{Equivalent sample formats by API}} \tn % Row 0 \SetRowColor{LightBackground} {\bf{CamillaDSP}} & {\bf{Alsa}} & {\bf{Pulse}} \tn % Row Count 1 (+ 1) % Row 1 \SetRowColor{white} S16LE & S16\_LE & S16LE \tn % Row Count 2 (+ 1) % Row 2 \SetRowColor{LightBackground} S24LE & S24\_LE & S24\_32LE \tn % Row Count 3 (+ 1) % Row 3 \SetRowColor{white} S24LE3 & S24\_3LE & S24LE \tn % Row Count 4 (+ 1) % Row 4 \SetRowColor{LightBackground} S32LE & S32\_LE & S32LE \tn % Row Count 5 (+ 1) % Row 5 \SetRowColor{white} FLOAT32LE & FLOAT\_LE & FLOAT32LE \tn % Row Count 6 (+ 1) % Row 6 \SetRowColor{LightBackground} FLOAT64LE & FLOAT64\_LE & - \tn % Row Count 7 (+ 1) \hhline{>{\arrayrulecolor{DarkBackground}}---} \end{tabularx} \par\addvspace{1.3em} % That's all folks \end{multicols*} \end{document}