SuiteRhythm

# SuiteRhythm ### Intelligent Audio Companion for Tabletop RPGs AI-powered ambient sound designer that listens to your game in real time and automatically plays contextually-appropriate music and sound effects.
[![Play Now](https://img.shields.io/badge/Play%20Now-SuiteRhythm-8a2be2?style=for-the-badge&logoColor=white)](https://suiterhythm.vercel.app)

The Problem

Tabletop RPG game masters spend hours curating playlists and manually triggering sound effects mid-session. It breaks immersion, splits focus, and most groups just skip audio entirely.

The Solution

SuiteRhythm listens to what’s happening at the table and automatically plays the right sounds at the right time — no manual input needed.

The GM stays in the story. The players stay immersed. The audio just works.

How It Works

SuiteRhythm uses speech recognition to capture live conversation, sends it through an AI analysis layer (GPT-4o-mini), and maps the output to a curated library of 450+ sound effects and ambient tracks — all in real time.

Voice Input → Speech Recognition → AI Context Analysis → Sound Matching → Playback

Key Capabilities

Feature Description
Auto-Detect Mode Listens to live speech and triggers sounds automatically via AI
Story Mode Pre-written narrative scenes with timed audio cues
Sound Library 450+ categorized sounds — ambient, combat, weather, creatures, music
Control Board Manual triggers for GMs who want direct control alongside auto-detect
Smart Layering Multiple sounds play simultaneously with intelligent volume balancing
Instant Response Sub-second latency from spoken word to audio playback

Market Opportunity

The tabletop RPG market has grown into a $2B+ industry (2025), fueled by actual-play content (Critical Role, Dimension 20) and the mainstreaming of D&D. Supporting tools — VTTs, digital maps, audio — are a fast-growing adjacent segment.

No product on the market offers real-time, voice-reactive audio.

Current alternatives require manual playlist management (Syrinscape, Tabletop Audio) or pre-configured triggers. SuiteRhythm is the first to close the loop between spoken narrative and dynamic audio — zero-touch.

Target Users

Tech Stack

Layer Technology
Frontend Next.js 15, React 19
Audio Engine Howler.js — custom engine with layering, fading, preloading
AI Analysis OpenAI GPT-4o-mini (server-side)
Speech Recognition Web Speech API (native browser)
Database Supabase (PostgreSQL)
Media Storage Cloudflare R2 (450+ audio files via CDN proxy)
Hosting Vercel (serverless, edge-optimized)

Architecture

┌──────────────────────────────────────────────────┐
│                   Browser Client                  │
│                                                    │
│  ┌──────────┐  ┌──────────┐  ┌────────────────┐  │
│  │  Speech   │→│    AI     │→│  Sound Engine   │  │
│  │  Input    │  │ Director  │  │  (Howler.js)   │  │
│  └──────────┘  └──────────┘  └────────────────┘  │
│                      ↕                             │
└──────────────────────┼─────────────────────────────┘
                       │ API
          ┌────────────┼────────────┐
          │            │            │
    ┌─────▼─────┐ ┌───▼────┐ ┌───▼────┐
    │  OpenAI   │ │Supabase│ │  R2    │
    │  GPT-4o   │ │  (DB)  │ │ (CDN)  │
    └───────────┘ └────────┘ └────────┘

Traction & Status

Business Model (Planned)

Tier Price Features
Free $0 Core auto-detect, limited sound library
Pro $10/mo Full library, story mode, custom sounds, priority AI
Table License $20/mo Multi-device sync, shared sessions, commercial use

Roadmap

External Controllers (window.SuiteRhythm)

SuiteRhythm exposes a small, stable command surface for external controllers — Stream Deck plugins, OBS browser sources, bookmarklets, webhooks, and anonymous Twitch chat. Every channel funnels into the same rate-limited handler, so your integration never depends on engine internals.

Command channels

// 1. Direct JS (same-page integrations / devtools)
await window.SuiteRhythm.trigger('thunder');                 // by name or id
await window.SuiteRhythm.trigger('rolling thunder', { volume: 0.8 });
await window.SuiteRhythm.stopAll();
await window.SuiteRhythm.scene('Combat');
window.SuiteRhythm.status();                                 // { mode, mood, listening, music, activeSounds, twitch }

// 2. CustomEvent (for modules that load before window.SuiteRhythm is attached)
window.dispatchEvent(new CustomEvent('suiterhythm:command', {
    detail: { type: 'trigger', query: 'thunder' }
}));

// 3. postMessage (OBS browser sources / iframes — origin-gated)
window.postMessage({ suiterhythm: 'trigger', query: 'thunder' }, '*');

All trigger calls resolve to { ok, name, soundId, url, source } so you can later stop a specific instance with the engine API.

Twitch chat bridge (no OAuth)

window.SuiteRhythm.twitch.connect('aaronc1992');
// Viewers can now type in chat:
//   !sfx thunder       → plays a thunder SFX
//   !stop              → stops all audio
//   !scene Combat      → applies the Combat scene preset
window.SuiteRhythm.twitch.disconnect();

SuiteRhythm joins as an anonymous justinfan* user over Twitch’s WebSocket IRC gateway — read-only, no tokens, no chat writes. Unknown bang-commands are ignored. Commands are rate-limited (500ms per type:query pair by default) so a chat flood can’t thrash the audio graph.

Rate limiting & origin allowlist

Get in Touch

Interested in SuiteRhythm? Reach out:


Built by **Aaron C.** — solo developer, game master, and audio nerd.