From 7c88a1ad732575513e2a11b757543643b2df2c19 Mon Sep 17 00:00:00 2001 From: Jer Miller Date: Wed, 18 Mar 2026 10:28:46 -0600 Subject: [PATCH] Add .wav to transcribe supported_formats --- docs/JOURNAL.md | 8 ++++---- docs/OBSERVE.md | 2 +- observe/transcribe/main.py | 2 +- observe/utils.py | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/JOURNAL.md b/docs/JOURNAL.md index a1295bcd4..add1e47b1 100644 --- a/docs/JOURNAL.md +++ b/docs/JOURNAL.md @@ -25,7 +25,7 @@ solstone transforms raw recordings into actionable understanding through a three ┌─────────────────────────────────────┐ │ LAYER 1: CAPTURES │ Raw recordings │ (Binary media files) │ "What was recorded" -│ - *.flac, *.ogg, *.opus (audio) │ +│ - *.flac, *.ogg, *.opus, *.wav (audio) │ │ - *.webm (video) │ └─────────────────────────────────────┘ ``` @@ -36,7 +36,7 @@ solstone transforms raw recordings into actionable understanding through a three | Term | Definition | Examples | |------|------------|----------| -| **Capture** | Raw audio/video recording | `*.flac`, `*.ogg`, `*.opus`, `*.webm` | +| **Capture** | Raw audio/video recording | `*.flac`, `*.ogg`, `*.opus`, `*.wav`, `*.webm` | | **Extract** | Structured data from captures | `*.jsonl` | | **Agent Output** | AI-generated narrative summary | `agents/*.md`, `HHMMSS_LEN/*.md` | @@ -180,7 +180,7 @@ Fields: - `raw_media_days` (integer or null) – Number of days to retain raw media when mode is `"days"`. Required when `raw_media` is `"days"`, ignored otherwise. - `per_stream` (object) – Per-stream overrides keyed by stream name. Each entry supports `raw_media` and `raw_media_days`. Omitted fields inherit from the global retention settings. -"Raw media" means layer 1 capture files only: audio files (`.flac`, `.opus`, `.ogg`, `.m4a`), video files (`.webm`, `.mov`), and screen diffs (`monitor_*_diff.png`). +"Raw media" means layer 1 capture files only: audio files (`.flac`, `.opus`, `.ogg`, `.m4a`, `.wav`), video files (`.webm`, `.mov`), and screen diffs (`monitor_*_diff.png`). All layer 2 and layer 3 content is always preserved regardless of retention policy: transcripts (`audio.jsonl`, `screen.jsonl`), agent outputs (`agents/*.md`), speaker labels (`agents/speaker_labels.json`), facet events (`events/*.jsonl`), entity data, segment metadata (`stream.json`), and search index entries. @@ -926,7 +926,7 @@ Audio files are initially written to the day root with the segment key prefix (L After transcription, audio files are moved into their segment folder: -- `HHMMSS_LEN/*.flac`, `*.m4a`, `*.ogg`, or `*.opus` – audio files moved here after processing, preserving descriptive suffix (e.g., `audio.flac`, `audio.m4a`, `imported_audio.opus`) +- `HHMMSS_LEN/*.flac`, `*.m4a`, `*.ogg`, `*.opus`, or `*.wav` – audio files moved here after processing, preserving descriptive suffix (e.g., `audio.flac`, `audio.m4a`, `imported_audio.opus`) Note: The descriptive portion after the segment key (e.g., `_audio`, `_recording`) is preserved when files are moved into segment directories. Processing tools match files by extension only, ignoring the descriptive suffix. diff --git a/docs/OBSERVE.md b/docs/OBSERVE.md index 396724ef0..d00de1f6c 100644 --- a/docs/OBSERVE.md +++ b/docs/OBSERVE.md @@ -18,7 +18,7 @@ Multimodal capture and AI-powered analysis of desktop activity. ``` sol observer (platform-detected capture) ↓ - Raw media files (*.flac, *.ogg, *.opus, *.webm, tmux_*.jsonl) + Raw media files (*.flac, *.ogg, *.opus, *.wav, *.webm, tmux_*.jsonl) ↓ sol sense (coordination) ├── sol transcribe → audio.jsonl diff --git a/observe/transcribe/main.py b/observe/transcribe/main.py index 9245916d8..20507225b 100644 --- a/observe/transcribe/main.py +++ b/observe/transcribe/main.py @@ -654,7 +654,7 @@ def main(): parser.error(f"Audio file not found: {audio_path}") # Validate supported formats - supported_formats = {".flac", ".m4a", ".mp3", ".ogg", ".opus"} + supported_formats = {".flac", ".m4a", ".mp3", ".ogg", ".opus", ".wav"} if audio_path.suffix.lower() not in supported_formats: parser.error( f"Unsupported audio format: {audio_path.suffix}. " diff --git a/observe/utils.py b/observe/utils.py index eca3cd12b..1020b0b3c 100644 --- a/observe/utils.py +++ b/observe/utils.py @@ -52,12 +52,12 @@ def load_audio(raw_path: Path, sample_rate: int = SAMPLE_RATE) -> np.ndarray: For M4A files from sck-cli (which contain two mono streams: track 0 = system audio, track 1 = microphone), all streams are decoded and mixed - together. Other formats (.flac, .mp3, .ogg, .opus) are decoded via ffmpeg. + together. Other formats (.flac, .mp3, .ogg, .opus, .wav) are decoded via ffmpeg. Parameters ---------- raw_path : Path - Path to audio file (.flac, .ogg, .opus, or .m4a) + Path to audio file (.flac, .ogg, .opus, .wav, or .m4a) sample_rate : int Target sample rate (default: 16000) -- 2.54.0