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