Skip to main content

SilkDecoder

Struct SilkDecoder 

Source
pub struct SilkDecoder {
    pub bandwidth: SilkBandwidth,
    pub frame_size: usize,
    pub prev_samples: Vec<i16>,
}
Expand description

SILK frame decoder scaffold.

This type parses the SILK frame header and exposes helpers for LPC synthesis. Full entropy-coded SILK decoding is extremely complex and is provided by the Opus implementation in crate::opus::silk. This struct is intentionally lightweight and suitable for testing and scaffolding.

Fields§

§bandwidth: SilkBandwidth

Operating bandwidth.

§frame_size: usize

Expected frame size in samples.

§prev_samples: Vec<i16>

Previous output samples kept for LPC synthesis state (history).

Implementations§

Source§

impl SilkDecoder

Source

pub fn new(bandwidth: SilkBandwidth) -> Self

Creates a new SilkDecoder for the given bandwidth.

Source

pub fn decode_frame(&mut self, data: &[u8]) -> Result<SilkFrame, String>

Parses the frame header and returns a SilkFrame with zeroed samples.

Full SILK decoding (excitation decoding, LTP, noise shaping …) is not implemented here; the goal of this method is to validate the header and set up the frame scaffold so that higher-level code can fill in the decoded samples.

Source

pub fn apply_lpc_synthesis( &mut self, excitation: &[i16], lpc: &SilkLpcCoeffs, ) -> Vec<i16>

Applies the LPC synthesis filter to an excitation signal.

The synthesis filter is:

s[n] = excitation[n] + sum_{k=0}^{order-1} (lpc.coeffs[k] * s[n-k-1]) / 4096

where the division by 4096 converts Q12 fixed-point coefficients back to the integer domain.

The decoder’s prev_samples buffer is used as the initial state and is updated to the last order samples of the output on return.

Trait Implementations§

Source§

impl Debug for SilkDecoder

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.