4.8 KiB
4.8 KiB
Phase 7: Music & DJ Features - Implementation Guide
Duration: Weeks 30-33 | Complexity: Medium | Team Size: 2-3 devs
Executive Summary
Phase 7 enables music creators and DJs with specialized tools: DJ layout, music visualization, queue management, and Spotify integration.
Phase 7 Goals
- DJ-specific UI mode (different layout)
- Audio-reactive visualizations
- Music queue management
- Spotify/music platform integration
- High-bitrate audio support
Key Features
1. DJ Mode Layout (25%)
Normal stream: DJ Mode:
┌─────────────┐ ┌───────────────┐
│ Player │ │ Visualizer │
│ │ │ (full screen) │
├─────────────┤ ├───────────────┤
│ Chat │ │ Now Playing │
└─────────────┘ │ Next Track │
│ Queue (compact)
└───────────────┘
2. Audio Visualization (40%)
Libraries:
- Three.js (3D)
- PixiJS (2D)
- Babylon.js
Visualization types:
- Classic waveform
- Particle system
- Audio spectrum
- Equalizer bars
- Custom animations
Real-time data:
- Audio frequency analysis (Web Audio API)
- Peak detection
- Beat detection
- BPM extraction
3. Queue Management (20%)
Features:
- Display current track
- Queue list with drag-reorder
- Next up indication
- Request system (chat: !songrequest)
- Auto-queue next track
Database:
- StreamQueue
- QueueItem
- SongRequest
- SongLibrary
4. Spotify Integration (15%)
Setup:
- Creator links Spotify account
- OAuth flow
- Scopes: playlist-read, playlist-modify-private
Features:
- Import playlists
- Show Spotify player widget
- Link to Spotify album
- Playlist history
API Integration:
- Now playing info
- Preview playback
- Album artwork
Implementation
Database
model StreamQueue {
id String @id
streamId String @unique
stream Stream @relation(fields: [streamId])
currentTrack Int? // Index in queue
items QueueItem[]
}
model QueueItem {
id String @id
queueId String
queue StreamQueue @relation(fields: [queueId])
trackId String // e.g., Spotify track ID
title String
artist String
album String?
cover String? // Album art URL
duration Int // Seconds
requestedBy String? // User ID
position Int
playedAt DateTime?
createdAt DateTime
updatedAt DateTime
}
model SongRequest {
id String @id
userId String
user User @relation(fields: [userId])
streamId String
stream Stream @relation(fields: [streamId])
trackId String
title String
artist String
status String // PENDING, PLAYING, SKIPPED, REJECTED
createdAt DateTime
}
model DJProfile {
id String @id
channelId String @unique
channel Channel @relation(fields: [channelId])
isDJMode Boolean @default(false)
visualizationType String @default("spectrum") // spectrum, waveform, particles
spotifyConnected Boolean @default(false)
spotifyId String? // OAuth ID
spotifyAccessToken String? // Encrypted
bitrate Int @default(256) // kbps, up to 320
audioFormat String @default("AAC") // AAC, FLAC, etc
updatedAt DateTime
}
Key Components
components/dj/
├── DJMode.tsx (layout wrapper)
├── Visualizer.tsx (audio-reactive)
├── NowPlaying.tsx (track info)
├── QueueList.tsx (manage tracks)
├── SpotifyWidget.tsx (Spotify player)
└── SongRequestModeration.tsx
APIs
Queue:
- GET /api/streams/:id/queue
- POST /api/queue/:queueId/add
- PUT /api/queue/:queueId/reorder
- DELETE /api/queue/:queueId/items/:id
- POST /api/queue/:queueId/skip
Requests:
- POST /api/song-requests (viewer requests)
- GET /api/streams/:id/requests
- PUT /api/requests/:id (approve/reject)
DJ Settings:
- PUT /api/dj-profile (update settings)
- POST /api/spotify/connect (OAuth)
- GET /api/spotify/playlists
Success Metrics
- 100+ music creators active
- 80%+ DJ streams use visualizations
- <50ms visualization latency
- 10k+ Spotify playlists linked
- 50k+ song requests per month
Technical Stack
- Audio Analysis: Web Audio API
- Visualization: Three.js or PixiJS
- Spotify API: Official SDK
- High-bitrate codec: AAC-LC (256kbps) or FLAC
Timeline
| Week | Focus |
|---|---|
| 30 | DJ mode layout, visualizer setup |
| 31 | Audio visualization, beat detection |
| 32 | Spotify integration, queue management |
| 33 | Song requests, testing, deployment |
Completion: Week 33 (by August 15, 2025)
Next: Phase 8 - Enterprise & Education