pub struct Chunker {
pub samples_since_last_stride: usize,
pub total_samples_seen: u64,
pub last_speech_at_sample: Option<u64>,
/* private fields */
}Fields§
§samples_since_last_stride: usize§total_samples_seen: u64§last_speech_at_sample: Option<u64>Implementations§
Source§impl Chunker
impl Chunker
pub fn new(cfg: WindowConfig, vad: SileroVad) -> Self
Sourcepub fn push(&mut self, samples: &[f32]) -> Option<StreamWindow>
pub fn push(&mut self, samples: &[f32]) -> Option<StreamWindow>
Push new microphone samples; returns Some(window) when a stride boundary fires
or the buffer hits the max_window_secs cap.
The buffer GROWS — it doesn’t slide. Consumers must call [trim_oldest] or
[reset_utterance] after a cap-hit window so the next push has room.
On cap-hit, the call returns early with the cap-hit window; any remaining input
samples are deferred internally and prepended to the next push call. This avoids
the failure mode where multiple cap-hits fire within one batch and only the last
(forced_eou) window reaches the consumer.
Sourcepub fn reset_utterance(&mut self)
pub fn reset_utterance(&mut self)
Drop the current utterance buffer so the next stride starts fresh. Call after
committer.finalize_utterance() (either natural EOU or forced_eou). Wall-clock
counters and the last-speech timestamp persist so trailing-silence math stays valid
across utterance boundaries.
Sourcepub fn trim_oldest(&mut self, samples: usize) -> usize
pub fn trim_oldest(&mut self, samples: usize) -> usize
Drop the oldest samples from the front of the buffer at a committed-token
boundary, keeping the utterance going. Rounded down to a VAD_FRAME_SIZE multiple
so vad_decisions stays in lock-step with buf. Advances utterance_start_sample
to preserve wall-clock anchoring; current_secs = window_start_secs + real_samples/SR
is invariant (the increase in window_start exactly cancels the decrease in real_samples).
Returns the number of samples actually trimmed (0 if the requested amount is less
than one VAD frame or would empty the buffer). Returning 0 leaves cap_pending_handler
set so the next cap escalates to forced-EOU.
Auto Trait Implementations§
impl !RefUnwindSafe for Chunker
impl !UnwindSafe for Chunker
impl Freeze for Chunker
impl Send for Chunker
impl Sync for Chunker
impl Unpin for Chunker
impl UnsafeUnpin for Chunker
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<S, T> Duplex<S> for Twhere
T: FromSample<S> + ToSample<S>,
Source§impl<S> FromSample<S> for S
impl<S> FromSample<S> for S
fn from_sample_(s: S) -> S
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more