314 lines
6.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 <input.wav> <output.wav>
```
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.