\label{index_md_README}%
\Hypertarget{index_md_README}%
 Audio capture and terminal visualization tool that captures from a microphone and displays a time-\/domain graph that scrolls across your terminal.\hypertarget{index_autotoc_md1}{}\doxysection{Features}\label{index_autotoc_md1}

\begin{DoxyItemize}
\item Real-\/time audio capture from microphone (robust automatic device selection)
\item FFT-\/based frequency analysis
\item Customizable logging options (e.\+g., average sound per tick with peak detection)
\item Terminal-\/based visualization
\item Multi-\/compiler support (GCC, latest available Clang)
\item Debug and Release build configurations
\end{DoxyItemize}\hypertarget{index_autotoc_md2}{}\doxysection{Microphone Device Selection}\label{index_autotoc_md2}
By default, tico automatically selects the most appropriate microphone device using robust heuristics\+:


\begin{DoxyItemize}
\item {\bfseries{USB microphones are preferred}}\+: If a sysdefault device with a USB description is found, it is used automatically.
\item {\bfseries{Sysdefault fallback}}\+: If no USB device is found, any sysdefault device is used.
\item {\bfseries{Final fallback}}\+: If no sysdefault device is found, the standard \char`\"{}default\char`\"{} ALSA device is used.
\end{DoxyItemize}

This logic ensures that USB microphones are prioritized for best compatibility and quality, but the program will work out-\/of-\/the-\/box on most Linux systems with ALSA.

You can override the device selection by specifying the device name with the {\ttfamily -\/d} option.\hypertarget{index_autotoc_md3}{}\doxysection{Prerequisites}\label{index_autotoc_md3}
Before building, install the required dependencies\+:


\begin{DoxyCode}{0}
\DoxyCodeLine{apt-\/get install libfftw3-\/dev libasound2-\/dev cmake}

\end{DoxyCode}



\begin{DoxyItemize}
\item {\bfseries{libfftw3-\/dev}}\+: FFTW3 library for FFT calculations
\item {\bfseries{libasound2-\/dev}}\+: ALSA sound library for audio capture
\item {\bfseries{cmake}}\+: Build system (3.\+25.\+0 or later)
\end{DoxyItemize}\hypertarget{index_autotoc_md4}{}\doxysection{Building}\label{index_autotoc_md4}
This project uses CMake with preset configurations for different compilers and build types.\hypertarget{index_autotoc_md5}{}\doxysubsection{Quick Start (\+GCC, Debug)}\label{index_autotoc_md5}

\begin{DoxyCode}{0}
\DoxyCodeLine{cmake -\/-\/preset debug}
\DoxyCodeLine{cmake -\/-\/build -\/-\/preset debug}

\end{DoxyCode}
\hypertarget{index_autotoc_md6}{}\doxysubsection{Available Presets}\label{index_autotoc_md6}
\hypertarget{index_autotoc_md7}{}\doxysubsubsection{Configure Presets}\label{index_autotoc_md7}
\tabulinesep=1mm
\begin{longtabu}spread 0pt [c]{*{4}{|X[-1]}|}
\hline
\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Preset   }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Compiler   }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Build Type   }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Description    }\\\cline{1-4}
\endfirsthead
\hline
\endfoot
\hline
\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Preset   }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Compiler   }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Build Type   }&\PBS\centering \cellcolor{\tableheadbgcolor}\textbf{ Description    }\\\cline{1-4}
\endhead
{\ttfamily debug}   &GCC   &Debug   &Debug build with default GCC    \\\cline{1-4}
{\ttfamily release}   &GCC   &Release   &Release build with default GCC    \\\cline{1-4}
{\ttfamily debug-\/gcc}   &GCC   &Debug   &Explicit GCC debug build    \\\cline{1-4}
{\ttfamily release-\/gcc}   &GCC   &Release   &Explicit GCC release build    \\\cline{1-4}
{\ttfamily debug-\/clang}   &Clang (auto-\/detected latest)   &Debug   &Debug build with newest installed Clang    \\\cline{1-4}
{\ttfamily release-\/clang}   &Clang (auto-\/detected latest)   &Release   &Release build with newest installed Clang    \\\cline{1-4}
{\ttfamily doxygen}   &Clang (auto-\/detected latest)   &Debug   &Generate API documentation with Doxygen   \\\cline{1-4}
\end{longtabu}
\hypertarget{index_autotoc_md8}{}\doxysubsubsection{Build Examples}\label{index_autotoc_md8}

