Skip to content

Vu meter and a lot of documentation updates#77

Merged
Digital-Larry merged 35 commits intomasterfrom
vu-meter
Apr 12, 2026
Merged

Vu meter and a lot of documentation updates#77
Digital-Larry merged 35 commits intomasterfrom
vu-meter

Conversation

@Digital-Larry
Copy link
Copy Markdown
Contributor

Maybe some other things.

Digital-Larry and others added 30 commits April 1, 2026 23:10
…modes

New VUMeterCADBlock (virtual/probe block) and VUMeterDisplay with VU (300ms RMS),
Peak (fast attack/slow decay), and Linear modes. Supports docking into the ASM
panel (30% height) or floating as a JDialog on top of SpinCAD only. Persists
window position, meter mode, and dock state via Preferences. Special menu blocks
(FBInput, FBOutput, ScopeProbe, VUMeter) now use consistent orange border color.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…atch

- Add Oscillators menu (LFOs/oscillators moved from Control)
- Add Pots menu (pots moved from Control)
- Alphabetize items within all menus
- Fix duplicate field declarations in Vee.spincad
- Add Pot 0/1/2 blocks to new patch default layout
- Add control block tests and docs

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Convert ControlBlockSweepTest rendering from SVG/PrintWriter to
  PNG/BufferedImage+Graphics2D
- Regenerate all 25 control block plot images as PNGs
- Update control-blocks.md image references from .svg to .png
- Rewrite docs/README.md with index to .md docs and categorized
  legacy PDF forum archive

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Adds .md reference docs and PNG plots for every block menu category:
wave shapers, dynamics, filters, delays, reverbs, modulation, pitch,
oscillators, and instructions. Includes PlotUtils shared test utility,
9 doc test classes, and updated README index.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
LPF4PCADBlock and HPF2PCADBlock were hardcoding coefficient 0.25 when
no Frequency control pin was connected. Now compute coefficient from
the control panel f0 setting using 2*sin(pi*f0/Fs).

FilterDocTest improvements:
- Chirp extends to Nyquist, display truncated at 12 kHz (no noise)
- HPF 1-Pole display range narrowed to 20-1000 Hz to show rolloff
- SVF 2-Pole: separate bandpass and highpass plots, Q variation plot
- SVF 2-Pole Adjustable: same treatment, reduced Q for cleaner curves
- 0 dB and +/-6 dB reference lines on SVF plots
- 6s sim duration for better settling
- All 19 filter plots now generate successfully

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Delay plots now use 10ms tone burst instead of impulse, with taps
evenly distributed. Instruction plots reworked: ABSA/HalfWave show
sine wave effect, EXP shows three C/D curves over useful range, LOG
uses log-scaled axis, Root shows FV-1 vs mathematical reference with
zero-behavior note, MAXX shows sine vs threshold.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…w C/D effects

MAXX: output follows max(input, threshold) without absolute value,
no spurious peaks on negative half-cycles. Root: show both sqrt and
cbrt as distinct FV-1-simulated curves. LOG: four curves demonstrating
C (slope) and D (offset) effects including negative C. EXP: four curves
including C=1 D=-1 full-range mapping and C=1 D=0 clipping example.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
… decimation

- Allpass 300ms, Ambience 200ms, Freeverb 500ms, Hall 500ms
- Chirp: 20ms waveform with 5 AP coefficients overlaid, plus
  per-coefficient dB spectrograms showing frequency dispersion
- Hall: higher krt range (0.5/0.8/0.95) + raw waveform diagnostic
- All reverbs: peak-within-window decimation instead of point-sample,
  revealing low-level tail content previously hidden

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Input block: clarify it's not required (oscillator-only patches valid)
- Output DC offset: note it's for early FV-1 revisions, probably unneeded
- Gain Boost: 1 dB slider increments (1-48 dB), optimized codegen uses
  SOF -2.0 for 6 dB chunks with single SOF for remainder

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…vel, Parker Spring reverb, dynamics/ToverX doc improvements

- New CrossfadeAdjCADBlock with adjustable midpoint gain (0.25-0.90),
  linear path at midpoint=0.5 (fewer instructions), piecewise otherwise
