Module visualization

Module visualization 

Source
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(&registers);
waveform.update(&channel_states);
spectrum.update(&channel_states);

// Get data for rendering
let samples = waveform.get_samples();
let bins = spectrum.get_bins();

Structs§

SpectrumAnalyzer
Register-based spectrum analyzer.
WaveformSynthesizer
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).