Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
51 commits
Select commit Hold shift + click to select a range
ad69327
chore(vendor): bump tinyagents submodule
senamakel Oct 16, 2026
d9e5b89
feat(codec): add audio probe, transcode, and waveform APIs
senamakel Oct 16, 2026
153b461
fix(codec): repair M4A muxer output and trim AAC padding
senamakel Oct 16, 2026
37914ef
feat(codec): add independent Opus decoding and harden M4A repair
senamakel Oct 16, 2026
3290080
feat(codec): add voice-note codec probe, transcode, and waveform APIs
senamakel Oct 16, 2026
ad1b5cd
feat(codec): add MP3 source decoding and declared input codec
senamakel Oct 16, 2026
0628e2c
test(codecs): cover multiframe opus and aac round trips
senamakel Oct 16, 2026
3af2db1
chore(vendor): align tinyagents with epic base
senamakel Oct 16, 2026
d525450
test(codecs): tidy rms helper and propagate errors in rejection test
senamakel Oct 16, 2026
5d2d6dd
chore(deps): update tinyvoice-module lockfile for storage and provide…
senamakel Oct 16, 2026
b3a3071
test(codec): cover rejection of empty, oversized, and malformed inputs
senamakel Oct 16, 2026
68bc5a6
test(codec): update opus head fields in empty stream test
senamakel Oct 16, 2026
8c0be05
test(codec): cover empty input rejection for opus and aac
senamakel Oct 16, 2026
48e218f
feat(tinyvoice): add long opus verification example
senamakel Oct 16, 2026
cdd228a
chore(tinyvoice): remove verify_long_opus example
senamakel Oct 16, 2026
277b2a6
test(codec): cover waveform bucket math at 32-bit sample limits
senamakel Oct 16, 2026
f8ea0f8
fix(codec): compute waveform bucket ranges with wide math
senamakel Oct 16, 2026
8b6c1c4
fix(service): bound concurrent codec work with a semaphore
senamakel Oct 16, 2026
af70b63
test(service): cover codec worker offload and capacity rejection
senamakel Oct 16, 2026
6c24d6d
test(codec): cover waveform bucket range at clip boundaries
senamakel Oct 16, 2026
23cb97f
chore: files changed crates/tinyvoice-module/src/service/mod_tests.rs
senamakel Oct 16, 2026
d4651e8
chore: files changed crates/tinyvoice/src/codec/codec_tests.rs
senamakel Oct 16, 2026
a51e178
test(codec): rewrite invalid wav header cases without hound writer
senamakel Oct 16, 2026
c61a701
test(codec): drop short aac assertion from symphonia test
senamakel Oct 16, 2026
9ee17a2
test(codec): assert symphonia rejects m4a aac
senamakel Oct 16, 2026
2e31d71
chore: add live module coverage report
senamakel Oct 16, 2026
1b2b67a
chore: ignore live module coverage output
senamakel Oct 16, 2026
036a1b7
chore: drop generated coverage report
senamakel Oct 16, 2026
de2b696
chore: files changed crates/tinyvoice-module/src/service/mod.rs,crate…
senamakel Oct 16, 2026
94e04b1
chore: files changed crates/tinyvoice-module/src/service/mod.rs
senamakel Oct 16, 2026
4df68c1
test(codec): cover SLConfig descriptor in repaired m4a
senamakel Oct 16, 2026
2a7c104
fix(codec): write SLConfig predefined value in place
senamakel Oct 16, 2026
03dd09d
test(codecs): cover five-minute aac round trip and length limit
senamakel Oct 16, 2026
7832cf7
fix(codec): allow bounded AAC frame padding in duration checks
senamakel Oct 16, 2026
478367d
test(codec): cover m4a sl config and five minute padding
senamakel Oct 16, 2026
720d7ca
test(codec): reformat sl config descriptor assertion
senamakel Oct 16, 2026
97f74f1
chore: files changed crates/tinyvoice/tests/codecs.rs
senamakel Oct 16, 2026
86e9e01
chore: files changed crates/tinyvoice/src/codec/mod.rs
senamakel Oct 16, 2026
51a7634
refactor(codec): rename duration limit constant and reformat track lo…
senamakel Oct 16, 2026
1f15788
chore: files changed crates/tinyvoice/src/codec/mod.rs
senamakel Oct 16, 2026
0ce2e73
test(codec): log parsed mp4 timing metadata in aac fixture test
senamakel Oct 16, 2026
5b658d5
refactor(codec): simplify m4a duration limit check
senamakel Oct 16, 2026
82c74c1
refactor(codec): extract m4a playable sample calculation
senamakel Oct 16, 2026
91a3622
fix(codec): sum all m4a edit list entries for duration
senamakel Oct 16, 2026
505d9df
chore(tinyvoice): remove trailing blank line from CC0 fixture
senamakel Oct 16, 2026
c2889da
fix(codec): use the selected symphonia track id for m4a duration
senamakel Oct 16, 2026
edb6fed
test(codec): assert m4a duration against media header timescale
senamakel Oct 16, 2026
7dffa12
test(codec): add context to m4a duration test failures
senamakel Oct 16, 2026
28d00da
test(codec): repair sl config descriptors in aac fixture
senamakel Oct 16, 2026
0758929
test(codec): assert selected m4a track differs from the other track
senamakel Oct 16, 2026
843686b
test(codec): use checked conversion for aac frame duration
senamakel Oct 16, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -26,3 +26,4 @@ worktrees/*
.idea/
.vscode/
*.swp
/live-module-coverage.json
230 changes: 230 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 4 additions & 1 deletion MODULE.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,15 @@ This package contains the native `tinyvoice` module for TinyBus module ABI v1.
Install only the archive matching the host operating system and architecture.

The module claims `ai.tinyhumans.tinyvoice.Voice`, serves the object at
`/ai/tinyhumans/tinyvoice/Voice`, and provides 53 methods under contract 1.10.
`/ai/tinyhumans/tinyvoice/Voice`, and provides 56 methods under contract 1.11.

## Methods

| Method | Arguments | Returns |
| --- | --- | --- |
| `CodecProbe` | `CodecInput { audio_base64 }` | `CodecInfo`: detected codec, duration, sample rate, channels |
| `CodecTranscode` | `CodecTranscodeRequest { audio_base64, from, target }` | `CodecOutput { audio_base64 }` |
| `CodecWaveform` | `WaveformRequest { audio_base64, buckets }` | `WaveformResult { peaks }` |
| `Route` | `transcript` | JSON `VoiceIntent`, tagged by an `intent` field |
| `ExtractCommand` | `transcript`, `wake_word` | The command after the wake word, or `""` |
| `WakeWordPresent` | `transcript`, `wake_word` | `bool` |
Expand Down
8 changes: 7 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# TinyVoice

Host-agnostic voice primitives, extracted from [OpenHuman](https://github.com/tinyhumansai/openhuman): WAV framing, silence gating, voice-activity segmentation, wake-word gating, fast-path command routing, STT hallucination detection, and relay-turn preparation.
Host-agnostic voice primitives, extracted from [OpenHuman](https://github.com/tinyhumansai/openhuman): WAV framing and voice-note codecs, silence gating, voice-activity segmentation, wake-word gating, fast-path command routing, STT hallucination detection, and relay-turn preparation.

Ships two things from one repository:

Expand All @@ -25,6 +25,7 @@ permission check.
| Here | With the host |
| --- | --- |
| WAV framing, RMS, resampling, downmix, silence gate; module-owned capture threads | Microphone permission decisions through the computer module |
| In-memory WAV/PCM16, Ogg/Opus, and M4A/AAC-LC probe, transcode, and waveform APIs | Codec calls through the `tinyvoice-bus` module contract |
| VAD segmentation | The capture loop that drives it |
| Wake-word gate, intent routing | What to *do* with an intent |
| Hallucination detection | The STT transport, credentials, and retry policy |
Expand Down Expand Up @@ -66,6 +67,11 @@ turn. It performs no inference or tool execution. A module host uses the
OpenHuman supplies its local agent, acknowledgment policy and delivery.
See the [relay contract](docs/specs/relay-turn-preparation.md).

The [`tinyvoice::codec` API](docs/specs/voice-codecs.md) detects, probes,
transcodes, and extracts waveform peaks from supported voice-note formats. It
uses pure-Rust codecs and in-memory containers; it does not require FFmpeg or
system codec libraries.

### Optional features

- `hotkey` (off by default): `tinyvoice::hotkey`, a system-wide push-to-talk /
Expand Down
Loading
Loading