3.5 KiB
3.5 KiB
AG Beats - Requirements Specification
AG Beats is a web-based, collaborative drum machine and bass sequencer that allowing multiple users to compose music together in real-time.
1. Functional Requirements
1.1 Step Sequencer
- Instruments: Support for 5 drum tracks (Kick, Snare, Hi-Hat, Open Hat, Ride).
- Step Configuration:
- Adjustable sequence length from 4 to 64 steps (increments of 4).
- Default length: 16 steps.
- Grid Interaction:
- Toggle notes on/off for each instrument per step.
- Support for "drag-to-toggle" to quickly fill or clear steps in a row.
- Bass Line:
- 2-octave bass sequencer (C2 to B3).
- Selectable notes per step (supports polyphony).
- Visual distinction between natural and sharp notes.
1.2 Audio Engine
- Synthesis: Real-time sound generation using the Web Audio API.
- Integrated synthesizers for Kick, Snare, and Hi-Hats.
- Sine-wave based bass synthesizer.
- Sample Support: Capability to load and play audio samples for instruments.
- Playback Controls:
- Global Play/Stop functionality.
- Tempo (BPM) control range: 40 to 240 BPM (Default: 76 BPM).
- Real-time step highlighting during playback.
- Mixer:
- Individual "Mute" toggle for each drum track.
- Master volume control for the Drum section.
- Master volume control for the Bass section.
- Interactive Preview: Trigger individual drum sounds or bass notes by clicking their respective labels (outside of playback).
1.3 Real-time Collaboration
- Presence:
- Real-time visibility of other connected users' cursors with unique colors.
- Synchronization of connected user list.
- State Synchronization:
- Instant broadcasting of all grid changes (drums and bass).
- Synchronization of playback state (start/stop), tempo, steps, mutes, and volumes.
- Shared "Clear" and "Import" actions across the session.
- Stability: Support for "Synchronizing" state when a new user joins an existing session.
1.4 Session & Data Management
- Named Sessions: Support for multiple concurrent sessions identified by a
sessionIdURL parameter. - Session Sharing: One-click functionality to copy the current session URL to the clipboard.
- Persistence: Session state is maintained in-memory on the server for the duration of the session.
- Import/Export:
- Export current pattern as a
.jsonfile. - Import patterns from previously exported
.jsonfiles.
- Export current pattern as a
2. Technical Stack
- Frontend: React 19, TypeScript, Tailwind CSS (via CDN).
- Backend: Node.js with Express and WebSocket (
ws). - Communication: WebSockets for real-time state synchronization and cursor presence.
- Audio: Web Audio API for low-latency synthesis and playback.
3. User Interface & Experience
- Responsive Design: Mobile-friendly layout with horizontal scrolling for large sequences.
- Modern Aesthetics: Sleek, slate-based color palette with vibrant accents (Orange for drums, Purple for bass).
- Interactive Feedback:
- Hover effects on sequencer cells.
- Confirmation modals for destructive actions (e.g., Clear Pattern).
- Scroll-wheel support for tempo adjustment.
- Sticky labels for easy navigation in large grids.
4. Constraints & Limits
- Tempo Range: 40 - 240 BPM.
- Sequence Steps: 4 - 64 steps (must be multiple of 4).
- Instruments: Fixed set of 5 drum instruments.
- Storage: State is currently ephemeral (in-memory) and lost if the server restarts or the last user leaves the session.