Git Product home page Git Product logo

phasephdgr's Introduction

README

PhasePhdgr is an (extendable) MPE capabable software modular synthesizer and effect processor. It comes both as a headless CLI (jack) synth, and wrapped inside an elaborate VST/GUI (JUCE) in two flavours (instrument and effect).

Under the hood, all connections and states are described via hiarchies in JSON. A user can create subgraphs, optionally storing it to disk, and reference it from other (sub)graphs. Advanced users can extend the synth by using the minimal sdk provided (as opposed to contributing to this repo).

Highlights

  • Cross platform plugin (VST3, AU) and standalone. Courtesy of using JUCE.
  • Sample-by-sample feedback processing in the modular compute graph
  • Block-wise processing for the partitions of a graph that has no feedback paths. ie, graph is segmented on the fly.
  • MPE support
  • Graph descriptions stored on disk as JSON, ie editable by external means!
  • Building blocks like ZDFs (zero delay filters) and an oscillator that handles (partial sync). Delay lines with support for fractional (subsample precision) and modulated delay.
  • Experiment oriented versions of graph components where the state is an output/input set. Allows for quick experimentation with nonlinearities in filter (internal) feedback paths, for instance.
  • Per-patch configurable settings for polyphony and note-stealing behaviour.

Disiclaimers

This is an old hobby project of mine (and some friends). It does NOT represent a sensible software project. The UI bits are partly broken and horribly implemented. There are few unit tests. There are however some DSP nuggets, and the graphing engine is quite clever and useful. There are also plans to polish the quality of testing and a complete rewrite of the UI (not using JUCE).

Graph overview

The synth uses two graphs - one for the voices and a seperate one for the effect (after summing all the voices output).

plugin host (midi, transport info) -> [voice graph(s)] -> [effect graph] -> plugin host (audio)

The effect only has one graph.

plugin host (audio, transport info) -> [effect graph] -> plugin host (audio)

Note, adding support for audio input to the synth, as similairly midi input for the effect should fairly straight forward technically.

build targets

  • core / synth / tools - buildable from from ./core
  • VST / JUCE - option BUILD_JUCE
  • CLI client(s) - option BUILD_CLI
  • Plugin SDK export - option BUILD_PLUGIN_SDK

submodules

  • nlhomann/json - forked version to tweak the pretty print behaviour
  • ThreadPool - forked to add a namespace
  • VST3 SDK - note, is a collection of submodules itself
  • JUCE

phasephdgr's People

Contributors

ulph avatar gustafullberg avatar lkoenig avatar

Watchers

 avatar

phasephdgr's Issues

rewrite UI without JUCE

huge task

decide on another approach. a tempting one is to host a web server inside the plugin that serves a web tech based ui (popping up a browser tab! ie not webview or crap like electron).

JUCE ui code buggy

Some actions in the UI are broken, like adding values to pads and similar.

make block processing mode blocksize configurable

... but probably we still want it to be a complile time thing. perhaps solve this by making connection graph and all pads/modules templated on the blocksize, for say 128/64/32/16/8 flavours and let connection graph, or caller to it, stitch together the best matching combinations for a given output buffer size

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.