feat(trunk): G711Codec — µ-law encode/decode + 8kHz↔24kHz linear-interpolated resampling (slice-5 T1)

In-core ~30-line table-driven codec (no dep). The ITU-T G.711 µ-law
companding formula is a piece of telephony history worth teaching (AGENTS.md
learner-facing comment mandate). 3× linear upsample on decode; 3× decimation
downsample on encode. The resampler artifacts are below the barge-in trigger
threshold (LocalVadReflex only needs RMS energy); rubato lands in a post-
spearhead refinement if a downstream consumer needs better (spec §6.6).

Task T1 of slice-5 — T3 (TwilioMediaStreamsServer) consumes this codec.

Signed-off-by: Aaron D. Lee <himself@adlee.work>
This commit is contained in:
2026-07-05 03:27:00 -04:00
parent f8a8a2c21f
commit 8fe7ce7ee5
6 changed files with 564 additions and 3 deletions

17
Cargo.lock generated
View File

@@ -143,6 +143,7 @@ dependencies = [
"async-trait",
"axum-core",
"axum-macros",
"base64",
"bytes",
"futures-util",
"http",
@@ -161,8 +162,10 @@ dependencies = [
"serde_json",
"serde_path_to_error",
"serde_urlencoded",
"sha1",
"sync_wrapper",
"tokio",
"tokio-tungstenite",
"tower",
"tower-layer",
"tower-service",
@@ -1280,6 +1283,20 @@ dependencies = [
[[package]]
name = "rutster-trunk"
version = "0.0.0"
dependencies = [
"axum",
"base64",
"rutster-call-model",
"rutster-media",
"rutster-tap",
"serde",
"serde_json",
"thiserror 1.0.69",
"tokio",
"tower",
"tracing",
"url",
]
[[package]]
name = "ryu"