Expand description
Shared visualization utilities for YM2149 oscilloscope and spectrum display.
This module provides register-based visualization that works across all frontends (Bevy, CLI TUI) and all formats (YM, AKS, AY, SNDH). Unlike FFT-based analysis, this approach synthesizes waveforms directly from register state, ensuring visualization works even when digidrums or STE-DAC bypass the PSG.
§Example
ⓘ
use ym2149_common::visualization::{WaveformSynthesizer, SpectrumAnalyzer};
use ym2149_common::ChannelStates;
let mut waveform = WaveformSynthesizer::new();
let mut spectrum = SpectrumAnalyzer::new();
// Update from register state each frame
let channel_states = ChannelStates::from_registers(®isters);
waveform.update(&channel_states);
spectrum.update(&channel_states);
// Get data for rendering
let samples = waveform.get_samples();
let bins = spectrum.get_bins();Structs§
- Spectrum
Analyzer - Register-based spectrum analyzer.
- Waveform
Synthesizer - Synthesizes oscilloscope waveforms from YM2149 register state.
Constants§
- BINS_
PER_ OCTAVE - Bins per octave (4 = minor-third resolution for compact display).
- MAX_
CHANNEL_ COUNT - Maximum number of channels (4 PSGs × 3 channels).
- MAX_
PSG_ COUNT - Maximum number of PSG chips supported.
- SAMPLES_
PER_ UPDATE - Number of samples to generate per frame update (~20ms at 50Hz).
- SPECTRUM_
BASE_ FREQ - Base frequency for spectrum bins: C1 = 32.703 Hz (MIDI note 24).
- SPECTRUM_
BINS - Number of spectrum bins (8 octaves × 4 bins per octave = 32 bins).
- SPECTRUM_
DECAY - Decay factor for spectrum bars (0.85 = fast release, responsive visualization).
- SPECTRUM_
OCTAVES - Number of octaves covered by spectrum display. 8 octaves covers C1 (~33 Hz) to B8 (~8 kHz), full YM2149 range.
- VISUAL_
SAMPLE_ RATE - Sample rate for waveform generation (visual only, not audio). Uses 44.1kHz as a good balance between visual smoothness and performance.
- WAVEFORM_
SIZE - Number of samples to keep for waveform display.
Functions§
- freq_
to_ bin - Map a frequency to a spectrum bin index (note-aligned, minor-third resolution).