Skip to main content

Spectrogram

Struct Spectrogram 

Source
pub struct Spectrogram { /* private fields */ }
Expand description

Spectra against time: each pushed spectrum (the magnitudes of its bins, lowest frequency first) becomes a row, the newest at the top, and older rows move down until capacity are kept.

  • Each column stands for a span of frequencies: the bins are spread across the width, evenly, or by their logarithm with scale(AxisScale::Log) so each octave takes the same width. A column covering several bins shows the loudest; one between bins (the low end of a log scale) shows the nearest. resolution says how many Hz apart the bins are and bounds which frequencies the width spans (default: every bin, from 0 Hz).
  • Levels are scaled from the smallest to the largest kept (or range) into the shades of a Heatmap: ░▒▓█ in blocks, .:-=+*#%@ in ASCII, and with colour the chart.heat.N styles, cold to hot. A NaN level is · (? in ASCII); an infinite one is drawn at the end it passes, so the decibels of silence (-inf) are the lowest shade. Feed it decibels (20 log10(magnitude)) to see quiet partials beside loud ones.
  • It fills the height it is given (a Layout region, an intuiTUIve node) unless height is set; given none, it is as tall as the rows it holds. Rows below the oldest are blank.
use rich::Console;
use rich_ext::chart::{Charset, Spectrogram};

let console = Console::builder().width(4).color_system(None).build();
let mut waterfall = Spectrogram::new(3).charset(Charset::Ascii).range(0.0, 9.0);
waterfall.push([9.0, 0.0, 0.0, 0.0]);
waterfall.push([0.0, 9.0, 0.0, 0.0]);
waterfall.push([0.0, 0.0, 9.0, 4.5]);
// The newest at the top.
assert_eq!(console.render_export(&waterfall), "  @+\n @  \n@   \n");
waterfall.push([0.0; 4]);
// Three kept: the oldest has gone.
assert_eq!(console.render_export(&waterfall), "    \n  @+\n @  \n");

Implementations§

Source§

impl Spectrogram

Source

pub fn new(capacity: usize) -> Self

An empty spectrogram keeping the newest capacity spectra (at least one).

Source

pub fn push(&mut self, bins: impl IntoIterator<Item = f64>)

Add a spectrum at the top: the levels of its bins, lowest frequency first. The oldest goes once there are capacity.

Source

pub fn row(self, bins: impl IntoIterator<Item = f64>) -> Self

push as a builder.

Source

pub fn clear(&mut self)

Forget every spectrum.

Source

pub fn len(&self) -> usize

How many spectra it holds.

Source

pub fn is_empty(&self) -> bool

Whether it holds none.

Source

pub fn rows(&self) -> impl Iterator<Item = &[f64]>

The spectra, newest first.

Source

pub fn range(self, min: f64, max: f64) -> Self

The levels shaded lowest and highest (default: the smallest and largest kept). Levels outside are drawn at the end they pass.

Source

pub fn resolution(self, hz: f64) -> Self

How many Hz apart the bins are (default 1): rate / n for a spectrum of n samples taken at rate. Bin i is at i × resolution Hz.

Source

pub fn bounds(self, low: f64, high: f64) -> Self

The frequencies the width spans, in Hz (default: every bin, from 0 Hz to the top of the last; from the first bin above 0 on a log scale). Bin i covers i × resolution up to the next bin.

Source

pub fn scale(self, scale: AxisScale) -> Self

How frequency runs across: evenly (the default) or by its logarithm.

Source

pub fn charset(self, charset: Charset) -> Self

Which glyphs to draw with (default Charset::Auto: blocks, or ASCII on an ASCII-only console).

Source

pub fn height(self, rows: usize) -> Self

Height in rows (at most 65535), whatever height it is given.

Source

pub fn level_scale(&self) -> Scale

The scale every level is shaded on.

Trait Implementations§

Source§

impl AccessibleText for Spectrogram

Spectrogram, 12 spectra of 513 bins, 0 to 24k Hz, levels from 0 to 3, then where the newest spectrum is loudest (Newest peaks at 440 Hz).

Source§

fn accessible_text(&self, _width: usize) -> String

The content as plain lines, laid out for width where layout matters.
Source§

impl Clone for Spectrogram

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Spectrogram

Source§

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

Formats the value using the given formatter. Read more
Source§

impl Draw for Spectrogram

Source§

fn draw( &self, console: &Console, options: &ConsoleOptions, screen: &mut Screen, rect: Rect, )

Draw into rect of screen, rendered with options (its width and height are the rectangle’s): the cells screen.write_lines(rect, &console.render_lines(self, options, false)) would give.
Source§

impl PartialEq for Spectrogram

Source§

fn eq(&self, other: &Self) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl Renderable for Spectrogram

Source§

fn rich_render( &self, console: &Console, options: &ConsoleOptions, ) -> Vec<Segment>

Source§

fn measure(&self, _console: &Console, options: &ConsoleOptions) -> Measurement

The (minimum, maximum) cell width this renderable wants. Port of __rich_measure__. The default is what upstream’s Measurement.get returns for a renderable without one: anything from nothing to the whole width, (0, max_width).
Source§

fn fit_to_measurement(&self) -> bool

Whether a top-level Console::print shrinks this renderable to its measured width. Upstream renders every top-level renderable at the full console width, so the default is false; an extension may opt in.
Source§

fn vertical(&self) -> Option<VerticalAlign>

The vertical alignment a Table cell holding this renderable uses in place of its column’s. Upstream reads getattr(renderable, "vertical", None); Align sets it.
Source§

fn print_end_line(&self, _options: &ConsoleOptions) -> bool

Whether a top-level print ends this renderable’s last line. This port’s renderables separate lines, where upstream’s end each line with "\n", so a print adds the final line break. A renderable whose upstream output stops without one (Screen, LiveRender, a Rule whose end has no newline) returns false, and the next output continues its last line. options are the print’s options.
Source§

impl StructuralPartialEq for Spectrogram

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

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

Source§

type Error = !

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

fn try_from(value: U) -> Result<T, !>

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

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more