- Waveshaper plots: add -24 dB test signal to all distortion blocks
- Aliaser: 4 new spectrum plots (Smooth/Raw at Rip=500 and Rip=900)
- Parker Spring reverb block, control panel, and diagram test
- ToverX transfer function test and plots
- Dynamics doc test improvements and threshold sweep plots
- ReadRegister instruction fix

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…ms, SVF Q limit

Filter plots: logarithmic x-axis (10-5000 Hz), 0 dB reference lines, 3/6 dB grid,
fix shelving filters with real dB values, low-amplitude chirp for SVF Q plots.
Reverb: split allpass/dattorro/chirp into individual charts per setting.
Waveshaper: stacked input/output for aliaser, 3-bit vs 8-bit quantizer overlay,
cube gain transfer curve, octave fuzz with HPF.
Modulation: ring modulator stacked waveform + spectrum plots.
Oscillator: ~4 Hz LFO rates, 500 ms display, new oscillator freq response.
SVF 2-pole: cap Q maximum at 10 to avoid FV-1 saturation.
PlotUtils: green second color, 2x2 legend layout.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…doc plots

Replace phase-blind Welch PSD ratio with H1 cross-spectral estimator
(H(f) = Σ[Y·X*] / Σ[|X|²]) in FilterDocTest to eliminate low-frequency
passband droop artifact on 2nd-order filters. Add 6-band EQ per-band
dotted overlays, oscillator doc updates, and regenerate all plot images.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…r doc plots

Add visual indicator showing both crossfade gain curves (Input 1 cyan,
Input 2 yellow) that updates in real time with midpoint and gain changes.
Update SVF filter documentation plots.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Allow midpoint up to 1.0 for maximum-overlap crossfade. Add Crossfade Adj
section to io-mix-blocks docs with charts for midpoint 0.25, 0.50 (linear),
0.707 (equal-power), and 1.00 (max overlap) explaining how each relates to
the fixed Crossfade, Crossfade 2, and Crossfade 3 blocks.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…e at unity

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…colors match composites

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- HPF 2P/4P and LPF 2P/4P: display Q directly (1-20), use sof
  interpolation for control input (pot=0 -> Q=1, pot=1 -> panel Q)
  instead of raw mulx scaling which gave zero damping at pot=0
- LPF 4-pole: fix double-damping bug in second stage (extra
  readRegister before the if/else added damping twice)
- EQ blocks (1-Band, 6-Band): widen Q range from 1-4 to 0.5-10
- All filter labels standardized to "Q" (was mix of "Resonance",
  "Max/Min Resonance", "Damping")
- Resonator: label clarified to "Damping (1/Q)"
- Include Bassman EQ parallel-section rewrite

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Fix all coefficient formulas (b2, a2, a3 were wrong), implement
parallel 1st-order sections via partial fraction expansion to keep
FV-1 coefficients within RDAX [-2,+2) range. Add CV control inputs
for mid (priority), bass, and treble. Add to Filters menu and
generate 3 doc plots (bass/mid/treble sweeps).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The paper specifies a logarithmic potentiometer for the bass control.
Maps slider position through (50^x - 1)/49 so mid-rotation produces
audibly distinct response from full rotation. Regenerated doc plots.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Translate coefficient parameters to Hz and Q in filter-blocks.md
- Replace Low/Mid/High plot labels with approximate Hz values
- Fix LPF 2/4-Pole input gain from 0.5 to 1.0 (was -6 dB vs HPF at 0 dB)
- Raise Q-variation chart Y-axis max from 20 to 24 dB
- Reorder doc sections and Bassman menu item alphabetically

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- LPF/HPF 2/4-Pole plots: yMax to 18 dB, show Q=10 in title
- 1-Band EQ: show frequency range 20-3200 Hz, add EQ Level vs gain
  chart at 1 kHz (also applies to 6-Band EQ)
- Add sample rate scaling note at top (32768 Hz base, how to scale
  for 44.1 kHz and 48 kHz)
- Add link to Yeh & Smith DAFx-06 paper in Bassman section
- Add DC gain warning and HPF recommendation for Comb Filter

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…arnings

- Chorus: show LFO Rate in Hz (AN-0001 formula), delay time ranges for
  flanging vs chorus, stacked input/output plot with 10-cycle window
