brainstate

denzlobin/S1Utility · source

Snapshot 0 · 2026-11-04T12:47:28Z · C# · GPL-3.0

Content fingerprint58a16e63fd26c599c3baf2b98c545b319bc9e5d61a130d6c86fcfb74e91d5ab1

GitHub description at capture

A desktop editor and patch inspector for Roland AIRA Compact S-1 Tweak Synthesizer

README at capture

# S-1 Utility

A desktop companion app for the Roland AIRA Compact S-1 Tweak Synthesizer.

S-1 Utility connects to a S-1 over MIDI and provides a visual parameter editor, a read-only Patch Inspector for browsing `.PRM` patch backups, and hardware-calibrated heuristic visualizations of the synth's ADSR envelope, filter response and oscillator waveform.

The design principle: **While using heuristics, the app tries to stay honest about what it knows.** When the app can reflect the synth's exact state, it does. When it can't, it surfaces uncertainty rather than displaying wrong or misleading values.

Video walkthrough: https://youtu.be/QvIQj3y7kds?si=FHXMjAINzbMv2fmb

---

## Disclaimer

This is an unofficial third-party tool. This project is not affiliated with, endorsed by, or sponsored by Roland Corporation. Major part of the code is generated with Claude Code, but the app is a product of continuous iteration and refinement.

S-1 Utility is provided "as is", without warranty of any kind. The author is not responsible for any malfunction, data loss, or damage to your hardware that may result from using this software. That said, the app only sends and receives standard MIDI Control Change (CC) messages, the same messages the S-1 already accepts from any MIDI controller or DAW, and does not write `.PRM` files or use sysex. Practically, the risk of the app harming the device is very low, but you use it at your own risk.

---

## Features

- **Visual parameter editor**. Knobs, LEDs, sliders, and waveform displays that mirror the S-1's current state over MIDI CC.
- **Patch Mirror**. When a `.PRM` folder is configured, the editor stays in sync with the S-1 in real time: it loads the corresponding patch when patterns change on the device and preserves unsaved edits per slot.
- **Sync-state tracking**. Every parameter shows whether the editor has confirmed its value from the synth (via incoming CC, Send All, or PRM load). Unsynced controls go grey with a `?` label.
- **Parameter visualization**. Filter frequency-response curve, animated ADSR envelope visualizer, draw-wave bars with signed value labels, chop pattern grid.
- **Patch Inspector**. Read-only view of all `.PRM` file data, including parameters that have no MIDI CC equivalent and can be only set from the hardware (sequencer data, draw and chop patterns, etc.).
- **Undo / Redo** for parameter edits, with per-CC coalescing for knob drags.
- **Hardware-verified encodings**. CC mappings, ADSR timing constants, oscillator waveforms, and other measured values were established by testing against real hardware.
- **MIDI Export**. One-click export of the pattern sequencer data into a MIDI file.
- **Keyboard shortcuts**. `Ctrl+M` toggle Connect/Disconnect, `Ctrl+I` Init Patch, `Ctrl+R` Restore Patch, `Ctrl+S` Save Preset, `Ctrl+Z`/`Ctrl+Y` Undo/Redo, `Tab` cycle tabs, arrow keys for patch grid navigation.

---

## Screenshots

**Realtime Editor**

<img src="docs/screenshots/Editor.png" alt="Realtime Editor tab" width="700">

**Patch Inspector**

<img src="docs/screenshots/Inspector.png" alt="Patch Inspector tab" width="700">

---

## Requirements

The release builds are self-contained, so no .NET runtime is needed to run them.

- **Windows 10 or 11**, or
- **Linux** with ALSA (standard on desktop distributions). The AppImage additionally needs FUSE (`libfuse2`, or `libfuse2t64` on newer Ubuntu); the `.tar.gz` build has no such dependency.
- A **Roland S-1** connected over USB MIDI.

