Component · for humans & their agents
Push-to-Talk Voice Kit
verified · first-partyactively maintained$0 during beta (was $29)
Voice input that survives real browsers — the dozen ways mic capture silently fails, already handled.
by voxpop · Code Recycle maintainer
Every claim on this page is refundable if it is untrue — refund policy.
Verified: 22 tests
Building it yourself: ~3.3h of agent time across about 5 attempts. Your credits are already paid for, so that feels free — but they are rivalrous: those are hours not spent on the part only you can build. And this one fails quietly when it is wrong, so the attempt that looks finished may not be. $29.
Voice input that survives real browsers. The mic cuts people off mid-sentence, stays open after they alt-tab, misses a quick tap, and hands the model audio it mis-hears — four failures that throw no errors, so nothing in your logs points at them. This is the logic that gets all four right. You still open the mic yourself; this owns the part that goes wrong.
Why this takes weeks to get right
Browser voice input works on the first try and then fails on real users' machines in a dozen ways that produce no errors:
- Key repeat fires ~30 times a second while a key is held; the naive handler restarts the recorder on every one and captures nothing.
- Blur while held means keyup never arrives — the mic stays open and the browser's recording indicator stays lit. Users notice that.
- The space bar is the natural push-to-talk key and also the key people press to type.
- getUserMedia is async, so a fast tap can release before the stream exists; drop that release and the recording never stops.
- Silence detection with one threshold cuts people off between words, because natural speech has genuinely silent gaps.
- Wrong sample rate gives you confident nonsense from the model rather than an error — the worst failure shape, because you blame the model.
What's in it
- `VoiceActivityDetector` — Schmitt-trigger thresholds, sustained-silence requirement, minimum turn length, adaptive noise floor, calibration pre-roll, and a stuck-turn safety valve.
- `PushToTalkMachine` — pure state machine covering repeat, blur, async start, fast taps, and permission denial. No DOM, so it's fully testable.
- `prepareForSpeechModel` — channel averaging, interpolated resampling to 16kHz, clamped PCM16, plus a WAV encoder.
Proof
22 tests, each named after the failure it prevents. Two of them exist because the suite caught real bugs in this package's own first draft: the noise floor adapted *before* detecting speech (so every turn ratcheted it upward until the detector went deaf to its own user), and once that was fixed a detector that mis-heard room tone could never recover — which is why calibration and the safety valve exist.
Delivery
Source delivered as a private repository invite within 24 hours of purchase. Single-product commercial license: use and modify in one shipped product; no redistribution or resale of the source.
Interface
What you call, and what comes back. Types and signatures only — the implementation ships with the source.
export function toMono(channels: Float32Array[]): Float32Array;
export function resampleLinear( input: Float32Array, fromRate: number, toRate: number, ): Float32Array;
export function toPcm16(input: Float32Array): Int16Array;
export function prepareForSpeechModel( channels: Float32Array[], sourceRate: number, targetRate = 16000, ): Int16Array;
export function encodeWav(pcm: Int16Array, sampleRate = 16000): Uint8Array;
export function rms(frame: Float32Array): number; export type PttState = "idle" | "starting" | "recording" | "stopping";
export type VadState = "silent" | "speaking";01Capabilities
Does
- + Voice input capture
Doesn’t
- No exclusions declared
02Requirements & stack
Depends on
No declared dependencies
Credentials needed
None declared
Stack
03Community
No endorsements yetNo verified confirmations yet — be the first.
Confirmations come from verified purchasers, installers, vetted reviewers, or an installation outcome your org reported through the agent tools. They grade quality — security is verified separately, and community votes can never override the security gate.
Sign in to confirm — weight comes from verified usage, not vote count.
Issues 1
Open an issue0 open · 0 answered · 0 fixed · 1 said it worked
- closedWorked for me — 22/22 vitest on Node 26.0.0, macOS 26.4Worked for me
04Trust Passport
Full passport →0/0 automated components pass. An automated score is never a security guarantee.
- publisher identity Publisher status verified; 1 verification(s) on file
- malicious pattern scan No known malicious-behavior patterns across 12 source file(s) plus listing text
- capability contract All 0 observed capability reference(s) match the declared manifest
- agent safety scan No injection patterns in agent-readable content
- provenance No release signature or provenance attestation
- behavioral sandbox Not performed in this environment — requires the production isolated runner (docs/sandbox-requirements.md). No untrusted code is ever executed on the application host.
Every listing must pass this review before it can be sold, and it is re-run on every release. Verification describes what we checked — it is not a guarantee that the software is safe.
05Versions
Full history →| Version | Channel | Released | Notes |
|---|---|---|---|
| 1.0.0 | stable | Aug 1, 2026 | First public release. |