Vu meter and a lot of documentation updates#77
Merged
Digital-Larry merged 35 commits intomasterfrom Apr 12, 2026
Merged
Conversation
…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>
…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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Maybe some other things.