Metadata-Version: 2.5
Name: JDXI-Editor
Version: 0.9.9
Summary: A MIDI manager and editor for the Roland JD-Xi synthesizer
Project-URL: Homepage, https://github.com/markxbrooks/JDXI-Editor
Project-URL: Repository, https://github.com/markxbrooks/JDXI-Editor.git
Project-URL: Issues, https://github.com/markxbrooks/JDXI-Editor/issues
Author-email: Mark Brooks <mark.x.brooks@gmail.com>
License: MIT License
        
        Copyright (c) 2025 Mark Brooks
        
        Permission is hereby granted, free of charge, to any person obtaining a copy
        of this software and associated documentation files (the "Software"), to deal
        in the Software without restriction, including without limitation the rights
        to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
        copies of the Software, and to permit persons to whom the Software is
        furnished to do so, subject to the following conditions:
        
        The above copyright notice and this permission notice shall be included in all
        copies or substantial portions of the Software.
        
        THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
        IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
        FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
        AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
        LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
        OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
        SOFTWARE.
License-File: LICENSE
Classifier: Development Status :: 4 - Beta
Classifier: Environment :: X11 Applications :: Qt
Classifier: Intended Audience :: End Users/Desktop
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Multimedia :: Sound/Audio :: MIDI
Requires-Python: >=3.10
Requires-Dist: darkdetect
Requires-Dist: decologr
Requires-Dist: mido>=1.3
Requires-Dist: music21
Requires-Dist: numpy
Requires-Dist: picomidi>=0.2.0
Requires-Dist: pillow
Requires-Dist: pyaudio
Requires-Dist: pyfluidsynth
Requires-Dist: pyqtdarktheme
Requires-Dist: pyside6<6.10,>=6.8.1.1
Requires-Dist: python-rtmidi>=1.5.8
Requires-Dist: qtawesome
Requires-Dist: sqlalchemy>=2.0
Provides-Extra: dev
Requires-Dist: black; extra == 'dev'
Requires-Dist: flake8; extra == 'dev'
Requires-Dist: isort; extra == 'dev'
Requires-Dist: mypy; extra == 'dev'
Requires-Dist: pytest>=8; extra == 'dev'
Provides-Extra: plots
Requires-Dist: matplotlib; extra == 'plots'
Provides-Extra: soundfont
Requires-Dist: sf2utils>=1.0.0; extra == 'soundfont'
Requires-Dist: sounddevice>=0.4.0; extra == 'soundfont'
Description-Content-Type: text/markdown

# JDXi-Editor

