FftFrame class

One FFT frame — a frequency-domain snapshot of the audio currently playing through the player's output.

Emitted on PlayerStream.fft at the rate configured in SpectrumSettings.emitInterval (default ~30 Hz). Each frame carries both the raw FFT bins (linear frequency axis, post-window magnitude, normalised to [0, 1]) and the perceptual bands (log-spaced bucketing of the bins with asymmetric EMA smoothing — the visualizer staple). Most callers only need bands; bins is exposed for custom remappings (mel, Bark, constant-Q).

The frame is immutable and thread-safe to pass between isolates — the underlying Float32Lists are not aliased into the audio thread's ring buffer; they were copied out before this object was constructed.

Example — paint a 64-bar spectrum analyzer:

player.stream.fft.listen((frame) {
  for (var i = 0; i < frame.bands.length; i++) {
    final h = frame.bands[i] * canvasHeight;
    // draw bar i with height h …
  }
});

Constructors

FftFrame({required Float32List bins, required Float32List bands, required Duration timestamp, required int sampleRate, required double bandLowHz, required double bandHighHz})
Creates a frame. Only used internally by the spectrum pipeline.
const

Properties

bandHighHz double
Upper edge of the band axis in Hz. Matches SpectrumSettings.bandHighHz.
final
bandLowHz double
Lower edge of the band axis in Hz. Matches SpectrumSettings.bandLowHz.
final
bands Float32List
Per-band magnitude on the configured perceptual axis (default: log-spaced 64 bands from bandLowHz to bandHighHz). Length is SpectrumSettings.bandCount.
final
bins Float32List
Magnitude per FFT bin, normalised to [0, 1] after the power → log → clip → normalise pipeline. Length is half of SpectrumSettings.fftSize (the real FFT only returns the positive-frequency half). Bin i covers i * sampleRate / fftSize Hz. No smoothing is applied here — it runs on bands only.
final
hashCode int
The hash code for this object.
no setterinherited
runtimeType Type
A representation of the runtime type of the object.
no setterinherited
sampleRate int
Sample rate of the audio that produced this frame, in Hz. Multiply bins indices by sampleRate / fftSize to map a bin to its centre frequency.
final
timestamp Duration
Playback position the samples backing this FFT correspond to — derived from mpv's tap timestamp (pts_ns on the pcm-tap-frame property). Useful for syncing visual effects against the audio playhead.
final

Methods

noSuchMethod(Invocation invocation) → dynamic
Invoked when a nonexistent method or property is accessed.
inherited
toString() String
A string representation of this object.
inherited

Operators

operator ==(Object other) bool
The equality operator.
inherited