AAC Encoder/Decoder Assignment (Multimedia)
About
This repository contains a staged implementation of a simplified AAC-like audio coder/decoder pipeline, developed in the context of the Multimedia course at Aristotle University of Thessaloniki (AUTh). The project is organized into incremental levels, where each level introduces additional functionality and requirements (e.g., segmentation control, filterbanks, and progressively more complete encoding/decoding stages). The purpose of this work is to implement the specified processing chain faithfully to the assignment specification, validate correctness with structured tests, and maintain a clean, reproducible project structure throughout development.
Repository Structure
The repository is organized into source code, project requirements and report files:
-
sourceUndersourcedirectory there are:level_1Containing the baseline implementation of the required processing chain for Level 1.level_2Containing the baseline implementation of the required processing chain for Level 2.level_3Containing the baseline implementation of the required processing chain for Level 3.
Each level contains:
-
a module file (e.g.,
level_1/level_1.py) -
a dedicated
core/directory -
a dedicated
material/directory -
coreThis directory contains the actual implementation, which is referenced in each one of thelevel_x/core/directories. -
materialThis directory contains the actual given helper material files
-
reportDirectory that contains the TeX files for the report -
root directory filesLike Readme.md, LICENSE, etc...
Notes on Repository structure and Development Workflow
One of the project requirements was to deliver level_x directories containing all the necessary files, without referencing any other external files and libraries.
This requirement introduces copies and is considered error-prone.
In order to avoid that we centralized the development of the project inside core directory.
Each level directory contains a references(hard-links) to the files of both core and material folders.
This way we keep the instructor happy while avoiding the nightmare of code redundancy.
Level Descriptions
Level 1
Goal: Implement the core analysis/synthesis chain for Level 1 as defined in the assignment specification.
Implemented components (current status):
- SSC (Sequence Segmentation Control)
- Filterbank (MDCT analysis) and inverse filterbank (IMDCT synthesis)
- End-to-end encoder/decoder functions:
aac_coder_1()i_aac_coder_1()
- Demo function:
demo_aac_1()
Tests (current status):
- Module-level tests for SSC
- Module-level tests for filterbank and inverse filterbank (including OLA-based reconstruction checks)
- Internal consistency tests for MDCT/IMDCT
- Module-level tests for
aac_coder_1/i_aac_coder_1
Level 2
Goal: ...
Level 3
Goal: ...
How to Run
In order to run the demo functionality you should be inside the source/level_x directory.
Run Level 1 Demo
Run the Level 1 demo by providing an input WAV file and an output WAV file:
python -m level_1 <input.wav> <output.wav>
Example:
python -m level_1 material/LicorDeCalandraca.wav material/LicorDeCalandraca_out.wav
The demo prints the overall SNR (in dB) between the original and reconstructed audio.
How to Run Tests
Tests are written and can get executed using pytest and are organized per level.
In order to run the demo functionality you should be inside the source/ directory.
The repository includes a pytest.ini file inside the source/ directory.
This file explicitly sets the Python module search path so that imports such as the followings
work consistently when running tests from the command line.
From inside source/, run all tests:
pytest -v
To run only level_1/tests or a specific test file:
pytest -v level_1/tests
pytest -v level_1/tests/test_SSC.py
Disclaimer
This project was developed solely for educational purposes. 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.