![Roland JD-Xi Cartoon](https://raw.githubusercontent.com/markxbrooks/JDXI-Editor/main/resources/JDXI-Editor_logo_640.png)

**JDXi-Editor**: The missing MIDI editor for the **Roland JD-Xi synthesizer**

## Unleash the hidden power of your Roland JD-Xi. 
- Stop fighting menus and start creating. 
- JDXi-Editor puts every sound, control, and performance tool right at your fingertips—fast, visual, and effortless. 
- Shape your tones, browse and save presets, build playlists, and take full command of your synth without breaking your creative flow. 
- Wherever you create—from your home studio to late-night sessions—this is the editor your JD-Xi has always deserved.
- Designed to implement as many features as possible from Roland’s MIDI implementation—without the need to dive through hardware menus. 🎛️

---

## 🎛️ Features of JDXI-Editor for Roland JD-Xi Synthesizer
- **On-Screen Keyboard**: Easily play and test sounds from your JD-Xi.
- **Preset Selection with Search**: Quickly find and load presets.
- **Octave Shifting**: Adjust octave ranges for precise sound control.
- **Digital & Analog Synth Editors**: Edit JD-Xi's digital and analog synths directly.
- **Drum Part Editor**: Customize drum sounds and patterns 🥁.
- **Effects Editor**: Edit reverb, delay, compressor, phaser, and arpeggiator settings.
- **Vocal Effects Editor**: Vocoder and Auto-Pitch with polymorphic UI.
- **Pattern Editor**: 4×16 step sequencer with MIDI load/save, part muting, and USB recording.
- **MIDI File Player**: Load MIDI files, classify tracks, assign channels, play with JD-Xi or FluidSynth.
- **SoundFont Support**: Use .sf2/.sf3 for playback without hardware.
- **MIDI Debugger**: Monitor and debug MIDI messages efficiently.

---

Designed for musicians, sound designers, and MIDI enthusiasts looking to unlock the full potential of the Roland JD-Xi synthesizer!

### 🖥️ 'Keyboard Window' Screenshot

<a href="https://github.com/markxbrooks/JDXI-Editor/blob/main/resources/main_window_0.6.gif" rel="Current view of the Roland JD-Xi Editor App">
  <img src="https://raw.githubusercontent.com/markxbrooks/JDXI-Editor/main/resources/main_window_0.6.gif" alt="Roland JD-Xi Main Editor Window" />
</a>

---
## 🎥 Watch JDXI-Editor in Action

Check out some great performances and demos of the Roland JD-Xi:

- 🎹 [Pink Floyd – *Sheep* 🐑 on the Roland JD-Xi](https://www.youtube.com/watch?v=vh-i8eb2SYQ)  
- 🎹 [Avicii – *Wake Me Up* on the Roland JD-Xi](https://www.youtube.com/watch?v=VyQxaOc6G2Y)  
- 🎹 [Vangelis – *Blade Runner End Titles* | Synth Cover on the Roland JD-Xi](https://www.youtube.com/watch?v=mGgGibBKm9E)  
- 🎹 [Underworld – *Born Slippy* on the Roland JD-Xi](https://www.youtube.com/watch?v=xHLttYaMxCw&list=PLVZK_NOytILiQuNulDn-tOdAUQWdNAS-y&index=18)  
- 🎹 [*Knight Rider Theme* on the Roland JD-Xi](https://www.youtube.com/watch?v=4XpuQm7_Ohs&list=PLVZK_NOytILiQuNulDn-tOdAUQWdNAS-y&index=20)  
- 🎹 [Twin Peaks – *Laura Palmer's Theme* on the Roland JD-Xi](https://www.youtube.com/watch?v=zSkKNoy8O9Y&list=PLVZK_NOytILiQuNulDn-tOdAUQWdNAS-y&index=29)  
- 🎹 [The Cure – *A Forest* on the Roland JD-Xi](https://www.youtube.com/watch?v=wejcaIawCMs&list=PLVZK_NOytILiQuNulDn-tOdAUQWdNAS-y&index=25)  
- 🎹 [Michael Jackson – *Thriller* on the Roland JD-Xi](https://www.youtube.com/watch?v=flFQlFggTug&list=PLVZK_NOytILiQuNulDn-tOdAUQWdNAS-y&index=19)  

---

### 🎬 Featured Demo  

Phil Collins – *In The Air Tonight* performed on the Roland JD-Xi  

[![Watch the demo](https://img.youtube.com/vi/oquaCQE1EFs/0.jpg)](https://www.youtube.com/watch?v=oquaCQE1EFs)

## 🚀 Getting Started


### MacOS 🖥️
There is a new build for MacOS Sequoia. See the [releases page](https://github.com/markxbrooks/JDXI-Editor/releases/tag/v0.9.6).

### Windows 📦
There is a new build for Windows. See the [releases page](https://github.com/markxbrooks/JDXI-Editor/releases/tag/v0.9.6).

### Linux 📦
There is a new build for Linux. See the [releases page](https://github.com/markxbrooks/JDXI-Editor/releases/tag/v0.9.6).


### Python 🐍
JD-Xi Editor is on PyPI (Python 3.10 to 3.12). Install it in a virtual environment and start it with `jdxi-editor`:

```bash
$ python -m venv jdxi-env
$ source jdxi-env/bin/activate        # Windows: jdxi-env\Scripts\activate
$ python -m pip install JDXI-Editor
$ jdxi-editor
```

PyAudio needs the PortAudio library: on macOS `brew install portaudio`, on Debian/Ubuntu `sudo apt install portaudio19-dev`, before the `pip install`. The FluidSynth player needs FluidSynth itself (`brew install fluid-synth`, `sudo apt install fluidsynth`).

To run from a checkout instead (for development):

```bash
$ git clone https://github.com/markxbrooks/JDXI-Editor.git
$ cd JDXI-Editor
$ python -m venv venv
$ source venv/bin/activate
$ python -m pip install -e ".[dev]"
$ python -m jdxi_editor.main
```

# 📖 Documentation

## Features and Usage

See **[Features and Usage](https://github.com/markxbrooks/JDXI-Editor/blob/main/doc/features-and-usage.md)** for:

- **Recent changes** — Arpeggiator SysEx sync, Effects Editor, Vocal Effects
- **Patch loading and saving** — .jsz, .msz, .json, .syx formats; save/load flow
- **SoundFont usage** — FluidSynth for playback, preset list from .sf2/.sf3

---

## ℹ Available Documentation:
### 📃 HTML Documentation:

https://markxbrooks.github.io/JDXI-Editor/

### 🎹 UI Previews


**Program Editor**  
<a href="https://github.com/markxbrooks/JDXI-Editor/blob/main/resources/program_editor.gif">
  <img src="https://raw.githubusercontent.com/markxbrooks/JDXI-Editor/main/resources/program_editor_600.gif" alt="Program Editor" />
</a>

&nbsp;

**Analog & Digital Synths**  
<a href="https://github.com/markxbrooks/JDXI-Editor/blob/main/resources/analog_synth.gif">
  <img src="https://raw.githubusercontent.com/markxbrooks/JDXI-Editor/main/resources/analog_synth_600.gif" alt="Analog Synth" />
</a>

&nbsp;

<a href="https://github.com/markxbrooks/JDXI-Editor/blob/main/resources/digital_synth.png">
  <img src="https://raw.githubusercontent.com/markxbrooks/JDXI-Editor/main/resources/digital_synth_600.png" alt="Digital Synth" />
</a>

&nbsp;

**Drum Editor**  
<a href="https://github.com/markxbrooks/JDXI-Editor/blob/main/resources/drum_editor.gif">
  <img src="https://raw.githubusercontent.com/markxbrooks/JDXI-Editor/main/resources/drum_editor_600.gif" alt="Drum Editor" />
</a>

&nbsp;

**Midi File Player**  
<a href="https://github.com/markxbrooks/JDXI-Editor/blob/main/resources/midi_player.gif">
  <img src="https://raw.githubusercontent.com/markxbrooks/JDXI-Editor/main/resources/midi_player_600.gif" alt="Midi File Player" />
</a>

&nbsp;

**Pattern Sequencer**  
<a href="https://github.com/markxbrooks/JDXI-Editor/blob/main/resources/pattern.gif">
  <img src="https://raw.githubusercontent.com/markxbrooks/JDXI-Editor/main/resources/pattern_600.gif" alt="Pattern Sequencer" />
</a>

&nbsp;

**Effects and Arpeggiator**  
<a href="https://github.com/markxbrooks/JDXI-Editor/blob/main/resources/effects.png">
  <img src="https://raw.githubusercontent.com/markxbrooks/JDXI-Editor/main/resources/effects_600.png" alt="Effects and Arpeggiator" />
</a>


---

## 🎛️ Features

- On-screen Keyboard
- Preset selection with search
- Octave shifting
- JD-Xi-style LCD Display
- ADSR displays
- Pitch ENV displays
- Digital Synth Parts 1 & 2 (including 3 partials per part)
- Analog Synth Editor
- Drum Part Editor 🥁
- Effects: Reverb, Delay, Compressor, Phaser, Vocoder
- Vocal Effects Editor (Vocoder, Auto-Pitch)
- Arpeggiator Editor
- Pattern Editor (4×16 step sequencer, MIDI load/save)
- MIDI File Player (track classification, channel assignment)
- SoundFont (.sf2/.sf3) playback without hardware

---

## ❓ Frequently Asked Questions
### What is JDXI-Editor?
JDXI-Editor is a Python-based MIDI editor for the Roland JD-Xi synthesizer, built with the Qt Framework and RtMidi.
### Does JDXI-Editor work on MacOS, Linux and Windows?
Yes, JDXI-Editor supports MacOS, Linux, and Windows!
### What features does JDXI-Editor offer?
JDXI-Editor provides preset selection, synth editing, drum part customization, effects editing, and more.

---

- Learn more about the [Roland JD-Xi Synthesizer](https://www.roland.com/global/products/jd-xi/).
- Explore the [Qt Framework](https://www.qt.io/) for building cross-platform apps.
- Discover [RtMidi](https://www.music.mcgill.ca/~gary/rtmidi/), a real-time MIDI library.

---

### 💡 Contribute and Share Feedback
JDXI-Editor is a growing project! 
- ⭐ Star this repository to support its development.
- 🛠️ Contribute features or report issues via [GitHub Issues](https://github.com/markxbrooks/JDXI-Editor/issues).

---

## Building

```bash
python -m building.buildsys 2>&1 | head -50

Building on: linux
Project root: /home/brooks/PycharmProjects/JDXI-Editor
╭─────────── linux builder ────────────╮
│  linux builder Application Starting  │
╰──────────────────────────────────────╯
[02/10/26 23:12:10] INFO                        ℹ️ linux builder starting up with log file /home/brooks/.linux builder/logs/linux builder-10Feb2026-23-12-10.log...                                                         
                    INFO                        ℹ️ 🎹 JD-Xi Editor v0.9.6 - Linux Build System                                                                                                                              
                    INFO                        ℹ️ ==================================================                                                                                                                       
                    INFO                        ℹ️                                                                                                                                                                          
                             🧹 Cleaning previous builds...                                                                                                                                                                
                    INFO                        ℹ️                                                                                                                                                                          
                             📦 Building with PyInstaller...                                                                                                                                                               
                    INFO                        ℹ️   This may take a few minutes... 
```


## 🙏 Credits

- [Qt](https://www.qt.io/)
- [RtMidi](https://www.music.mcgill.ca/~gary/rtmidi/)
- [Cursor.ai](https://cursor.so)
- [qtawesome](https://github.com/spyder-ide/qtawesome)
- Inspiration from many great JD-Xi editor projects that paved the way
- **Roland**, for creating such a powerful little synth!

---

> Made with 🎹 and ☕ by @markxbrooks

