# AAC Encoder/Decoder Assignment (Multimedia – AUTh) ## Overview This repository contains a staged implementation of a simplified AAC-like audio encoder/decoder pipeline, developed in the context of the **Multimedia** course at Aristotle University of Thessaloniki (AUTh). The project follows a progressive, level-based structure: - **Level 1:** Core analysis/synthesis pipeline - **Level 2:** Full transform-domain encoding with quantization - **Level 3:** Psychoacoustic modeling and perceptual coding enhancements The goal of this work is to: - Faithfully implement the processing chain specified in the assignment - Validate correctness using structured and reproducible tests - Maintain a clean and reproducible project architecture - Ensure separation between development logic and submission packaging --- ## System Architecture The implemented pipeline follows a simplified AAC-style structure: ``` Input WAV ↓ SSC (Segmentation Control) ↓ Filterbank (MDCT) ↓ [TNS / Psychoacoustic Model] (Level 3) ↓ Quantization & Coding (Level 2+) ↓ Bitstream Structuring ↓ ----------------------------------------- ↓ Inverse Quantization ↓ Inverse Filterbank (IMDCT) ↓ OLA Reconstruction ↓ Output WAV ``` Each level progressively enables more blocks of this pipeline. --- ## Repository Structure The repository is organized into source code, material, and report files. ``` root/ │ ├── source/ │ ├── level_1/ │ ├── level_2/ │ ├── level_3/ │ ├── core/ │ └── material/ │ ├── report/ ├── README.md └── LICENSE ``` ### `source/` Contains all implementation code. #### `level_x/` Each level directory contains: - `level_x.py` (main module entry point) - `core/` (hard-links to shared implementation) - `material/` (hard-links to required helper material) - `tests/` (level-specific tests) Each level is **self-contained** to satisfy submission requirements. #### `core/` This directory contains the centralized implementation of: - SSC - MDCT / IMDCT filterbank - Quantizer / dequantizer - Psychoacoustic model - TNS - Bitstream handling - Encoder/decoder pipelines All development happens here. Each `level_x/core/` directory references these files using **hard links**, ensuring: - No code duplication - No synchronization errors - Clean development workflow #### `material/` Contains helper files provided by the assignment: - Sample audio - Reference data - Required constants or auxiliary files --- ## Development Workflow Design One of the project requirements was to deliver `level_x` directories containing all required files, without referencing external directories. Naively copying files across levels would introduce: - Code redundancy - High maintenance cost - Risk of inconsistencies - Debugging complexity To avoid this: - All implementation lives in `source/core/` - Each `level_x` directory contains hard-links to `core/` and `material/` This ensures: - Single source of truth - Clean modular structure - Instructor-compliant submission format - Safe iterative development --- # Level Descriptions --- ## Level 1 – Core Transform Pipeline ### Goal Implement the baseline transform-domain analysis/synthesis chain. ### Implemented Components - Sequence Segmentation Control (SSC) - MDCT analysis filterbank - IMDCT synthesis filterbank - Overlap-Add (OLA) reconstruction - End-to-end encoder/decoder: - `aac_coder_1()` - `i_aac_coder_1()` - Demo: - `demo_aac_1()` ### Testing Coverage - SSC unit tests - MDCT / IMDCT correctness tests - Perfect reconstruction validation - OLA consistency tests - Encoder/decoder integration tests This level ensures transform-domain correctness and signal integrity. --- ## Level 2 – Quantization and Coding ### Goal Extend Level 1 by implementing transform-domain quantization and coding. ### Implemented Components - Scalar quantization - Dequantization - Basic bitstream formatting - Integration into encoder/decoder pipeline: - `aac_coder_2()` - `i_aac_coder_2()` - Demo: - `demo_aac_2()` ### Validation - SNR-based quality evaluation - Consistency tests between quantizer and inverse quantizer - End-to-end reconstruction tests This level introduces compression and controlled signal degradation. --- ## Level 3 – Psychoacoustic Model & Perceptual Coding ### Goal Incorporate perceptual modeling to improve compression efficiency. ### Implemented Components - Psychoacoustic model - Masking threshold estimation - TNS (Temporal Noise Shaping) - Adaptive quantization - Full encoding/decoding pipeline: - `aac_coder_3()` - `i_aac_coder_3()` - Demo: - `demo_aac_3()` ### Validation - Perceptual improvements compared to Level 2 - Stability tests - End-to-end evaluation This level approximates a simplified perceptual AAC-like encoder. --- # How to Run All commands assume you are inside: ``` source/ ``` --- ## Run Level Demo Navigate to the desired level: ``` cd source/level_x ``` Run: ```bash python -m level_x ``` Example: ```bash python -m level_1 material/LicorDeCalandraca.wav material/LicorDeCalandraca_out.wav ``` The demo prints: - Overall SNR (dB) - Processing information --- # Running Tests Tests are written using `pytest`. A `pytest.ini` file is included in `source/` to ensure proper module resolution. From inside `source/`: ```bash pytest -v ``` Run specific level tests: ```bash pytest -v level_1/tests pytest -v level_2/tests pytest -v level_3/tests ``` Run a specific test file: ```bash pytest -v level_1/tests/test_SSC.py ``` --- # Reproducibility - Python version: 3.x - Tests validated with `pytest` - No external dependencies beyond assignment requirements - Deterministic pipeline execution --- # Disclaimer This project was developed solely for educational purposes as part of the Multimedia course at AUTh. It is provided **"as is"**, without any express or implied warranties. The author assumes no responsibility for any misuse, data loss, security incidents, or damages resulting from the use of this software. This implementation should not be used in production environments. All work, modifications, and results are the sole responsibility of the author.