davideisinger.com

My personal website
Log | Files | Refs | README

empr-cl-epss77.txt (21533B)


      1 [1] logo [2]
      2 
      3   • [3]about
      4 
      5   • [4]signls
      6       □ [5]Overview
      7       □ [6]Installation
      8           ☆ [7]Linux & macOS
      9           ☆ [8]Windows
     10           ☆ [9]Build it yourself
     11       □ [10]Usage
     12           ☆ [11]Basic commands
     13           ☆ [12]Keyboard mapping
     14           ☆ [13]MIDI
     15       □ [14]Workflow
     16           ☆ [15]User Interface
     17           ☆ [16]Grid
     18           ☆ [17]Nodes
     19           ☆ [18]Signals
     20           ☆ [19]Parameters
     21           ☆ [20]Note parameters
     22           ☆ [21]CC parameters
     23           ☆ [22]Timing
     24           ☆ [23]Transposition
     25           ☆ [24]Randomization
     26           ☆ [25]Bank
     27       □ [26]Nodes reference
     28           ☆ [27] Bang
     29           ☆ [28] Euclid
     30           ☆ [29] Pass
     31           ☆ [30] Spread
     32           ☆ [31] Cycle
     33           ☆ [32] Dice
     34           ☆ [33] Toll
     35           ☆ [34] Zone
     36           ☆ [35] Hole
     37 
     38   • [36]sektron
     39 
     40 Overview
     41 
     42 • [37]source code • [38]report an issue
     43 
     44 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
     45 
     46 [39]Signls by emprcl
     47 
     48 
     49 
     50 Signls (pronounced signals) is a non-linear, generative MIDI sequencer designed
     51 for music composition and live performances, all within the terminal. It allows
     52 you to create complex, evolving musical patterns using a grid-based approach.
     53 You can place nodes on the grid, and these nodes can emit signals, relay them,
     54 or trigger MIDI notes. There are 9 different types of nodes to explore, each
     55 with its own unique behavior.
     56 
     57 With Signls, you can generate dynamic, generative music, meaning that the
     58 patterns evolve and change over time. It's designed to give you a powerful
     59 creative tool to build intricate sequences without being stuck in a rigid
     60 timeline or structure.
     61 
     62 It takes inspiration from [40]Orca and [41]Nodal.
     63 
     64 Features
     65 
     66   • Non-linear sequencing: unlike traditional sequencers, Signls doesn't force
     67     you into a single direction. Your sequences can move and shift in multiple
     68     ways, allowing for complex and unique arrangements.
     69   • Randomize everything: create evolving musical patterns that shift over
     70     time, adding depth and unpredictability to your compositions.
     71   • Live performance: designed to be used in real-time, making it a adequate
     72     tool for live performances where improvisation is key.
     73   • Keyboard first: Signls operates directly from your terminal, giving you
     74     control in a simple, lightweight environment, where everything is
     75     controllable via keyboard.
     76   • Cross-platform: runs on Linux, macOS, and Windows
     77 
     78 Installation
     79 
     80 Signls is available for Linux, macOS and Windows.
     81 
     82 [42]Download the last release for your platform.
     83 
     84 Linux & macOS
     85 
     86 In your terminal:
     87 
     88 # Extract files
     89 mkdir -p signls && tar -zxvf signls_VERSION_PLATFORM.tar.gz -C signls
     90 cd signls
     91 
     92 # Run signls
     93 ./signls
     94 
     95 Windows
     96 
     97     We recommend using [43]Windows Terminal with a good monospace font like 
     98     [44]Iosevka to display Signls correctly on Windows.
     99 
    100     Some specific Windows [45]bugs regarding unicode characters prevent us to
    101     display some UI elements (randomization indicator or non-empty bank slot)
    102     but it should not degrade the experience that much.
    103 
    104 Unzip the archive and, in the same directory, run:
    105 
    106 .\signls.exe
    107 
    108 Replace ./signls by .\signls.exe for every following commands.
    109 
    110 Build it yourself
    111 
    112 You can also [46]build it yourself if your want to.
    113 
    114 Usage
    115 
    116 Basic commands
    117 
    118 # Run signls
    119 ./signls
    120 
    121 # Display current version
    122 ./signls --version
    123 
    124 Hit ? to see all keybindings. esc to quit.
    125 
    126 Keyboard mapping
    127 
    128 Keys mapping is fully customizable. After running signls for the first time, a
    129 config.json is created. You can edit all the keys inside it.
    130 
    131 You can select one of the default keyboard layouts available:
    132 
    133 # QWERTY
    134 ./signls --keyboard qwerty
    135 
    136 # AZERTY
    137 ./signls --keyboard azerty
    138 
    139 # QWERTY MAC
    140 ./signls --keyboard qwerty-mac
    141 
    142 # AZERTY MAC
    143 ./signls --keyboard azerty-mac
    144 
    145 Default keybindings
    146 
    147 For qwerty keyboards, here's the default mapping:
    148 
    149   • space play or stop
    150   • tab show bank
    151   • 1 ... 9 add nodes
    152   • ↑ ↓ ← → move cursor
    153   • shift+↑ ↓ ← → multiple selection (or modify alt parameter mode in edit
    154     mode)
    155   • ctrl+↑ ↓ ← → modify selected node direction (modify parameter or alt
    156     parameter value)
    157   • . modify selected parameter
    158   • backspace remove selected nodes (or grid in bank)
    159   • enter edit selected nodes
    160   • m toggle selected nodes mute
    161   • M mute/unmute all selected nodes
    162   • / trigger selected node
    163   • - = modify tempo
    164   • ' ; modify root note
    165   • " : modify scale
    166   • ctrl+c x v copy, cut, paste selection
    167   • escape exit parameter edit or bank selection
    168   • f2 edit midi configuration
    169   • f10 fit grid to window
    170   • ? show help
    171   • ctrl+q quit
    172 
    173 Key binding reference
    174 
    175   • [47]qwerty
    176   • [48]qwerty mac
    177   • [49]azerty
    178   • [50]azerty mac
    179 
    180 MIDI
    181 
    182 Signls doesn't generate sound on its own, but it works seamlessly with MIDI
    183 software or hardware. You can connect it to your favorite synthesizers, virtual
    184 instruments, or any MIDI-compatible devices for live performances or
    185 production.
    186 
    187 On each [51]node, you can configure NoteOn and NoteOff messages, using [52]note
    188 parameters. Each node can also send up to 8 CC messages, using [53]CC
    189 parameters.
    190 
    191 Press the f2 to open the MIDI configuration menu, where you can adjust three
    192 parameters:
    193 
    194   • Clock: enable or disable clock send messages
    195   • Transport: enable or disable transport start and stop messages
    196   • Device: select the midi output device
    197 
    198 Use ← and → to navigate between the parameters, and modify their values with
    199 ctrl+↑ and ctrl+↓.
    200 
    201 On macOS, you might need to [54]enable the IAC driver if you're only using
    202 webmidi instruments.
    203 
    204 Some companion apps that receive MIDI for testing Signls:
    205 
    206   • [55]Webmidi synths
    207   • [56]Enfer ([57]github) works only on linux
    208   • [58]QSynth
    209 
    210 Workflow
    211 
    212 User Interface
    213 
    214 UI 1
    215 
    216  1. Grid: The [59]grid is where you place [60]nodes. Each nodes displays its
    217     type and emit/relay directions. Signals are displayed in white.
    218  2. Cursor: The cursor is the tool to place, select or edit nodes.
    219  3. Selection indicator: Shows the currently selected [61]nodes.
    220  4. Mode indicator: Shows the current mode - move, [62]edit or [63]bank.
    221  5. Selector position: Shows the current selector position.
    222  6. Grid size: Shows the current grid size. Useful to know if the grid is
    223     bigger than the current terminal window.
    224  7. Tempo: Shows the current [64]tempo in bpm (beats per minute).
    225  8. Play status: Shows if the grid is currently playing (▶) or stopped (■).
    226     Also shows the number of 1/16 notes since it started to play.
    227  9. Root key: Shows the current [65]root key.
    228 10. Scale: Shows the current [66]scale.
    229 11. Bank: Shows the currently selected grid in the [67]bank, and the name of
    230     the bank (which is the bank filename).
    231 12. Control zone: Shows either [68]grid informations and parameters (move
    232     mode), selected [69]node parameters (edit mode) or [70]bank grid slots (
    233     bank mode).
    234 
    235 Grid
    236 
    237 The grid serves as a canvas for your sequencing, where you control the flow of
    238 MIDI signals across various [71]nodes. You can start or stop the grid's
    239 underlying sequencer by pressing space.
    240 
    241 By default, the size of the grid adapts to your terminal size. If you increase
    242 the terminal window, the grid will expand accordingly. However, if you decrease
    243 the terminal size, the grid remains unchanged to prevent the accidental loss of
    244 nodes outside the visible bounds. You can still scroll through the grid even if
    245 the terminal is smaller.
    246 
    247 If you want to force the grid to resize and match the terminal (which may
    248 result in some nodes being deleted), you can press f10 to do so manually.
    249 
    250 Nodes
    251 
    252 Nodes can perform three main functions based on their type:
    253 
    254   • they can emit new signals
    255   • they can relay incoming signals to up to 4 directions
    256   • they can trigger MIDI messages
    257 
    258 To add nodes on the grid, move the cursor using the arrow keys and press keys 1
    259 to 9 to choose one of the [72]9 available node types.
    260 
    261 To remove nodes from the grid, move the cursor using the arrow keys and press
    262 backspace.
    263 
    264 You can manually trigger a node by using /.
    265 
    266 You can mute nodes to temporarily silence their behavior:
    267 
    268   • Press m to toggle mute on the selected nodes.
    269   • Press M to force mute sync across all selected nodes, ensuring they are all
    270     muted or unmuted together.
    271 
    272 This is useful for controlling which nodes are active during live performances
    273 or while experimenting with different parts of your sequence.
    274 
    275 You can easily manage nodes on the grid by copying, cutting, and pasting them
    276 using the usual key bindings:
    277 
    278   • ctrl+C to copy,
    279   • ctrl+X to cut
    280   • ctrl+V to paste.
    281 
    282 To move nodes in bulk, you can select multiple nodes by holding shift + ↑ ↓ ← →
    283 to define a selection area. This makes it easy to reposition or replicate parts
    284 of your sequence.
    285 
    286 Signals
    287 
    288 A key feature of each node is the direction in which it emits or relays signals
    289 . You can configure up to four directions: up, down, left, and right. To modify
    290 a node's directions, move the cursor to the desired node and press Ctrl + ↑ ↓ ←
    291 → to add or remove directions. The way a node uses these directions (one or
    292 multiple) depends on its specific behavior.
    293 
    294 directions
    295 
    296 Parameters
    297 
    298 Each node has adjustable parameters that you can edit to modify its behavior.
    299 To enter node editing mode, move the cursor to the node you want to modify and
    300 press enter. The available parameters will appear in the control bar at the
    301 bottom. You can navigate between parameters using ← → key and switch between
    302 parameter pages with using ↑ ↓ keys.
    303 
    304 To change a parameter value, press ctrl+↑ to increase or ctrl+↓ to decrease it.
    305 
    306 You can edit a parameter value precisely by pressing the . key. This opens a
    307 text input where you can type the value manually. Press enter to confirm the
    308 change.
    309 
    310 Each node parameter can have up to four alternative values:
    311 
    312   • Main 1 Ctrl+↑/↓: adjusts the main value
    313   • Main 2 Ctrl+←/→: adjusts a second value, often used for randomization
    314   • Alt 1 Shift+↑/↓: adjusts a third alternative value
    315   • Alt 2 Shift+←/→: adjusts a fourth alternative value
    316 
    317     We will refer to these as Main 1, Main 2, Alt 1, and Alt 2 for simplicity
    318 
    319 Each node (except "The Hole") shares five common MIDI parameters.
    320 
    321 UI 2
    322 
    323 Parameters are displayed in two parts if an alternative value (for example [73]
    324 randomization) is set:
    325 
    326  1. the actual value: here F5 for the key or 100 for the velocity
    327  2. the alternative value: here +8 for the key or -18 for the velocity
    328 
    329     You can edit multiple nodes at once by selecting them together.The common
    330     parameters for all selected nodes will be displayed, and any changes you
    331     make will apply to all of them simultaneously.
    332 
    333 Note parameters
    334 
    335 The first parameter page will display the note parameters.
    336 
    337 Key (key): key of the MIDI note
    338 
    339   • Value Range: A1 - G10
    340   • Main 1: key value for the note
    341   • Main 2: randomization range
    342   • Alt 1: unused
    343   • Alt 2: note modes (random | silent)
    344 
    345 Velocity (vel): intensity of the MIDI note
    346 
    347   • Value Range: 0 - 127
    348   • Main 1: velocity value for the note
    349   • Main 2: randomization range
    350   • Alt 1: unused
    351   • Alt 2: unused
    352 
    353 Length (len): duration of the MIDI note.
    354 
    355   • Value Range: 1/64 - inf
    356   • Main 1: length value of the note
    357   • Main 2: randomization range
    358   • Alt 1: unused
    359   • Alt 2: unused
    360 
    361 Channel (cha): MIDI channel
    362 
    363   • Value Range: 1 - 16
    364   • Main 1: channel value
    365   • Main 2: randomization range
    366   • Alt 1: unused
    367   • Alt 2: unused
    368 
    369 Probability (prb): the chance of triggering the MIDI note
    370 
    371   • Value Range: 0 - 100
    372   • Main 1: probability value
    373   • Main 2: unused
    374   • Alt 1: unused
    375   • Alt 2: unused
    376 
    377 CC parameters
    378 
    379 On the second parameter page, you can configure up to 8 MIDI CC messages which
    380 will be sent alongside the note messages.
    381 
    382 CC (cc): the control change message
    383 
    384   • Value Range: 0 - 127
    385   • Main 1: cc value
    386   • Main 2: randomization range
    387   • Alt 1: cc number (only for cc mode)
    388   • Alt 2: message mode - disabled, cc, after touch, pitch bend, program change
    389 
    390 Timing
    391 
    392 Each position on the grid represents a 1/16 note. You can adjust the tempo (in
    393 beats per minute, or BPM) to control how fast signals move across the grid. To
    394 modify the tempo, simply press = to increase the BPM or - to decrease it,
    395 allowing you to set the pace of your sequence in real time.
    396 
    397 Transposition
    398 
    399 The MIDI notes assigned to each node are fixed. However, when the root key or
    400 scale of the grid is changed, these notes are transposed according to the new
    401 root key and scale. This means the original note values are shifted in relation
    402 to the grid's updated musical context, allowing you to easily adjust the
    403 overall harmony without manually changing the notes on each node. The
    404 transposition happens relative to the set root and scale, providing a flexible
    405 way to experiment with different keys and tonalities.
    406 
    407 To modify the root key and scale, use:
    408 
    409   • ' ; to decrease and increase the root key
    410   • " : to cycle through the available scales
    411 
    412 Available scales include the chromatic scale, the 7 diatonic modes, a few
    413 pentatonic scales and a tetratonic scale:
    414 
    415   • chromatic
    416   • ionian
    417   • dorian
    418   • phrygian
    419   • lydian
    420   • mixolydian
    421   • aeolian
    422   • locrian
    423   • pentatonic major
    424   • pentatonic minor
    425   • hirajoshi
    426   • iwato
    427   • tetratonic
    428 
    429 Randomization
    430 
    431 You can apply randomization to most node parameters. When editing
    432 randomization, you can specify positive or negative randomization values.
    433 
    434 For example, if you set the velocity to 80+5, the random value will be picked
    435 between 80 and 85. If you set the velocity to 80-5, the random value will be
    436 picked between 75 and 80. This allows for subtle variations in your sequences,
    437 adding a layer of unpredictability while keeping control over the range of
    438 changes.
    439 
    440     Randomized node keys will always conform to the current [74]scale.
    441 
    442 Bank
    443 
    444 You manage your projects using a bank. When you start the program, you can
    445 provide a bank JSON file, or if none is provided, a default file (default.json)
    446 will be created or loaded automatically. Each bank can store up to 32 grids.
    447 
    448 ./signls --bank my-grids.json
    449 
    450 The grids are saved automatically whenever you make changes or exit the
    451 program, so you never have to worry about losing progress.
    452 
    453 To load a specific grid from the bank, press tab to switch to the bank view,
    454 then use the arrow keys to select a grid slot and press enter to load it. This
    455 allows you to quickly swap between different configurations during live
    456 performances or while working on different projects.
    457 
    458 UI 3
    459 
    460 The ̠character under the grid number indicates that the grid slot is not empty.
    461 
    462 Like nodes, you can copy, cut and paste grids in the bank.
    463 
    464 Nodes reference
    465 
    466 Here is a reference guide for all the node types available in Signls. Each node
    467 has common [75]note parameters (except for the Hole) like key, velocity,
    468 length, channel, and probability. Some nodes also have extra parameters that
    469 give them unique behavior.
    470 
    471 bang Bang
    472 
    473   • Description: emits a signal when the grid starts playing and relays signals
    474     on all configured directions
    475   • Key binding: 1
    476   • Extra Parameters: none
    477 
    478 euclid Euclid
    479 
    480   • Description: emits signals based on the euclidean rhythm algorithm,
    481     ensuring an even distribution of steps across the grid. Relays signals on
    482     all configured directions
    483   • Key binding: 2
    484   • Extra Parameters:
    485       □ Steps (stp): number of total steps in the pattern
    486           ☆ Value Range: 1 - 128
    487           ☆ Main 1: steps value
    488           ☆ Main 2: randomization range
    489           ☆ Alt 1: unused
    490           ☆ Alt 2: unused
    491       □ Triggers (trg): number of signals to emit within the total steps
    492           ☆ Value Range: 1 - 128
    493           ☆ Main 1: triggers value
    494           ☆ Main 2: randomization range
    495           ☆ Alt 1: unused
    496           ☆ Alt 2: unused
    497       □ Offset (off): shifts the start point of the pattern
    498           ☆ Value Range: 0 - 128
    499           ☆ Main 1: offset value
    500           ☆ Main 2: randomization range
    501           ☆ Alt 1: unused
    502           ☆ Alt 2: unused
    503 
    504 pass Pass
    505 
    506   • Description: passes signals through without affecting their direction. No
    507     direction configuration is possible
    508   • Key binding: 3
    509   • Extra Parameters: none
    510 
    511 spread Spread
    512 
    513   • Description: relays signals on all configured directions, distributing them
    514     evenly
    515   • Key binding: 4
    516   • Extra Parameters: None
    517 
    518 cycle Cycle
    519 
    520   • Description: relays signals in a clockwise direction, starting from the
    521     "up" direction, one at a time
    522   • Key binding: 5
    523   • Extra Parameters: none
    524 
    525 dice Dice
    526 
    527   • Description: relays signals in a randomly selected direction each time it
    528     is triggered
    529   • Key binding: 6
    530   • Extra Parameters: none
    531 
    532 toll Toll
    533 
    534   • Description: relays signals on all configured directions, but only after
    535     being triggered a specific number of times
    536   • Key binding: 7
    537   • Extra Parameters:
    538       □ Threshold (thd): the number of times the node must be triggered before
    539         it relays a signal
    540           ☆ Value Range: 1 - no upper limit
    541           ☆ Main 1: offset value
    542           ☆ Main 2: randomization range
    543           ☆ Alt 1: unused
    544           ☆ Alt 2: unused
    545 
    546 zone Zone
    547 
    548   • Description: relays signals on all configured directions and immediately
    549     propagates the trigger to all neighboring nodes, making it ideal for
    550     triggering chords
    551   • Key binding: 8
    552   • Extra Parameters: none
    553 
    554 hole Hole
    555 
    556   • Description: instantly teleports the signal to a specified location on the
    557     grid without triggering any notes
    558   • Key binding: 9
    559   • Extra Parameters:
    560       □ Destination (dest): The coordinate of the destination
    561           ☆ Value Range: 1 - grid width/height
    562           ☆ Main 1: y-coordinate value of the destination
    563           ☆ Main 2: x-coordinate value of the destination
    564           ☆ Alt 1: randomization range for the y-coordinate
    565           ☆ Alt 2: randomization range for the y-coordinate
    566 
    567 
    568 References:
    569 
    570 [1] https://empr.cl/
    571 [2] javascript:void(0);
    572 [3] https://empr.cl/
    573 [4] https://empr.cl/signls/
    574 [5] https://empr.cl/signls/#overview
    575 [6] https://empr.cl/signls/#installation
    576 [7] https://empr.cl/signls/#linux-macos
    577 [8] https://empr.cl/signls/#windows
    578 [9] https://empr.cl/signls/#build-it-yourself
    579 [10] https://empr.cl/signls/#usage
    580 [11] https://empr.cl/signls/#basic-commands
    581 [12] https://empr.cl/signls/#keyboard-mapping
    582 [13] https://empr.cl/signls/#midi
    583 [14] https://empr.cl/signls/#workflow
    584 [15] https://empr.cl/signls/#user-interface
    585 [16] https://empr.cl/signls/#grid
    586 [17] https://empr.cl/signls/#nodes
    587 [18] https://empr.cl/signls/#signals
    588 [19] https://empr.cl/signls/#parameters
    589 [20] https://empr.cl/signls/#note-parameters
    590 [21] https://empr.cl/signls/#cc-parameters
    591 [22] https://empr.cl/signls/#timing
    592 [23] https://empr.cl/signls/#transposition
    593 [24] https://empr.cl/signls/#randomization
    594 [25] https://empr.cl/signls/#bank
    595 [26] https://empr.cl/signls/#nodes-reference
    596 [27] https://empr.cl/signls/#bang
    597 [28] https://empr.cl/signls/#euclid
    598 [29] https://empr.cl/signls/#pass
    599 [30] https://empr.cl/signls/#spread
    600 [31] https://empr.cl/signls/#cycle
    601 [32] https://empr.cl/signls/#dice
    602 [33] https://empr.cl/signls/#toll
    603 [34] https://empr.cl/signls/#zone
    604 [35] https://empr.cl/signls/#hole
    605 [36] https://empr.cl/sektron/
    606 [37] https://github.com/emprcl/signls
    607 [38] https://github.com/emprcl/signls/issues/new
    608 [39] https://emprcl.itch.io/signls
    609 [40] https://100r.co/site/orca.html
    610 [41] https://nodalmusic.com/
    611 [42] https://emprcl.itch.io/signls
    612 [43] https://apps.microsoft.com/detail/9n0dx20hk701
    613 [44] https://typeof.net/Iosevka/
    614 [45] https://github.com/emprcl/signls/issues/5
    615 [46] https://github.com/emprcl/signls?tab=readme-ov-file#build-it-yourself
    616 [47] https://github.com/emprcl/signls/blob/7d9c8016e99fc9c973f61764fb9801d92eee21db/filesystem/keymap.go#L183
    617 [48] https://github.com/emprcl/signls/blob/7d9c8016e99fc9c973f61764fb9801d92eee21db/filesystem/keymap.go#L244
    618 [49] https://github.com/emprcl/signls/blob/7d9c8016e99fc9c973f61764fb9801d92eee21db/filesystem/keymap.go#L62
    619 [50] https://github.com/emprcl/signls/blob/7d9c8016e99fc9c973f61764fb9801d92eee21db/filesystem/keymap.go#L123
    620 [51] https://empr.cl/signls/#nodes
    621 [52] https://empr.cl/signls/#note-parameters
    622 [53] https://empr.cl/signls/#cc-parameters
    623 [54] https://discussions.apple.com/thread/8096575?answerId=32319872022&sortBy=rank#32319872022
    624 [55] https://synth.playtronica.com/
    625 [56] https://neauoire.github.io/Enfer/
    626 [57] https://github.com/neauoire/Enfer
    627 [58] https://qsynth.sourceforge.io/
    628 [59] https://empr.cl/signls/#grid
    629 [60] https://empr.cl/signls/#nodes
    630 [61] https://empr.cl/signls/#nodes
    631 [62] https://empr.cl/signls/#parameters
    632 [63] https://empr.cl/signls/#bank
    633 [64] https://empr.cl/signls/#timing
    634 [65] https://empr.cl/signls/#transposition
    635 [66] https://empr.cl/signls/#transposition
    636 [67] https://empr.cl/signls/#bank
    637 [68] https://empr.cl/signls/#grid
    638 [69] https://empr.cl/signls/#parameters
    639 [70] https://empr.cl/signls/#bank
    640 [71] https://empr.cl/signls/#nodes
    641 [72] https://empr.cl/signls/#nodes-reference
    642 [73] https://empr.cl/signls/#randomization
    643 [74] https://empr.cl/signls/#transposition
    644 [75] https://empr.cl/signls/#parameters