3.6 KiB
3.6 KiB
TechDJ PyQt5 - Native DJ Application
A lightweight native alternative to the web-based TechDJ panel, built with PyQt5.
Features
✅ Lightweight - Uses ~120-150MB RAM (vs ~400MB for Chrome) ✅ Local Audio Processing - Downloads songs from Flask server and processes locally ✅ Low Latency - Instant response to controls, perfect for live DJing ✅ Full DJ Features:
- Dual decks with independent playback
- Crossfader mixing
- Waveform display
- Hot cues (4 per deck)
- Speed/pitch control
- Volume control per deck
- Real-time audio visualization
Installation
- Install dependencies:
pip install -r requirements.txt
Note: On Linux, you may also need to install PortAudio:
# Ubuntu/Debian
sudo apt-get install portaudio19-dev python3-pyqt5
# Fedora
sudo dnf install portaudio-devel python3-qt5
# Arch
sudo pacman -S portaudio python-pyqt5
Usage
- Start the Flask server (in one terminal):
python server.py
- Launch the PyQt5 DJ app (in another terminal):
python techdj_qt.py
How It Works
- Library Management: Fetches song list from Flask server at
http://localhost:5000/library.json - Song Download: Downloads MP3 files to local cache (
~/.techdj_cache/) on first use - Local Playback: Uses
sounddevicefor efficient real-time audio processing - Caching: Songs are cached locally for instant loading on subsequent uses
Architecture
┌─────────────────────┐
│ PyQt5 Native App │ (~150MB RAM)
│ │
│ • Fetches library │
│ • Downloads & caches│
│ • Local audio mix │
│ • Real-time DSP │
└─────────────────────┘
│
│ HTTP (library + downloads)
▼
┌─────────────────────┐
│ Flask Server │
│ (port 5000/5001) │
│ │
│ • Serves library │
│ • Serves MP3 files │
│ • Handles streaming │
└─────────────────────┘
Memory Comparison
| Version | RAM Usage | CPU Usage | Latency |
|---|---|---|---|
| Chrome Web Panel | ~400MB | High | ~50-100ms |
| PyQt5 Native | ~120-150MB | Low | <10ms |
Keyboard Shortcuts
- Space: Play/Pause active deck
- 1-4: Hot cues for Deck A
- 5-8: Hot cues for Deck B
- Q/W: Volume Deck A/B
- A/S: Speed Deck A/B
Cache Management
Songs are cached in ~/.techdj_cache/. To clear the cache:
rm -rf ~/.techdj_cache/
Troubleshooting
Audio Issues
If you get audio errors, check your audio devices:
import sounddevice as sd
print(sd.query_devices())
Connection Issues
Make sure the Flask server is running on port 5000:
curl http://localhost:5000/library.json
Comparison with Web Panel
| Feature | Web Panel | PyQt5 Native |
|---|---|---|
| Memory Usage | ~400MB | ~150MB |
| Installation | None (browser) | Requires Python + deps |
| Mobile Support | Excellent | None |
| Remote Access | Easy | Requires VPN/SSH |
| Audio Latency | Higher | Lower |
| Offline Mode | No | Yes (cached songs) |
| Battery Impact | Higher | Lower |
Future Enhancements
- Broadcast to Flask server for web listeners
- BPM detection
- Auto-sync between decks
- Effects (reverb, delay, etc.)
- Recording/export
- MIDI controller support
- Playlist management
License
Same as TechDJ main project