\begin{DoxyCode}{0}
\DoxyCodeLine{\# GCC builds}
\DoxyCodeLine{cmake -\/-\/preset debug-\/gcc}
\DoxyCodeLine{cmake -\/-\/build -\/-\/preset debug-\/gcc}
\DoxyCodeLine{}
\DoxyCodeLine{cmake -\/-\/preset release-\/gcc}
\DoxyCodeLine{cmake -\/-\/build -\/-\/preset release-\/gcc}
\DoxyCodeLine{}
\DoxyCodeLine{\# Clang latest builds}
\DoxyCodeLine{cmake -\/-\/preset debug-\/clang}
\DoxyCodeLine{cmake -\/-\/build -\/-\/preset debug-\/clang}
\DoxyCodeLine{}
\DoxyCodeLine{cmake -\/-\/preset release-\/clang}
\DoxyCodeLine{cmake -\/-\/build -\/-\/preset release-\/clang}

\end{DoxyCode}
\hypertarget{index_autotoc_md9}{}\doxysubsection{Workflow Presets}\label{index_autotoc_md9}
For convenience, workflow presets combine configure → build → test steps\+:


\begin{DoxyCode}{0}
\DoxyCodeLine{\# Run full workflow (configure + build + test)}
\DoxyCodeLine{cmake -\/-\/workflow -\/-\/preset debug}
\DoxyCodeLine{cmake -\/-\/workflow -\/-\/preset release}
\DoxyCodeLine{cmake -\/-\/workflow -\/-\/preset debug-\/gcc}
\DoxyCodeLine{cmake -\/-\/workflow -\/-\/preset release-\/gcc}
\DoxyCodeLine{cmake -\/-\/workflow -\/-\/preset debug-\/clang}
\DoxyCodeLine{cmake -\/-\/workflow -\/-\/preset release-\/clang}
\DoxyCodeLine{cmake -\/-\/workflow -\/-\/preset doxygen}

\end{DoxyCode}
\hypertarget{index_autotoc_md10}{}\doxysubsection{Quality Workflow}\label{index_autotoc_md10}
Run formatting checks, clang-\/tidy, clang build-\/and-\/test, and a GCC build in one command\+:


\begin{DoxyCode}{0}
\DoxyCodeLine{cmake -\/-\/workflow -\/-\/preset quality}

\end{DoxyCode}


The {\ttfamily quality} workflow runs these steps\+:


\begin{DoxyItemize}
\item Configure ({\ttfamily debug-\/clang})
\item Format check ({\ttfamily format-\/check})
\item Static analysis ({\ttfamily clang-\/tidy})
\item Build ({\ttfamily debug-\/clang})
\item Test ({\ttfamily debug\+\_\+ctest-\/clang})
\item GCC build ({\ttfamily quality-\/gcc-\/build} -\/\texorpdfstring{$>$}{>} runs {\ttfamily debug-\/gcc} configure + build)
\item Documentation ({\ttfamily doxygen})
\end{DoxyItemize}\hypertarget{index_autotoc_md11}{}\doxysection{Documentation}\label{index_autotoc_md11}
API documentation is generated using \href{https://www.doxygen.nl/}{\texttt{ Doxygen}}.\hypertarget{index_autotoc_md12}{}\doxysubsection{Doxygen Documentation Workflows}\label{index_autotoc_md12}
You can generate API documentation as part of a workflow or as a standalone step\+:


\begin{DoxyItemize}
\item {\bfseries{Debug/\+Clang docs\+:}} 
\begin{DoxyCode}{0}
\DoxyCodeLine{cmake -\/-\/workflow -\/-\/preset doxygen}

\end{DoxyCode}
 Output\+: {\ttfamily build/clang-\/debug/html/}
\item {\bfseries{Release/\+GCC docs\+:}} 
\begin{DoxyCode}{0}
\DoxyCodeLine{cmake -\/-\/workflow -\/-\/preset release}

\end{DoxyCode}
 (Runs doxygen as the last step; output\+: {\ttfamily build/release/html/})
\item {\bfseries{Release/\+Clang docs\+:}} 
\begin{DoxyCode}{0}
\DoxyCodeLine{cmake -\/-\/workflow -\/-\/preset release-\/clang}

\end{DoxyCode}
 (Runs doxygen as the last step; output\+: {\ttfamily build/clang-\/release/html/})
\end{DoxyItemize}

You can also use the build presets directly\+:


\begin{DoxyItemize}
\item {\ttfamily cmake -\/-\/build -\/-\/preset doxygen} (debug/clang)
\item {\ttfamily cmake -\/-\/build -\/-\/preset doxygen-\/release} (release/gcc)
\item {\ttfamily cmake -\/-\/build -\/-\/preset doxygen-\/release-\/clang} (release/clang)
\end{DoxyItemize}

\begin{quote}
{\bfseries{Note\+:}} The generated HTML documentation will be found in the {\ttfamily html/} directory inside the build directory for the preset you use. \end{quote}
\hypertarget{index_autotoc_md13}{}\doxysection{Testing}\label{index_autotoc_md13}
Run tests using CTest presets\+:


\begin{DoxyCode}{0}
\DoxyCodeLine{\# Test with GCC}
\DoxyCodeLine{ctest -\/-\/preset debug\_ctest}
\DoxyCodeLine{ctest -\/-\/preset release\_ctest}
\DoxyCodeLine{}
\DoxyCodeLine{\# Test with Clang latest}
\DoxyCodeLine{ctest -\/-\/preset debug\_ctest-\/clang}
\DoxyCodeLine{ctest -\/-\/preset release\_ctest-\/clang}
\DoxyCodeLine{}
\DoxyCodeLine{\# Test with explicit GCC}
\DoxyCodeLine{ctest -\/-\/preset debug\_ctest-\/gcc}
\DoxyCodeLine{ctest -\/-\/preset release\_ctest-\/gcc}

\end{DoxyCode}
\hypertarget{index_autotoc_md14}{}\doxysection{Usage}\label{index_autotoc_md14}
\hypertarget{index_autotoc_md15}{}\doxysubsection{Basic Capture}\label{index_autotoc_md15}

\begin{DoxyCode}{0}
\DoxyCodeLine{./tico}

\end{DoxyCode}
\hypertarget{index_autotoc_md16}{}\doxysubsection{With Logging Options}\label{index_autotoc_md16}

\begin{DoxyCode}{0}
\DoxyCodeLine{\# Average sound of a tick per tooth with peak detection}
\DoxyCodeLine{./tico -\/j 15 -\/p peak}

\end{DoxyCode}
\hypertarget{index_autotoc_md17}{}\doxysection{Development}\label{index_autotoc_md17}
\hypertarget{index_autotoc_md18}{}\doxysubsection{Project Structure}\label{index_autotoc_md18}

\begin{DoxyItemize}
\item Build outputs are organized by compiler and build type\+:
\begin{DoxyItemize}
\item {\ttfamily build/debug/} -\/ GCC debug build
\item {\ttfamily build/release/} -\/ GCC release build
\item {\ttfamily build/gcc-\/debug/} -\/ Explicit GCC debug
\item {\ttfamily build/gcc-\/release/} -\/ Explicit GCC release
\item {\ttfamily build/clang-\/debug/} -\/ Clang debug
\item {\ttfamily build/clang-\/release/} -\/ Clang release
\end{DoxyItemize}
\end{DoxyItemize}\hypertarget{index_autotoc_md19}{}\doxysubsection{Compiler Versions}\label{index_autotoc_md19}

\begin{DoxyItemize}
\item GCC (default system version)
\item Clang (newest available version detected at configure time)
\end{DoxyItemize}

The project requires C11 standard support and exports compile commands for IDE integration.\hypertarget{index_autotoc_md20}{}\doxysubsection{Building from Scratch}\label{index_autotoc_md20}

\begin{DoxyCode}{0}
\DoxyCodeLine{\# Clean previous builds (optional)}
\DoxyCodeLine{rm -\/rf build/}
\DoxyCodeLine{}
\DoxyCodeLine{\# Configure with your chosen preset}
\DoxyCodeLine{cmake -\/-\/preset debug-\/gcc}
\DoxyCodeLine{}
\DoxyCodeLine{\# Build}
\DoxyCodeLine{cmake -\/-\/build -\/-\/preset debug-\/gcc}
\DoxyCodeLine{}
\DoxyCodeLine{\# Test}
\DoxyCodeLine{ctest -\/-\/preset debug\_ctest-\/gcc}

\end{DoxyCode}
\hypertarget{index_autotoc_md21}{}\doxysection{License}\label{index_autotoc_md21}
This project is licensed under the GNU General Public License v3.\+0 (GPLv3).

{\bfseries{Note\+:}} The GPLv3 license is required because this project depends on the FFTW library, which is licensed under GPL. As a result, any software linked with FFTW must also be distributed under the GPL.

See the LICENSE file for the full license text. 