New SpinCAD Designer release with major usability improvements

Digital Larry

Active member

This is a pretty big one, leveraging my new found super powers. I'm still not too proud to beg, especially since this is costing me more than just my time.

Feel free to donate using the "Sponsor" button on the main page or this link.

If you can't get to this or don't want to sign up to Github to help out, you can PM me and I'll send you my e-mail for Paypal. All completely voluntary and vastly appreciated, as a few of you have been quite generous in the past! :)

This is the link to get to the release =>>> https://github.com/HolyCityAudio/SpinCAD-Designer/releases/tag/0.99-1061

SpinCAD Designer Release Notes - Version 0.99 Build 1061​

Preferences Dialog​

A new Preferences dialog is now available from the File menu:
  • Auto-reload on startup: Automatically reloads the last saved or opened patch or bank when SpinCAD starts
  • Default blocks for new patches: Optionally adds Input and Output blocks when creating a new patch via File > New Patch or CTRL-N
  • Show Spin ASM: Displays the post-optimization Spin ASM program listing in real time on the right side of the main window

JSON File Format​

New JSON-based file formats replace binary serialization as the default save format:
  • Patch files: .spcdj format (replaces .spcd)
  • Bank files: .spbkj format (replaces .spbk)
  • Existing .spcd and .spbk files can still be opened

Control Panel Improvements​

  • All control panel sliders now have editable text fields showing precise parameter values
  • Ctrl+drag on sliders enables fine adjustment
  • Added LFO rate/width controls to Phaser panel with improved resonance display precision
  • Oscillator max frequency increased to 5000 Hz; Ring Mod to 1200 Hz
  • Replaced Smoother block with SmootherA; panel now shows rise time in milliseconds

Simulator Improvements​

  • Fixed scope display scaling and labels
  • Added trigger control and Lin/dB toggle button for the scope display

Additional Updates​

  • Clarified LFO type labels throughout (SIN LFO 0/1 vs RAMP LFO 0/1)
  • Fixed LFO usage detection in the toolbar resource display
  • Fixed sample rate dialog behavior
  • Fixed macOS simulator audio by resampling to 44100 Hz output
  • Input pin mute via right-click context menu (Experimental)

Known Issues​

  • Previously saved .spcd/.spbk files may encounter compatibility issues; resave in the new JSON format (.spcdj/.spbkj) for best results
  • Scope display may behave unexpectedly at very short time divisions
 
Last edited:
DL - So, do we just open the older .spcd/.spbk files in the new build and saving will generate the new format? Thanks!
 
Last edited:
Hi everyone, greatly appreciate the support, but my enthusiasm is getting the better of me. I've introduced some bugs and will be working on that this weekend. Use the new version to get an idea but I wouldn't do any mission critical or life saving work with it (cough, cough)... Stay tuned!

DL
 

All right here we are hot on the heels of that last one with a bunch of fixes and improvements. I've highlighted a couple of the more noticeable improvements. I've also added test automation which was sorely lacking. I have about 300 SPCD files, and load and simulate each one to make sure no funny business. Nevertheless I am still paranoid about this so let me know if anything bad or weird happens.

DL

---
Release Notes: SpinCAD Designer 0.99-1062

Changes since 0.99-1061

Bug Fixes


- Reverse Delay: Fixed crossfade envelopes to eliminate glitches; corrected ramp offset and merged into single blended output
- control_smoother: Fixed deserialization and pin name compatibility for legacy .spcd files; renamed from control_smootherA
- Pin name mismatches: Fixed 7 CADBlocks (BassmanEQ, PingPong, ThreeTap, New_Envelope, dist, PitchTest, PitchShiftFixed) with incorrect
pin names or missing defaults causing NullPointerExceptions
- Optimizer Case 5: Restricted to srcWrScale=1.0 only to prevent incorrect optimizations; fixed savings count

New Features

- Execute command on hex save: New preference to run a shell command after hex save (supports %s path substitution) - see preferences

-- this will let you automatically trigger a command to update your FV-1's EEPROM.
- Cycle detection: Prevents circular connections with depth-first search; suggests feedback loop instead
- Disable optimizer preference: Checkbox to skip optimization during code generation
- Application icon: Added 256x256 icon to the main window

UI Improvements

- Block border colors: Updated colors across 30+ blocks for better visual distinction
- Block rendering: Gradient fill with darker border overlay
- Control panel management: Prevents opening multiple panels on the same block
- Feedback loop deletion: Deleting either FBInput or FBOutput removes both
- Patch info panel: Refreshes on patch switch; remembers window position
- About dialog: Fixed appearing on wrong monitor
- Pin name tooltip: Shows as mouse hover tooltip instead of status bar
- Model regeneration: Updates ASM listing and toolbar after block deletion

Testing & CI

- Automated test suite: 459 tests across 3 test classes (AllBlocksCodeGenTest, LegacyFileLoadTest, SimulatorBypassTest)
- Full round-trip test: Load bank -> save/reload patch -> ASM -> save/reload bank -> hex -> spin project
- Simulator bypass test: Validates signal passthrough for 149 patches
- Test summary: Per-class breakdown showing pass/fail/skip counts
- GitHub Actions CI: Gradle build with JUnit 5 on push/PR
- CodeQL: Fixed workflow to use JDK 17 with explicit Gradle build
 
I just tried that and Terminal reports: "Error: Unable to access jarfile SpinCAD-Designer-build-1062.jar"

But when I try the Terminal debug mode for the other versions, they launch.
 
It still won't launch. But running the Terminal debug on my new MacBook Pro I get . . . . .

Exception in thread "AWT-EventQueue-0" java.lang.NoSuchMethodError: java.util.Map.of(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Map;
at com.holycityaudio.SpinCAD.SpinCADFile.<clinit>(SpinCADFile.java:162)
at com.holycityaudio.SpinCAD.SpinCADFrame.<init>(SpinCADFrame.java:220)
at com.holycityaudio.SpinCAD.SpinCADFrame$1.run(SpinCADFrame.java:161)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
The ;) smiley superseded the ";" and ")"
 
The good news is that it launches in my Windows machine and Terminal debug mode presents well.

Oooops! Grabbed the wrong build file. Brb . . .
 
OK, I grabbed the 1062 file in Terminal debug mode and got this:

PS C:\SpinCAD> java -jar SpinCAD-Designer-1062.jar
Exception in thread "AWT-EventQueue-0" java.lang.NoSuchMethodError: java.util.Map.of(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Map;
at com.holycityaudio.SpinCAD.SpinCADFile.<clinit>(SpinCADFile.java:162)
at com.holycityaudio.SpinCAD.SpinCADFrame.<init>(SpinCADFrame.java:220)
at com.holycityaudio.SpinCAD.SpinCADFrame$1.run(SpinCADFrame.java:161)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
 
I entered the error message into the suggestion box and this came out. Let's see how smart this thing is. btw it's a Java version compatibility issue.

Remove the ".mov" from the end, I can't upload a jar file. Woops the board is too smart, wouldn't let me do it. Hang on. I faked it out, it doesn't know how to check an spcd hehh hehh.

DL
 

Attachments

Ouch! When I open the MH patch and open any Control Panels of the blocks then close them, they will not re-open a second time.

Going to my Windows machine to see if that's the same.
 
Back
Top