A native macOS voice editor and SysEx librarian for the Casio VZ-1, VZ-10M, and VZ-8M synthesizers.
Built in Swift / SwiftUI. No dependencies. Bit-accurate handling of the full 336-byte VZ voice format, verified against Casio's official spec.
Status: Source code complete for the core editor; 28 unit tests passing; first preview cut as v0.0.1 (hardware-untested). Build instructions in SETUP.md.
- Live MIDI editing — receive a patch from the synth, edit it visually, send it back. Auto-update mode pushes changes after every parameter tweak.
- Visual signal flow — see the iPD module routing (M1–M8 across Lines A–D) at a glance, with click-to-edit module blocks.
- Drag-to-edit envelopes — Canvas-based 8-step envelopes with movable sustain and end markers, plus 6-point key-follow breakpoint editing.
- Patch library — JSON-backed library with full CRUD, multi-patch
.syximport/export, and per-patch metadata. - All three VZ models — VZ-1, VZ-10M, and VZ-8M (operation editor for multi-timbral mode is planned).
- macOS 14 Sonoma or later
- Xcode 15+ (to build)
- XcodeGen —
brew install xcodegen - A USB-MIDI interface connected to your VZ synth
git clone git@github.com:iraaron/VZenit.git
cd VZenit
brew install xcodegen # one time
xcodegen generate
open VZenit.xcodeprojIn Xcode, set your Team under Signing & Capabilities, then ⌘R. Full walkthrough in SETUP.md.
To produce an ad-hoc-signed .app zipped up for sharing:
./scripts/release.sh
# → dist/VZenit-<version>.zipThe recipient (who doesn't have Xcode) clears the quarantine attribute and runs it:
xattr -cr ~/Downloads/VZenit.app && open ~/Downloads/VZenit.appOr in Finder: right-click → Open → confirm the Gatekeeper dialog.
VZenit/
├── README.md ← you are here
├── SETUP.md ← detailed setup walkthrough
├── project.yml ← XcodeGen spec — single source of truth
├── scripts/
│ └── release.sh ← one-shot build + zip for distribution
├── Sources/VZenit/
│ ├── App/ ← @main entry point + root view
│ ├── Models/ ← 336-byte voice model, SysEx codec, randomizer, library
│ ├── MIDI/ ← CoreMIDI wrapper, SysEx streaming
│ └── Views/ ← Voice editor, envelope editor
└── Tests/VZenitTests/ ← 28 unit tests
- Operation editor (multi-timbral mode)
- On-screen MIDI keyboard preview
- Patch compare / morph
- Undo/redo
- 64-patch bank dump/restore
- App icon
- Hardware verification on real VZ-1 / VZ-10M / VZ-8M units
The 336-byte voice format was cross-referenced against the riban-bw/vzeditor project's VZ sound creation.txt documentation.
MIT. Portions of the SysEx specification derived from the Casio VZ-1 Service Manual and riban-bw/vzeditor (LGPL-3.0).