# How To This document describes the common commands for building and testing the project. ## Features * **Real-time Audio Synthesis**: The demo features a multi-voice synthesizer that generates audio in real-time from spectrograms. * **Dynamic Sound Updates**: Spectrograms can be updated dynamically and safely during runtime for evolving soundscapes. ## Building ### Debug Build ```bash cmake -S . -B build cmake --build build ``` ### Size-Optimized Build ```bash cmake -S . -B build -DDEMO_SIZE_OPT=ON cmake --build build ``` ## Testing To build and run the tests, you need to enable the `DEMO_BUILD_TESTS` option in CMake. Available test suites: * `HammingWindowTest`: Verifies the properties of the Hamming window function. * `SynthEngineTest`: Verifies the core functionality of the audio synthesizer. * `SpectoolEndToEndTest`: Performs an end-to-end test of the `spectool` by generating a WAV file, analyzing it, and verifying the output. ```bash cmake -S . -B build -DDEMO_BUILD_TESTS=ON cmake --build build cd build ctest cd .. ``` ## Tools ### Spectrogram Tool (`spectool`) A command-line tool for analyzing WAV and MP3 files into spectrograms and playing them back. #### Building the Tool To build `spectool`, you need to enable the `DEMO_BUILD_TOOLS` option in CMake. ```bash cmake -S . -B build -DDEMO_BUILD_TOOLS=ON cmake --build build ``` The executable will be located at `build/spectool`. #### Usage **Analyze an audio file:** ```bash ./build/spectool analyze path/to/input.wav path/to/output.spec # or ./build/spectool analyze path/to/input.mp3 path/to/output.spec ``` **Play a spectrogram file:** ```bash ./build/spectool play path/to/input.spec ```