Imported from GitHub: Can-Bot/RTEP_Pedal · commit 75bee7c · license MIT
Description
Repository for ENG5220: Real-Time Embedded Programming - S.H.R.E.D Pedal
README
🎛️ Real-Time Digital Effects Pedal
A modular, real-time audio effects system for Raspberry Pi, developed in modern C++ with multithreading, low-latency processing, and unit-tested DSP effect chains.
📜 Project Overview
The Real-Time Harmoniser is a standalone real-time embedded system designed to apply audio effects (like pitch-shifting and gain distortion) to incoming audio with minimal latency. The pedal is controllable via a hardware interface and written for the ENG5220: Real-Time Embedded Programming course.
Key Features:
- Modular DSP architecture with hot-swappable effect chains
- Sample-by-sample processing for minimal latency
- Real-time capable Harmonizer using SignalsmithStretch
- Multithreaded control-safe design with atomic buffer swapping
- CI-integrated Google Test unit testing
- Memory-safe code verified with Valgrind
🧩 System Architecture
+-----------+ +--------------+ +--------------------+
| Audio In | --> | Sampling | --> | DigitalSignalChain | --> Audio Out
+-----------+ +--------------+ +--------------------+
| Gain, Fuzz, Harmonizer ...
+--------------------+
Each audio sample flows through a configurable DSP chain loaded dynamically from a config file.
⚙️ Getting Started
🔧 Prerequisites
- Raspberry Pi 4/5 (or any Linux system)
libsndfile1-dev,libasound2-dev,libgtest-dev,valgrind- CMake ≥ 3.7, Clang or GCC
🛠️ Build
chmod +x code/init.sh code/build.sh
./code/init.sh # Installs dependencies and fetches submodules
./code/build.sh # Builds the pedal and test binaries
▶️ Run
./code/run.sh # Runs the real-time pedal binary
✅ Unit Tests
./code/unit_test.sh # Runs unit tests with Valgrind
🧼 Clean
./code/clean_run.sh # Re-builds the project and runs
./code/clean_test.sh # Re-builds the project and runs the integration test
📂 Project Structure
code/
├── src/ # All source files
│ ├── dsp/ # DSP chain and factory
│ ├── effects/ # Harmonizer, Gain, Fuzz etc.
│ ├── sampling/ # Sample and output modules
│ └── test/ # Functional and unit tests
├── assets/ # Input/output WAV files and configs
├── CMakeLists.txt # Project build configuration
├── run.sh # Launches the pedal binary
├── test.sh # Runs Valgrind test harness
└── init.sh # Dependency setup and submodule fetch
📊 Performance
| Metric | Value |
|---|---|
| Latency (per sample) | < 3μs (tested on x86) |
| Realtime Factor | ~10x |
| CPU Usage | < 40% on RPi 4 |
| Memory Leaks | ❌ None beyond Alsa Standard (Valgrind verified) |
🔬 Features Under Development
- Live web-based configuration via Angular UI (
shred.local) - Additional effects: Reverb, Delay
- Plugin support for 3rd-party effect modules
✅ Achievements
| Criteria | Status |
|---|---|
| Multithreaded DSP | ✅ Lock-free atomic switching |
| Realtime sample-by-sample | ✅ Implemented in Harmonizer |
| Unit Testing | ✅ GTest + Valgrind |
| CI/CD Integration | ✅ GitHub Actions |
| Well-commented, structured code | ✅ Reviewed and documented |
| Pedal UI and Config | ✅ Completed |
📜 License
MIT License. See LICENSE for details.
No comments yet. Be the first to ask about this board.