Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Overview

Rhapsodist is a collection of HISE scripts for building expansions for the Rhapsody Player from Libre Wave.

One of the aims with Rhapsodist is to minimise the amount of script that needs to be written to create a HISE project. In many situations no scripting is required beyond creating a configuration file and setting up a few includes.

However for more custom behaviour Rhapsodist is flexible and provides many entry points and overrides to integrate with your own scripts.

Who This Documentation Is For

Developers who already know HISE scripting, but are new to Rhapsodist’s architecture and conventions. It explains how the system fits together and how to use it. The Rhapsodist source remains the authoritative reference for implementation detail.

How To Use This Documentation

File-level pages follow a common layout: an overview, a usage example, an options table (if the file takes one), a Public API table, and, where relevant, an Internal Reference table.

Internal Reference documents a file’s non-public functions for context. These aren’t part of the public API, may change without notice, and shouldn’t be called from custom scripts.

Terminology

  • Expansion: A HISE Full Instrument Expansion for Rhapsody.
  • Patch: An individual patch (usually a separate instrument) within an expansion. With its own sample maps, articulations, and configuration.
  • Articulation: A rule set within a patch that dynamically alters the configuration of the expansion. Most commonly used for selecting the active sample set.
  • Module: Any element that can be added in HISE’s module tree. This includes MIDI processors, effects, modulators, etc.

Important

To use Rhapsodist you need to already be familiar with working in HISE and with HISE script. A complete, and free of charge, beginners’ HISE course is available here.

What Rhapsodist provides

Rhapsodist provides a complete toolkit of reusable modules, processors, and script libraries that accelerate instrument development in HISE. It implements a layered architecture with clear separation between:

  • Core - The foundational infrastructure that every project needs.

  • Includes - Shared libraries for articulation management, mixer handling, and more.

  • A shell UI (header, footer, preset browser, settings window, on-screen keyboard, preload bar, zoom controls). So every expansion gets consistent player chrome.

  • A patch/articulation configuration system that reads a developer-supplied Manifest describing an expansion, its patches, and articulations, and applies module attributes, sample maps, and component properties accordingly.

  • A set of reusable MIDI processors for common sample-patch needs: round robin, legato/portamento, release triggers, velocity shaping, note filtering, microtuning, and more. Dropped into a sampler’s or container’s MIDI processor chain as needed.

  • A set of UI widgets for rapidly building interfaces: articulation lists, mixers, EQ panels, envelope controls, microtuning panels, harp pedal diagrams, and more.

  • A consistent Look and Feel system with overridable drawing functions, so an expansion can restyle the shell or widgets by redeclaring functions without touching the Rhapsodist source.

Core Design Principles

  1. Configuration - Instruments are defined declaratively via JSON data.
  2. Broadcasters - Decoupled communication through HISE’s broadcaster system. This increases the modularity and flexibility of the framework.
  3. Namespaces as Modules - Each file exports a single namespace encapsulating its functionality.

What Rhapsodist Is Not

Not a single monolithic framework, it’s a set of independent-but-cooperating HISE script includes and standalone processor scripts that can work together.

Understanding it means understanding how these pieces connect, not just what each file does in isolation, see Architecture.

Requirements

Rhapsodist requires David Healey’s fork of HISE (master branch), not upstream HISE. The fork carries features Rhapsodist depends on and the preprocessor definitions Rhapsody itself is built with.

Precompiled binaries for each OS are available from the fork’s nightly release, so there’s no need to compile anything.

Licensing

A Rhapsody expansion isn’t a compiled, closed HISE project, it can always be extracted back into an ordinary HISE project.

There’s no practical way to conceal an expansion’s scripts or configuration. DRM or similar access-restriction schemes won’t work in a Rhapsody expansion by design.

Code written for use with the Rhapsodist API should be released under GPLv3, matching Rhapsodist’s own license.

Sample content is separate and can be released under a less permissive license.

A Note on ScriptNode Networks

Expansions aren’t compiled projects and therefore can’t include compiled ScriptNode networks that aren’t already compiled into Rhapsody. So you can only use uncompiled networks when creating an expansion.

This is rarely an issue for small networks, but a large or complex uncompiled network could cause performance problems, since it runs without a compiled network’s optimisations.

For the same reason, Faust isn’t currently compatible with Rhapsody either.