1
2 # Table of Contents
3
4 1. [Modmark](#org18831d8)
5 1. [Current Status and Goals](#org926a523)
6 2. [Purpose](#org0463441)
7 3. [Syntax](#org004fef7)
8 1. [A Module File](#orgb5658bc)
9 2. [A Patch](#orgf298aea)
10
11
12 <a id="org18831d8"></a>
13
14 # Modmark
15
16 This repo encapsulates an attempt to develop a markup language for describing modular synth patches.
17
18 In future, this scope may be expanded to make available a language for describing arbitrary audio and
19 data routing across a wide array of devices.
20
21
22 <a id="org926a523"></a>
23
24 ## Current Status and Goals
25
26 This software is currently a prototype. Right now the "compiler" is a Perl script that translates a
27 `.modmark` file into a flowchart via Graphviz.
28
29 A rough road map looks something like:
30
31 - [X] Prototype compiler in Perl
32 - [ ] Test and stabilize syntax/grammar/prototype compiler
33 - [ ] Bug with connections where similar connection names are not resolved properly,
34 resulting in duplicate or merged connections
35 - [ ] Clean up module naming, should support `-` chars, possibly other chars
36 - [ ] Implement modmark as a source-to-source compiler in Racket ( "Real" implementation )
37 - [ ] Implement `import as` semantics for brevity
38 - [ ] Implement `import Module::MakeNoise::*` semantics for brevity
39 - [ ] Implement importing specific module revisions, ie: `import Module::MakeNoise::Wogglebug::Rev1`
40 - [ ] Standardize input/knob labeling semantics:
41
42 - Input: Foo
43 -- Position: [1,12]
44
45 - Knob: Foo
46 -- Position: [1,12]
47
48 # Currently both of above "compile", and work as expected, in the case where a
49 # module parameter has both a knob and an input. It may be better to only have one way?
50 - [ ] Develop libraries for as many modules as possible
51
52
53 <a id="org0463441"></a>
54
55 ## Purpose
56
57 In the past I've found it difficult to discuss discrete details of modular patches on the internet. This
58 arises, I believe, from the large amount of effort and time it takes to describe the intricacies of a modular
59 patch in long form plain English. This prototype language is an attempt to address that problem.
60
61 By specifying a concise syntax that favors brevity over absolute human-readability, the hope is to get more
62 modular synth users to document their patches and enable more knowledge sharing across the community.
63
64 I know of one other attempt to solve this problem: <https://github.com/SpektroAudio/Patchbook>
65
66 My problem with Patchbook is that it still requires a lot of "boilerplate", in that you have to specify
67 modules yourself. Modmark aims to offload this task by having the community describe modules in a Library format
68 (`.module` files) that can then be imported. In this way, we can specify a module *once* and then not have
69 to do that work again the next time we'd like to use it in a patch.
70
71
72 <a id="org004fef7"></a>
73
74 ## Syntax
75
76
77 <a id="orgb5658bc"></a>
78
79 ### A Module File
80
81 [Make Noise Maths](./module_lib/maths.module)
82
83
84 <a id="orgf298aea"></a>
85
86 ### A Patch
87
88 [Example Patch](./patches/example.modmark)