Building from source additionally requires the **.NET 10 SDK** (pinned via `global.json`). For macOS, see [Platform support](#platform-support).

---

## Build and run

```sh
git clone https://github.com/denzlobin/S1Utility.git
cd S1Utility
dotnet build
dotnet run --project S1Utility/S1Utility.csproj
```

Run the tests:

```sh
dotnet test
```

---

## Project status

Feature-complete for its intended scope: everything the S-1 exposes over MIDI CC is implemented, and the encodings and visualizations are calibrated against real hardware. Active development is winding down; further work will be occasional.

---

## Platform support

S-1 Utility runs on **Windows** and **Linux**, both exercised against real hardware. Prebuilt, self-contained downloads for each are on the [Releases](https://github.com/denzlobin/S1Utility/releases) page (Windows `.zip`, Linux `.AppImage` and `.tar.gz`).

**macOS is unsupported but reported working from source.** A community tester built and ran it on an Intel Mac (.NET 10 SDK), with MIDI to a real S-1 over USB working via CoreMIDI/DryWetMidi ([#2](https://github.com/denzlobin/S1Utility/pull/2)). Apple Silicon is untested. The window aspect-ratio policy stays inactive there, and shortcuts use Ctrl rather than Cmd. There are no prebuilt macOS downloads; build with `dotnet publish S1Utility/S1Utility.csproj -c Release -r osx-x64 --self-contained true` (or `osx-arm64`). The author does not own a Mac and does not plan to maintain a macOS build.

---

## Possible future work

The draw and chop waveform visualizers could be made more faithful by drawing on the full PRM data they currently summarize. This is a maybe rather than a plan, with no timeline.

---

## What will not happen

- **VST, AU, CLAP and other plugin versions.** S-1 Utility is designed as a standalone app, and many of its features will be difficult or confusing in a plugin version. You are free to reuse any code or design decisions if you want to build a plugin version yourself.
- **iOS, iPadOS, Android versions.** For the same reasons.
- **`.PRM` data editing.** The actual usecase is very questionable, and you probably don't want to test what happens with the device if you feed it with corrupted data.
- **More realtime controls.** Everything controllable by CC is already available on the Realtime Editor tab. Unless the device receives a firmware update with more Control Change parameters, the editor expansion is out of the question.

---

## Known limitations

- **macOS is unsupported.** Windows and Linux are supported and tested; macOS has only a community report of building and running on Intel. See [Platform support](#platform-support).
- **Tab 2 (Patch Inspector) is read-only.** The app does not write `.PRM` files; most PRM-only parameters have no MIDI CC path, and writing risks corrupting your patch backups.
- **No sysex.** The S-1 does not use sysex for parameter control.
- **Reliance on up-to-date manual backup.** The app cannot detect if the `.PRM` data on the synth diverged from what is stored on the user's machine. Every time you write into a patch/pattern slot on the hardware, you need to manually copy modified files to the `.PRM` folder on your machine.

---

## How `.PRM` backup works

The S-1 can export its 64-pattern bank as a folder of `.PRM` files via its USB Disk Mode. To activate it power on the device while holding down the Play button. The drive will take 1-2 minutes to get ready. The keyboard pads indicate the loading progress. Once loaded, copy the contents of the BACKUP folder to your computer and configure the path to it in Settings.


---

## Acknowledgments

- [Avalonia](https://avaloniaui.net/) for the cross-platform UI framework.
- [Melanchall.DryWetMidi](https://github.com/melanchall/drywetmidi) for MIDI I/O on Windows and macOS.
- [managed-midi](https://github.com/atsushieno/managed-midi) for ALSA MIDI I/O on Linux.

---

## License

This project is licensed under the GNU General Public License v3.0 or later. See [LICENSE](LICENSE) for the full text.

---

## Contributing

See [CONTRIBUTING.md](CONTRIBUTING.md). Hardware-verified values must not be changed without re-verifying against a real S-1; that section is mandatory reading before touching parameter mappings.

[![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/M4M5KXQ5P)