From 57da9a6ce8816645c4bdfa96d32e9e6ef2fad460 Mon Sep 17 00:00:00 2001 From: Jared Vititoe Date: Fri, 3 Jul 2026 22:44:09 -0400 Subject: [PATCH] feat(soundboard): clip duration, playing indicator, volume layout, name wrap Editor (SoundboardPackEditor): show each clip's length in seconds (stored on upload via getAudioDurationMs, and captured on preview for existing clips); the preview button now toggles play/stop with a 'now playing' equalizer indicator; reworked the volume control into a fixed cell with a % readout so the slider's max no longer collides with the delete button. Call soundboard: clip names wrap (up to 3 lines, word-break) instead of being truncated with an ellipsis; cards grow to fit. TODO: logged the basic audio-editor / video->audio-extractor as a large project. Co-Authored-By: Claude Opus 4.8 --- LOTUS_TODO.md | 4 + .../SoundboardPackEditor.tsx | 138 ++++++++++++++++-- src/app/features/call/CallSoundboard.tsx | 17 ++- src/app/utils/soundboardClips.ts | 17 +++ 4 files changed, 164 insertions(+), 12 deletions(-) diff --git a/LOTUS_TODO.md b/LOTUS_TODO.md index 7e929e65b..7c01eaecc 100644 --- a/LOTUS_TODO.md +++ b/LOTUS_TODO.md @@ -148,6 +148,10 @@ After Phases A–C the client spec is ~complete. What's left, flagged by **what ## πŸ“‹ Open Feature Backlog +### [ ] Basic in-app audio editor / videoβ†’audio extractor (LARGE PROJECT) + +A minimal audio editor for soundboard clips and voice content. Scope: (1) **trim/clip** an audio file to a chosen start/end (waveform scrubber, in/out handles); (2) **upload a video file β†’ strip and discard the video track, keep only the audio** (extract audio, then the source video is dropped β€” never uploaded/stored); (3) minimal edits only (trim, maybe gain/normalize, fade in/out) β€” not a full DAW. Likely Web Audio API (`AudioContext.decodeAudioData` β†’ trim `AudioBuffer` β†’ re-encode) + `MediaRecorder`/an encoder for output; video demux via a `