- 4-Voice Chorus: add LFO phase/pitch shift diagram showing how pitch
  shift relates to LFO slope at each voice's phase offset
- All control inputs: "overrides" → "scales" (confirmed from code)
- Flanger: describe relationship to chorus, explain through-zero flanging
  via fixed center tap, feedback path effects
- Phaser: 3-panel stacked plot (input, mix, wet), mix overload warning
  (2× input when in phase)
- Servo Flanger: comb filter frequency response at 10ms tap, overload
  warning, delay vs tap ratio table, 100ms settling time note
- Top-level signal level warning for all modulation blocks

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Phaser internal LFO: add SOF 0.98,0.01 to protect LOG from zero
(eliminates click at sweep endpoint), combine two SOFs into one
SOF 1.999,-1.0, and narrow coefficient range to [0.81, 0.94] for
a more even ~1.7 octave sweep. Same instruction count as before.

FineControlSlider: clamp initial value to [min, max] so that
deserialized parameters outside the slider range don't throw
IllegalArgumentException and silently kill the control panel dialog.

Add phaser-modulation-test.spcdj patch with sine and ramp/triangle
LFO chains using LOG/EXP shaping blocks for experimentation.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The LPF4P block reads input at 1.0 gain, so the passband gain is
~0dB. The test was asserting -6dB from when the input was read at
0.5 gain.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Chorus: synthetic waveform with visible detuning (simulator WLDS
  Ka=64 too shallow for cycle mismatch, analytical model used instead)
- Flanger: stacked input/output replacing overlaid format
- Servo Flanger: stacked input/output replacing overlaid format

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…erb, and pitch blocks

DBLEVEL sliders now use multiplier=10 for 0.1 dB steps instead of 1 dB.
Hand-written blocks (GainBoost, DrumDelay, LongDelay, ReverbDesigner,
CrossfadeAdj, Ambience, MinReverb, PitchShiftFixed) updated with
matching slider ranges and control panel changes. Added input gain
controls to Ambience, MinReverb, ReverseDelay, and Stutter blocks.
Fixed missing updateCentsLabel() in PitchShiftFixedControlPanel.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Digital-Larry and others added 5 commits April 6, 2026 12:17
…tests

The @semitonesToRmpRate generator used a wrong scale factor (-32 vs 16384)
for negative semitones, producing rates 256x too slow. Replaced with a
unified formula: 16384*(2^(N/12)-1)/32768 that works for both directions.
Changed PitchShiftFixed default buffer from 512 to 4096 to match Adjustable
blocks — shorter buffers cause crossfade artifacts that degrade pitch accuracy.
Expanded PitchShiftFrequencyTest to parameterized tests at -12, -7, +7, +12,
+19 semitones across all three pitch shift blocks.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
… guide

Convert all pitch block documentation plots from overlaid to stacked
input/output format. Show octave up and octave down for pitch shift blocks.
Add delay buffer size section explaining tradeoffs of 512-4096 sample
buffers and demonstrating artifacts when buffer is too small for low
frequencies. Fix Pitch Offset blocks that previously skipped by wiring
control inputs.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Show worst case (440 Hz, odd half-cycles in buffer half) vs best case
(448 Hz, even half-cycles) to explain why some frequencies get tremolo-
like amplitude modulation while others crossfade cleanly. The 8 Hz
difference is < 1/4 semitone but produces dramatically different
envelope stability. Explains the "watery" quality of pitch-shifted
complex signals where harmonics span both cases.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…tation

Measures group delay at the first maximum via cross-spectral method for
nstages=50 at stretch=5/10/20 with AP=+/-0.65. Generates impulse
spectrograms (0.5 ms resolution) and 100 ms tone burst responses with
5-cycle fade-in/out. Updates reverb-blocks.md with corrected parameter
ranges, group delay formula, measurement table, and all 12 plots.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…ne/square closeups

Rename "Chirp Reverb" to "Chirp", add spring reverb emulation remark,
increase spectrogram time resolution to 0.25 ms, and add 10-cycle
sine/square waveform closeups at resonance frequencies for AP=+/-0.65.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@Digital-Larry Digital-Larry merged commit 2a12c85 into master Apr 12, 2026
3 checks passed
@Digital-Larry Digital-Larry deleted the vu-meter branch April 14, 2026 13:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant