techdj/README_PYQT5.md

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

  1. 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

  1. Start the Flask server (in one terminal):
python server.py
  1. Launch the PyQt5 DJ app (in another terminal):
python techdj_qt.py

How It Works

  1. Library Management: Fetches song list from Flask server at http://localhost:5000/library.json
  2. Song Download: Downloads MP3 files to local cache (~/.techdj_cache/) on first use
  3. Local Playback: Uses sounddevice for efficient real-time audio processing
  4. 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