# Table of Contents

1.  [Modmark](#org3315e91)
    1.  [Current Status and Goals](#org9a3029e)
    2.  [Purpose](#orgbde233a)
    3.  [Syntax](#org47e5981)
        1.  [A Module File](#org6619c61)
        2.  [A Patch](#orgefc3c3a)


<a id="org3315e91"></a>

# Modmark

This repo encapsulates an attempt to develop a markup language for describing modular synth patches.

In future, this scope may be expanded to make available a language for describing arbitrary audio and
data routing across a wide array of devices.


<a id="org9a3029e"></a>

## Current Status and Goals

This software is currently a prototype. Right now the "compiler" is a Perl script that translates a
`.modmark` file into a flowchart via Graphviz.

A rough road map looks something like:

-   [X] Prototype compiler in Perl
-   [ ] Test and stabilize syntax/grammar
-   [ ] Implement modmark as a source-to-source compiler in Racket ( "Real" implementation )
-   [ ] Develop libraries for as many modules as possible


<a id="orgbde233a"></a>

## Purpose

In the past I've found it difficult to discuss discrete details of modular patches on the internet. This
arises, I believe, from the large amount of effort and time it takes to describe the intricacies of a modular
patch in long form plain English. This prototype language is an attempt to address that problem.

By specifying a concise syntax that favors brevity over absolute human-readability, the hope is to get more
modular synth users to document their patches and enable more knowledge sharing across the community.

I know of one other attempt to solve this problem: <https://github.com/SpektroAudio/Patchbook>

My problem with Patchbook is that it still requires a lot of "boilerplate", in that you have to specify
modules yourself. Modmark aims to offload this task by having the community describe modules in a Library format
(`.module` files) that can then be imported. In this way, we can specify a module *once* and then not have
to do that work again the next time we'd like to use it in a patch.


<a id="org47e5981"></a>

## Syntax


<a id="org6619c61"></a>

### A Module File

[Make Noise Maths](./module_lib/maths.module)


<a id="orgefc3c3a"></a>

### A Patch

[Example Patch](./patches/example.modmark)