Skip to content

MIDI Patch Change Library

License

Notifications You must be signed in to change notification settings

ifIMust/patchician

Repository files navigation

Patchician

Introduction

Patchician is a general purpose patch librarian for synthesizers. It runs on Linux using gtk4 and can send patch changes using ALSA MIDI. The included configuration works with the Yamaha MX49/MX61/MX88 synths. Other synths can be used after generating a db with patchician_importer.

The name is a combination of "Patch" and "Magician".

Features

  • Sqlite database stores information about banks and patches, including custom names, tags, and notes.
  • Available patches are displayed, and may be filtered, sorted and edited.
    • Filter and sort by bank, name, tags, or notes
  • Patch changes may be sent via ALSA MIDI to control instruments (sent as a Bank Select followed by Program Change to the selected channel).

patchician

Dependencies

To compile patchician, you'll need the development files for a few libraries. Example package names in parentheses are for Debian/Ubuntu.

  • gtk4 (libgtk-4-dev)
  • sqlite3 (libsqlite3-dev)
  • alsa (libasound2-dev)
  • jack (libjack-jackd2-dev)

Building

Run the script "./patch", or run the one important command in that file. It produces the output binary "./patchician".

Usage

Patchician expects a default.db file to be present. The included DB is based on the Yamaha MX patch collection. The companion tool, patchician_importer, can create this DB.

Patchician opens an ALSA MIDI output port while running. This port may be connected to your instrument via a utility such as aconnectgui. Patch changes will be sent to this port when pressing the "Send It" button.

Tasks / To Do

  • Allow specifying the DB file name.
  • JACK MIDI support. (Present JACK code is not correct.)
  • Use high level ALSA sequencer for MIDI (in place of raw MIDI).
    • Set client name

Known Issues

  • Database functions and gtk model are excessively coupled
  • "Send on select" works when selecting a new row, but not when selecting the same row.

Further Objectives

  • Display PC / bank select numbers in the table
  • Add column-show/hide GtkCheckMenuItems to customize which columns are displayed.
  • RaySession support
  • Display a bank of known tags that may be added to a patch's tag collection
  • Virtual banks
  • Trigger patch changes via MIDI input
  • Offer a grid view of patches