From 148bee238901b055eb1ca6db01433b0ffecc98d7 Mon Sep 17 00:00:00 2001 From: nebogeo Date: Mon, 25 Nov 2002 21:54:58 +0000 Subject: [PATCH] New/fixed examples, README/CHANGES updated, options crash workaround + other minor bits. --- CHANGES | 9 + Examples/BandpassShaper.ssm | 54 ++- Examples/Feedback.ssm | 30 +- Examples/FourOsc.ssm | 105 ++--- Examples/Polyphonic.ssm | 82 ++-- Examples/Random.ssm | 30 +- Examples/Sequence.ssm | 26 +- Examples/SpiralSynth.ssm | 96 ++--- Examples/Tutorial1-FirstThing.ssm | 104 +++-- Examples/Tutorial3-SubtractiveSynth.ssm | 76 ++-- Examples/Tutorial4-AdditiveSynth.ssm | 63 ++- Examples/Tutorial5-Matrix&Sampler.ssm | 99 ----- Examples/Tutorial5-MatrixSampler.ssm | 76 ++++ .../PoshSampler3_0.wav | Bin 0 -> 24940 bytes .../PoshSampler3_1.wav | Bin 0 -> 3548 bytes .../PoshSampler3_2.wav | Bin 0 -> 14588 bytes .../PoshSampler3_3.wav | Bin 0 -> 16496 bytes Examples/Tutorial7-LADSPA.ssm | 136 ++---- Examples/Tutorial8-AdvSequencing.ssm | 324 --------------- Examples/soil_and_the_crop.ssm | 392 ++++++++++++++++++ README | 40 +- SpiralSynthModular.C | 32 +- SpiralSynthModularInfo.C | 2 +- 23 files changed, 891 insertions(+), 885 deletions(-) delete mode 100644 Examples/Tutorial5-Matrix&Sampler.ssm create mode 100644 Examples/Tutorial5-MatrixSampler.ssm create mode 100644 Examples/Tutorial5-MatrixSampler.ssm_files/PoshSampler3_0.wav create mode 100644 Examples/Tutorial5-MatrixSampler.ssm_files/PoshSampler3_1.wav create mode 100644 Examples/Tutorial5-MatrixSampler.ssm_files/PoshSampler3_2.wav create mode 100644 Examples/Tutorial5-MatrixSampler.ssm_files/PoshSampler3_3.wav delete mode 100644 Examples/Tutorial8-AdvSequencing.ssm create mode 100644 Examples/soil_and_the_crop.ssm diff --git a/CHANGES b/CHANGES index 00d6088..c220f4c 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,12 @@ +Release 0.2.0 + +App now multithreaded, and plugins use a new api to support this +Jack support fully functional +-Realtime commandline option (as root) runs ssm audio in SCHED_FIFO +LADSPA plugin much improved with built in GUI generator +App help added with Helptext for most of the plugins +Numerous fixes, additions and GUI improvements + Release 0.1.1 Main app changes: diff --git a/Examples/BandpassShaper.ssm b/Examples/BandpassShaper.ssm index dc8919d..ee8d19b 100644 --- a/Examples/BandpassShaper.ssm +++ b/Examples/BandpassShaper.ssm @@ -1,109 +1,107 @@ SpiralSynthModular File Ver 3 -253 149 724 420 253 501 724 420 +0 0 700 300 0 300 700 300 SectionList 23 Device 0 Plugin 0 -873 153 0 76 47 +873 455 0 76 47 Device 1 Plugin 13 -523 78 0 76 47 +523 380 0 76 47 1 1 0.36389 Device 2 Plugin 13 -522 150 0 76 47 +522 452 0 76 47 1 1 0.38383 Device 3 Plugin 13 -525 223 0 76 47 +525 525 0 76 47 1 1 0.36274 Device 7 Plugin 6 -420 102 0 0 0 +420 404 0 0 0 Device 8 Plugin 6 -455 189 0 0 0 +455 491 0 0 0 Device 12 Plugin 7 -611 156 0 76 47 +611 458 0 76 47 1 1 1 1 1 Device 13 Plugin 8 -783 153 0 76 47 +783 455 0 76 47 1 1 0.5 1 0.5 1 0.5 1 0.5 Device 16 Plugin 1 -697 153 1 445 67 +697 455 1 445 67 Device 17 Plugin 23 -276 198 1 186 73 +276 500 1 186 73 1 0 -3 0.0258332 1 Device 18 Plugin 23 -340 262 1 180 205 +340 564 1 180 205 1 0 -3 0.00586802 1 Device 19 Plugin 23 -410 331 1 432 205 +410 633 1 432 205 1 0 -3 0.0843751 1 Device 20 Plugin 3 -184 100 1 103 83 -3 1 -0.42 1 -1 -4 -Name -1 1 0.71 +184 402 1 103 83 +3 1 0.71 1 +1 4 Name -1 1 0.71 Device 21 Plugin 23 -267 98 0 76 47 +267 400 0 76 47 1 0 -2 0.187005 1 Device 22 Plugin 23 -337 100 0 76 47 +337 402 0 76 47 1 2 -3 0.325557 1 Device 23 Plugin -1 -272 16 0 0 0 +272 318 0 0 0 1 53 This layout generates a signal with lots of harmonics Device 24 Plugin -1 -278 30 0 0 0 +278 332 0 0 0 1 55 and filters the signal with three bandpass moog filters Device 25 Plugin -1 -196 78 0 0 0 +196 380 0 0 0 1 26 Change this to alter pitch Device 26 Plugin -1 -665 98 0 0 0 +665 400 0 0 0 1 43 Have a look at the waveform generated in an Device 27 Plugin -1 -667 111 0 0 0 +667 413 0 0 0 1 47 audio editor such as audacity, that can display Device 28 Plugin -1 -625 125 0 0 0 +625 427 0 0 0 1 27 the frequencies as colours. Device 29 Plugin -1 -248 330 0 0 0 +248 632 0 0 0 1 39 These oscillators change the modulation Device 30 Plugin -1 -202 345 0 0 0 +202 647 0 0 0 1 21 of the three filters. diff --git a/Examples/Feedback.ssm b/Examples/Feedback.ssm index 72b1604..08dc57f 100644 --- a/Examples/Feedback.ssm +++ b/Examples/Feedback.ssm @@ -1,67 +1,67 @@ SpiralSynthModular File Ver 3 -314 503 724 461 238 186 724 420 +0 0 700 300 0 300 700 300 SectionList 14 Device 0 Plugin 0 -612 241 0 100 100 +612 513 0 100 100 Device 2 Plugin 4 -348 109 1 95 160 +348 381 1 95 160 1 2 2 0.0149791 0.53 0 0.019 0.299 Device 4 Plugin 6 -240 254 0 0 0 +240 526 0 0 0 Device 5 Plugin 1 -419 246 1 349 157 +419 518 1 349 157 Device 7 Plugin 9 -276 109 1 447 33 +276 381 1 447 33 1 0.1132 0.0377 Device 8 Plugin 9 -420 109 1 448 291 +420 381 1 448 291 1 1.1698 0.566 Device 12 Plugin 8 -520 239 0 100 100 +520 511 0 100 100 1 0.27 0.5 0.8 0.5 1 0.5 1 0.5 Device 13 Plugin -1 -226 36 0 0 0 +226 308 0 0 0 1 40 This uses SSM's ability to feedback data Device 14 Plugin -1 -198 49 0 0 0 +198 321 0 0 0 1 27 from one plugin to another. Device 15 Plugin -1 -208 200 0 0 0 +208 472 0 0 0 1 37 This is where the signal is fed back. Device 16 Plugin -1 -232 63 0 0 0 +232 335 0 0 0 1 41 Feedback generates quite a chaotic sound, Device 17 Plugin -1 -221 76 0 0 0 +221 348 0 0 0 1 36 try changing some of the parameters. Device 18 Plugin 23 -200 109 1 95 47 +200 381 1 95 47 1 0 -3 0.158165 1 Device 19 Plugin 23 -491 108 1 92 274 +491 380 1 92 274 1 0 -1 0.202252 1 10 diff --git a/Examples/FourOsc.ssm b/Examples/FourOsc.ssm index a0ee687..65109bf 100644 --- a/Examples/FourOsc.ssm +++ b/Examples/FourOsc.ssm @@ -1,121 +1,126 @@ SpiralSynthModular File Ver 3 -134 396 750 484 601 192 724 420 +0 0 700 300 0 300 700 300 SectionList -21 +22 Device 0 Plugin 4 -443 77 1 84 7 +443 365 1 84 7 1 2 0 1.47687 0 0 0 1 Device 1 Plugin 4 -445 11 1 84 119 +445 299 1 84 119 1 2 -1 0.960617 0 0 1.17928e-38 1 Device 2 Plugin 4 -442 144 1 84 232 +442 432 1 84 232 1 2 0 0.733381 0.23 0 2.2772e-38 1 Device 3 Plugin 4 -442 212 1 84 345 +442 500 1 84 345 1 2 0 0.983196 0.87 0 0 1 Device 4 Plugin 8 -729 107 0 100 100 +729 395 0 100 100 1 1 0.5 1 0.5 1 0.5 1 0.5 Device 5 Plugin 7 -593 106 0 100 100 +593 394 0 100 100 1 1 1 1 1 Device 6 Plugin 13 -662 107 1 539 157 +662 395 1 539 157 1 0.0943 0.07142 Device 8 Plugin 0 -799 105 0 100 100 - - -Device 9 Plugin 2 -157 127 0 100 100 -2 0 0 0 +799 393 0 100 100 Device 10 Plugin 6 -282 118 0 0 0 +282 406 0 0 0 Device 13 Plugin 6 -202 241 0 0 0 +202 529 0 0 0 Device 14 Plugin 5 -442 281 1 529 22 +442 569 1 529 22 1 0.3844 0.1156 0.91 2.1609 0.5 0.01 Device 15 Plugin 6 -282 186 0 0 0 +282 474 0 0 0 Device 18 Plugin 5 -513 214 1 331 345 +513 502 1 331 345 1 0.8281 3.2761 0 0 0.5 0.01 Device 19 Plugin 5 -513 145 1 331 234 +513 433 1 331 234 1 0.6241 0.3249 0 0 0.5 0.01 Device 20 Plugin 5 -512 79 1 330 122 +512 367 1 330 122 1 0.7225 1.8496 0 1 0.5 0.01 Device 21 Plugin 5 -514 11 1 332 9 +514 299 1 332 9 1 0.0529 2.6896 0 0 0.5 0.01 Device 22 Plugin 7 -512 284 1 417 208 +512 572 1 417 208 1 1.47 0.07 1 1 Device 24 Plugin -1 -216 36 0 0 0 +216 324 0 0 0 1 42 A fairly complicated synth, 4 oscillators, Device 25 Plugin -1 -248 48 0 0 0 +248 336 0 0 0 1 53 with an extra envelope and LFO modulating the filter. Device 26 Plugin 23 -446 347 1 486 344 +446 635 1 486 344 1 0 0 0.457092 1 +Device 27 Plugin 40 +197 430 0 200 50 +0 + + +Device 28 Plugin -1 +224 361 0 0 0 +1 9 Hit keys! + + 27 5 5 0 6 6 0 4 4 0 8 7 0 4 4 1 8 7 1 -9 8 0 10 9 0 -9 8 1 13 10 0 6 6 0 4 4 0 -1 1 0 21 16 1 -0 0 0 20 15 1 -2 2 0 19 14 1 -3 3 0 18 13 1 -13 10 0 15 12 0 -21 16 1 5 5 0 -20 15 1 5 5 1 -19 14 1 5 5 2 -18 13 1 5 5 3 -14 11 0 22 17 0 -13 10 1 14 11 0 -22 17 0 6 6 1 -15 12 0 21 16 0 -15 12 1 20 15 0 -15 12 2 19 14 0 -15 12 3 18 13 0 -10 9 0 1 1 0 -10 9 1 0 0 0 -10 9 2 2 2 0 -10 9 3 3 3 0 -26 20 0 22 17 1 +1 1 0 21 15 1 +0 0 0 20 14 1 +2 2 0 19 13 1 +3 3 0 18 12 1 +13 9 0 15 11 0 +21 15 1 5 5 0 +20 14 1 5 5 1 +19 13 1 5 5 2 +18 12 1 5 5 3 +14 10 0 22 16 0 +13 9 1 14 10 0 +22 16 0 6 6 1 +15 11 0 21 15 0 +15 11 1 20 14 0 +15 11 2 19 13 0 +15 11 3 18 12 0 +10 8 0 1 1 0 +10 8 1 0 0 0 +10 8 2 2 2 0 +10 8 3 3 3 0 +26 19 0 22 16 1 +27 20 0 10 8 0 +27 20 1 13 9 0 diff --git a/Examples/Polyphonic.ssm b/Examples/Polyphonic.ssm index 9f189b4..39918c8 100644 --- a/Examples/Polyphonic.ssm +++ b/Examples/Polyphonic.ssm @@ -1,96 +1,96 @@ SpiralSynthModular File Ver 3 -283 72 724 482 284 586 724 420 +0 0 700 300 0 300 700 300 SectionList 16 Device 0 Plugin 86 -279 121 0 0 0 - - -Device 1 Plugin 2 -205 117 0 36 100 -2 0 0 0 +279 393 0 0 0 Device 2 Plugin 23 -372 242 1 97 350 +372 514 1 97 350 1 0 0 1 1 Device 3 Plugin 23 -373 51 1 98 15 +373 323 1 98 15 1 0 0 1 1 Device 4 Plugin 23 -372 114 1 97 127 +372 386 1 97 127 1 0 0 1 1 Device 5 Plugin 23 -373 179 1 97 238 +373 451 1 97 238 1 0 0 1 1 Device 6 Plugin 5 -439 245 1 344 349 +439 517 1 344 349 1 0 0.5 1 1 0.5 0.01 Device 7 Plugin 5 -439 181 1 344 237 +439 453 1 344 237 1 0 0.5 1 1 0.5 0.01 Device 8 Plugin 5 -439 115 1 344 126 +439 387 1 344 126 1 0 0.5 1 1 0.5 0.01 Device 9 Plugin 5 -441 52 1 344 15 +441 324 1 344 15 1 0 0.5 1 1 0.5 0.01 Device 10 Plugin 8 -515 125 1 491 147 +515 397 1 491 147 1 1 0.5 1 0.5 1 0.5 1 0.5 Device 11 Plugin 0 -580 139 0 36 100 +580 411 0 36 100 Device 12 Plugin -1 -227 29 0 0 0 +227 301 0 0 0 1 48 This patch uses the distributor plugin to create Device 13 Plugin -1 -215 44 0 0 0 +215 316 0 0 0 1 24 a polyphonic synthesizer Device 15 Plugin -1 -225 301 0 0 0 +225 573 0 0 0 1 46 The distributor sends each note recieved to a Device 18 Plugin -1 -237 317 0 0 0 +237 589 0 0 0 1 51 different identical wavetable/envelope synth voice. +Device 20 Plugin 40 +198 393 0 200 50 +0 + + 20 -1 1 0 0 0 0 -1 1 1 0 0 1 -10 10 0 11 11 0 -10 10 1 11 11 1 -0 0 0 3 3 0 -0 0 2 4 4 0 -0 0 4 5 5 0 -0 0 6 2 2 0 -3 3 0 9 9 1 -4 4 0 8 8 1 -5 5 0 7 7 1 -2 2 0 6 6 1 -0 0 1 9 9 0 -0 0 3 8 8 0 -0 0 5 7 7 0 -0 0 7 6 6 0 -6 6 1 10 10 3 -9 9 1 10 10 0 -8 8 1 10 10 1 -7 7 1 10 10 2 +10 9 0 11 10 0 +10 9 1 11 10 1 +0 0 0 3 2 0 +0 0 2 4 3 0 +0 0 4 5 4 0 +0 0 6 2 1 0 +3 2 0 9 8 1 +4 3 0 8 7 1 +5 4 0 7 6 1 +2 1 0 6 5 1 +0 0 1 9 8 0 +0 0 3 8 7 0 +0 0 5 7 6 0 +0 0 7 6 5 0 +6 5 1 10 9 3 +9 8 1 10 9 0 +8 7 1 10 9 1 +7 6 1 10 9 2 +20 15 0 0 0 0 +20 15 1 0 0 1 diff --git a/Examples/Random.ssm b/Examples/Random.ssm index 9928ebd..97d4a7a 100644 --- a/Examples/Random.ssm +++ b/Examples/Random.ssm @@ -1,59 +1,59 @@ SpiralSynthModular File Ver 3 -259 103 724 420 362 504 906 420 +0 0 700 300 0 300 700 300 SectionList 13 Device 3 Plugin 0 -772 162 0 100 100 +772 402 0 100 116 Device 5 Plugin 5 -560 161 1 530 87 +560 401 1 530 103 1 0.0289 0.3249 0 0 0.51 0 Device 7 Plugin 8 -702 162 0 100 100 +702 402 0 100 116 1 1 0.5 1 0.5 1 0.5 1 0.5 Device 9 Plugin 14 -631 162 1 376 21 +631 402 1 376 37 1 0.396 0.62 Device 12 Plugin 13 -491 162 1 380 141 +491 402 1 380 157 1 1 0.43934 Device 20 Plugin 4 -217 68 1 100 100 +217 308 1 109 351 1 3 -3 0.119661 0.5 0 2.98023e-09 1 Device 25 Plugin -1 -485 102 0 0 0 -1 37 A design that generates random events +485 342 0 0 0 +1 36 A patch that generates random events Device 26 Plugin 51 -327 104 0 0 0 +327 344 0 0 0 Device 27 Plugin 23 -152 160 1 99 16 +152 400 1 108 17 1 0 1 0.0326008 1 Device 28 Plugin 6 -231 160 0 0 0 +231 400 0 0 0 Device 29 Plugin 23 -419 161 1 99 138 +419 401 1 108 128 1 1 -3 0.933262 1 Device 30 Plugin 4 -217 251 1 100 100 +217 491 1 108 239 1 3 0 1 0.5 0 1.70555e-38 1 Device 31 Plugin 51 -328 218 0 0 0 +328 458 0 0 0 14 diff --git a/Examples/Sequence.ssm b/Examples/Sequence.ssm index a6ae4ec..dda0d6b 100644 --- a/Examples/Sequence.ssm +++ b/Examples/Sequence.ssm @@ -1,13 +1,13 @@ SpiralSynthModular File Ver 3 -314 503 724 461 238 186 724 420 +0 0 700 300 0 300 700 300 SectionList 10 Device 0 Plugin 18 -159 82 1 111 149 -2 0 0.0459186 21 1 0 +159 354 1 111 133 +3 0 0.0640363 8 1 0 32 6.6 3 -1 1 7 1 13 1 15 1 19 1 23 1 25 1 29 1 30 3 0 4 2 4 6 4 10 4 12 4 14 4 18 4 20 4 24 4 28 4 31 6 4 11 8 11 16 11 22 11 26 11 -1 32 1 0 +1 1 1 7 1 1 13 1 1 15 1 1 19 1 1 23 1 1 25 1 1 29 1 1 30 3 1 0 4 1 2 4 1 6 4 1 10 4 1 12 4 1 14 4 1 18 4 1 20 4 1 24 4 1 28 4 1 31 6 1 4 11 1 8 11 1 16 11 1 22 11 1 26 11 1 -1 32 1 0 -1 32 1 0 -1 32 1 0 -1 32 1 0 @@ -25,39 +25,39 @@ Device 0 Plugin 18 -1 Device 1 Plugin 4 -252 59 1 119 34 +252 331 1 119 18 1 2 1 1 0.21 0 nan 1 Device 2 Plugin 0 -629 79 0 100 100 +629 351 0 100 84 Device 3 Plugin 8 -557 79 0 100 100 +557 351 0 100 84 1 0.39 0 0.36 1 1 0.5 1 0.5 Device 4 Plugin 14 -472 51 0 100 100 +472 323 0 100 84 1 0.321 0.31 Device 5 Plugin 13 -330 83 1 382 35 +330 355 1 382 19 1 0 0.37002 Device 7 Plugin 5 -252 128 1 512 36 +252 400 1 512 20 1 0.0121 0.16 0 0 0.92 0 Device 8 Plugin 6 -403 83 0 0 0 +403 355 0 0 0 Device 9 Plugin 14 -473 119 0 100 100 +473 391 0 100 84 1 0.34 0.31 Device 11 Plugin -1 -396 224 0 0 0 +396 496 0 0 0 1 51 Using the Matrix plugin to create a robotic melody. diff --git a/Examples/SpiralSynth.ssm b/Examples/SpiralSynth.ssm index f497c3e..07d1f3c 100644 --- a/Examples/SpiralSynth.ssm +++ b/Examples/SpiralSynth.ssm @@ -1,109 +1,109 @@ SpiralSynthModular File Ver 3 -129 183 990 413 500 456 724 420 +0 0 700 300 0 300 700 300 SectionList 19 -Device 0 Plugin 2 -144 177 0 103 22 -2 0 0 0 - - Device 1 Plugin 4 -377 215 0 101 247 +416 494 0 458 -31 1 2 -1 1 0 0 0 1 Device 2 Plugin 4 -375 147 0 103 134 +414 426 0 460 -144 1 2 0 0.992771 0 0 0 1 Device 3 Plugin 4 -375 79 0 103 20 +414 358 0 460 -258 1 2 1 1 0.5 0 0 1 Device 4 Plugin 6 -306 81 0 0 0 +345 360 0 0 0 Device 6 Plugin 7 -519 149 0 500 124 +558 428 0 857 -154 1 0.77 0.67 0.31 1 Device 7 Plugin 13 -591 148 0 495 11 +630 427 0 852 -267 1 0.6981 0.34483 Device 8 Plugin 5 -446 215 0 350 248 +485 494 0 707 -30 1 0 0.9216 0.45 1 0.42 0.01 Device 9 Plugin 5 -447 147 0 350 134 +486 426 0 707 -144 1 0 0.3844 0.08 1 0.5 0.01 Device 10 Plugin 5 -447 80 0 351 19 +486 359 0 708 -259 1 0 0.9216 1 1.4161 0.28 0.01 Device 11 Plugin 6 -249 178 0 0 0 +288 457 0 0 0 Device 13 Plugin 5 -517 213 0 604 130 +556 492 0 961 -148 1 0.9216 0.2601 0 3.0625 0.6 0.01 Device 15 Plugin 14 -662 149 0 618 11 +701 428 0 975 -267 1 0.377 0.39 Device 17 Plugin 8 -804 151 0 103 22 +843 430 0 460 -256 1 1 0.5 1 0.5 1 0.5 1 0.5 Device 18 Plugin 0 -876 149 0 751 11 +915 428 0 1108 -267 Device 19 Plugin 4 -305 12 0 720 256 +344 291 0 1077 -22 1 2 -3 0.0167674 0.5 0 0 1 Device 20 Plugin 1 -733 150 0 496 252 +772 429 0 853 -26 Device 21 Plugin 20 -234 83 0 103 22 +273 362 0 460 -256 1 0.114 0.151 Device 22 Plugin -1 -367 282 0 0 0 +406 561 0 0 0 1 63 SpiralSynth, with a moog filter. (and stuck in monophonic mode) +Device 23 Plugin 40 +178 425 0 200 50 +0 + + 24 -4 4 0 3 3 0 -0 0 1 11 10 0 -3 3 0 10 9 1 -2 2 0 9 8 1 -1 1 0 8 7 1 -8 7 1 6 5 2 -9 8 1 6 5 1 -10 9 1 6 5 0 -6 5 0 7 6 0 -13 11 0 7 6 1 -7 6 0 15 12 0 -17 13 0 18 14 0 -17 13 1 18 14 1 -19 15 0 3 3 1 -15 12 0 20 16 0 -20 16 0 17 13 0 -21 17 0 4 4 0 -0 0 0 21 17 0 -4 4 1 2 2 0 -4 4 2 1 1 0 -11 10 0 10 9 0 -11 10 1 9 8 0 -11 10 2 8 7 0 -11 10 3 13 11 0 +4 3 0 3 2 0 +3 2 0 10 8 1 +2 1 0 9 7 1 +1 0 0 8 6 1 +8 6 1 6 4 2 +9 7 1 6 4 1 +10 8 1 6 4 0 +6 4 0 7 5 0 +13 10 0 7 5 1 +7 5 0 15 11 0 +17 12 0 18 13 0 +17 12 1 18 13 1 +19 14 0 3 2 1 +15 11 0 20 15 0 +20 15 0 17 12 0 +21 16 0 4 3 0 +4 3 1 2 1 0 +4 3 2 1 0 0 +11 9 0 10 8 0 +11 9 1 9 7 0 +11 9 2 8 6 0 +11 9 3 13 10 0 +23 18 0 21 16 0 +23 18 1 11 9 0 diff --git a/Examples/Tutorial1-FirstThing.ssm b/Examples/Tutorial1-FirstThing.ssm index 2a29cca..9a31a30 100644 --- a/Examples/Tutorial1-FirstThing.ssm +++ b/Examples/Tutorial1-FirstThing.ssm @@ -1,203 +1,193 @@ SpiralSynthModular File Ver 3 -288 90 724 420 291 544 724 420 +0 0 700 300 0 300 700 300 SectionList -40 +38 Device 0 Plugin -1 -371 24 0 0 0 +371 320 0 0 0 1 36 Tutorial 1 - First principles of SSM Device 1 Plugin -1 -371 40 0 0 0 -1 90 This is a comment, click somewhere in the middle of me to move me, right click to edit me. +371 336 0 0 0 +1 91 This is a comment, click somewhere in the middle of me to move me, double click to edit me. Device 2 Plugin 0 -541 115 1 493 101 +541 411 1 492 26 Device 3 Plugin 23 -216 115 1 178 106 +216 411 1 178 26 1 0 0 1 1 Device 4 Plugin -1 -230 81 0 0 0 +230 377 0 0 0 1 31 The simplest noisemaking layout Device 5 Plugin -1 -230 81 0 0 0 +230 377 0 0 0 1 31 The simplest noisemaking layout Device 6 Plugin -1 -254 93 0 0 0 +254 389 0 0 0 1 41 A sinewave generating wavetable plugin... Device 7 Plugin -1 -537 93 0 0 0 +537 389 0 0 0 1 18 ... and an output. Device 15 Plugin -1 -222 184 0 0 0 +222 480 0 0 0 1 36 Change the frequency and wave shape. Device 16 Plugin -1 -540 176 0 0 0 +540 472 0 0 0 1 40 This outputs the sound to the soundcard. Device 17 Plugin -1 -534 189 0 0 0 +534 485 0 0 0 1 55 You can change the volume, or record the sound to disk. Device 18 Plugin -1 -374 133 0 0 0 +374 429 0 0 0 1 41 This connects the output of the wavetable Device 21 Plugin -1 -374 133 0 0 0 +374 429 0 0 0 1 41 This connects the output of the wavetable Device 22 Plugin -1 -370 144 0 0 0 +370 440 0 0 0 1 38 To the input of the OSS output plugin. Device 23 Plugin -1 -373 114 0 0 0 +373 410 0 0 0 1 51 Create/Delete connections by clicking on the ports. -Device 24 Plugin 2 -198 286 0 158 214 -2 0 0 0 - - Device 26 Plugin -1 -258 295 0 0 0 +258 591 0 0 0 1 9 <-------- Device 27 Plugin -1 -165 65 0 0 0 +165 361 0 0 0 1 3 (1) Device 28 Plugin -1 -166 250 0 0 0 +166 546 0 0 0 1 3 (2) Device 29 Plugin -1 -389 288 0 0 0 +389 584 0 0 0 1 44 To get this to work, click on this port, and Device 30 Plugin -1 -400 301 0 0 0 +400 597 0 0 0 1 45 then on the WaveTable's one free input above. Device 31 Plugin -1 -266 264 0 0 0 -1 44 Controlling the sound with MIDI/PC keyboard. +253 562 0 0 0 +1 39 Controlling the sound with PC keyboard. Device 32 Plugin -1 -389 337 0 0 0 -1 50 To change the pitch of the tone, press keys in the - - -Device 35 Plugin -1 -389 362 0 0 0 -1 51 to have midi, just bash those black and white keys. +410 624 0 0 0 +1 63 To change the pitch of the tone, press keys on your PC keyboard Device 37 Plugin -1 -396 226 0 0 0 +396 522 0 0 0 1 103 ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: Device 38 Plugin 5 -401 470 1 313 235 +401 766 1 485 140 1 0.0529 0.8281 0 0 0.5 0.01 Device 39 Plugin -1 -386 394 0 0 0 +386 690 0 0 0 1 103 ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: Device 40 Plugin -1 -168 421 0 0 0 +168 717 0 0 0 1 3 (3) Device 41 Plugin -1 -248 435 0 0 0 +248 731 0 0 0 1 36 Using an envelope to shape the sound Device 42 Plugin -1 -242 491 0 0 0 +242 787 0 0 0 1 47 Connect this to the WaveTable's output -------> Device 43 Plugin -1 -270 466 0 0 0 +270 762 0 0 0 1 33 Connect this to the second output Device 44 Plugin -1 -277 478 0 0 0 -1 33 down on the Midi plugin. -------> +264 775 0 0 0 +1 37 down on the keyboard plugin. -------> Device 45 Plugin -1 -518 488 0 0 0 +518 784 0 0 0 1 34 <------ Connect this to one of the Device 46 Plugin -1 -529 501 0 0 0 +529 797 0 0 0 1 20 OSS plugin's inputs. Device 47 Plugin -1 -398 547 0 0 0 +398 843 0 0 0 1 65 The layout will now look a little messy, but should now cause the Device 48 Plugin -1 -405 560 0 0 0 +405 856 0 0 0 1 67 sound to appear and then slowly die away after a note is triggered. Device 49 Plugin -1 -420 573 0 0 0 +420 869 0 0 0 1 74 Try changing the [A]ttack [D]ecay [S]ustain and [R]elease of the envelope. Device 51 Plugin -1 -325 447 0 0 0 +325 743 0 0 0 1 73 Click on the WaveTable's output port, so the first connection is deleted. Device 52 Plugin -1 -394 532 0 0 0 -1 55 Now hit a key. (In the midi plugin window if necessary) +284 830 0 0 0 +1 14 Now hit a key. -Device 53 Plugin -1 -387 349 0 0 0 -1 47 main window on your PC keyboard, or if you are +Device 54 Plugin 40 +209 582 1 152 151 +0 1 diff --git a/Examples/Tutorial3-SubtractiveSynth.ssm b/Examples/Tutorial3-SubtractiveSynth.ssm index cff556e..c9e3296 100644 --- a/Examples/Tutorial3-SubtractiveSynth.ssm +++ b/Examples/Tutorial3-SubtractiveSynth.ssm @@ -1,129 +1,129 @@ SpiralSynthModular File Ver 3 -401 127 724 420 402 579 724 420 +0 0 700 300 0 300 700 300 SectionList 24 Device 0 Plugin 23 -263 170 1 99 99 +263 466 1 99 27 1 3 0 1 1 -Device 1 Plugin 2 -175 194 0 115 69 -2 0 0 0 - - Device 2 Plugin 5 -264 238 1 335 227 +264 534 1 335 155 1 0.0289 0.16 0.08 1.0404 0.58 0.01 Device 3 Plugin 13 -379 171 1 349 100 +379 467 1 349 28 1 0 0.37137 Device 4 Plugin 0 -628 171 0 593 69 +628 467 0 593 -3 Device 6 Plugin 1 -484 171 1 472 93 +484 467 1 472 21 Device 7 Plugin -1 -382 10 0 0 0 -1 17 Tutorial design 2 +382 306 0 0 0 +1 17 Tutorial design 3 Device 8 Plugin -1 -381 26 0 0 0 +381 322 0 0 0 1 19 A subtractive synth Device 9 Plugin -1 -170 176 0 0 0 +170 472 0 0 0 1 15 Note in signals Device 11 Plugin -1 -260 152 0 0 0 +260 448 0 0 0 1 15 Sound generator Device 12 Plugin -1 -263 304 0 0 0 +263 600 0 0 0 1 43 Generates the signal to control the filter. Device 13 Plugin -1 -377 235 0 0 0 +377 531 0 0 0 1 23 Filters the frequencies Device 14 Plugin -1 -389 249 0 0 0 +389 545 0 0 0 1 26 from the WaveTable plugin, Device 15 Plugin -1 -401 262 0 0 0 +401 558 0 0 0 1 32 the envelope passes the value to Device 16 Plugin -1 -420 275 0 0 0 +420 571 0 0 0 1 43 control the cutoff frequency of the filter. Device 17 Plugin -1 -332 50 0 0 0 +332 346 0 0 0 1 73 This synth uses what is known as subtractive synthesis to produce sounds. Device 19 Plugin -1 -333 65 0 0 0 +333 361 0 0 0 1 81 The heart of a subtractive synths is the filter, as it is what the filter removes Device 20 Plugin -1 -236 80 0 0 0 +236 376 0 0 0 1 32 that dictates the sound produced Device 21 Plugin -1 -348 95 0 0 0 +348 391 0 0 0 1 81 The waveshape the oscillator uses should contain as many frequencies as possible, Device 22 Plugin -1 -348 110 0 0 0 +348 406 0 0 0 1 86 (in this case a triangle wave) so that the filter has more of an effect on it's sound. Device 25 Plugin 6 -561 171 0 0 0 +561 467 0 0 0 Device 28 Plugin -1 -339 352 0 0 0 +339 648 0 0 0 1 79 This is how many of the first analogue synths worked, such as the moogs - hence Device 29 Plugin -1 -223 366 0 0 0 +223 662 0 0 0 1 32 the use of the moog filter here. Device 30 Plugin -1 -238 317 0 0 0 +238 613 0 0 0 1 29 Triggered by keypress events. +Device 31 Plugin 40 +177 499 0 200 -22 +0 + + 8 -1 1 0 0 0 0 -1 1 1 2 2 0 -2 2 0 3 3 1 -0 0 0 3 3 0 -3 3 0 6 5 0 -6 5 0 25 20 0 -25 20 0 4 4 0 -25 20 1 4 4 1 +2 1 0 3 2 1 +0 0 0 3 2 0 +3 2 0 6 4 0 +6 4 0 25 19 0 +25 19 0 4 3 0 +25 19 1 4 3 1 +31 23 0 0 0 0 +31 23 1 2 1 0 diff --git a/Examples/Tutorial4-AdditiveSynth.ssm b/Examples/Tutorial4-AdditiveSynth.ssm index 19cf878..b26f707 100644 --- a/Examples/Tutorial4-AdditiveSynth.ssm +++ b/Examples/Tutorial4-AdditiveSynth.ssm @@ -1,110 +1,105 @@ SpiralSynthModular File Ver 3 -401 127 724 420 402 579 724 420 +0 0 700 300 0 300 700 300 SectionList -20 +19 Device 0 Plugin 1 -495 175 1 477 128 +495 495 1 477 128 Device 1 Plugin 0 -629 174 0 100 100 +629 494 0 100 100 Device 2 Plugin 6 -562 175 0 0 0 +562 495 0 0 0 Device 3 Plugin 23 -219 175 1 95 14 +219 495 1 95 14 1 0 2 0.421244 1 Device 4 Plugin 23 -357 175 1 90 259 +357 495 1 90 259 1 0 -3 1 1 Device 5 Plugin 5 -289 165 1 143 134 +289 492 1 143 134 1 0 0.3249 0.96 1 1 0.01 Device 6 Plugin 5 -426 165 1 328 136 +426 485 1 328 136 1 0.0289 0.4624 0.26 1 0.5 0.01 -Device 7 Plugin 2 -149 175 0 100 100 -2 0 0 0 - - -Device 8 Plugin 6 -200 93 0 0 0 - - Device 9 Plugin -1 -362 11 0 0 0 +362 331 0 0 0 1 31 Tutorial 3 - Additive Synthesis Device 10 Plugin -1 -362 30 0 0 0 +362 350 0 0 0 1 94 Additive synthesis works on the principle of building up sounds by combining simpler elements. Device 11 Plugin -1 -357 44 0 0 0 +357 364 0 0 0 1 95 In this case, two oscillators are used, one modulating the pitch of the other. This is known as Device 14 Plugin -1 -284 241 0 0 0 +284 561 0 0 0 1 10 Envelope 1 Device 15 Plugin -1 -422 242 0 0 0 +422 562 0 0 0 1 10 Envelope 2 Device 16 Plugin -1 -347 324 0 0 0 +347 644 0 0 0 1 80 Envelope 1 controls the amount of modulation that the second ocillator recieves, Device 17 Plugin -1 -312 338 0 0 0 +312 658 0 0 0 1 60 The second envelope shapes the amplitude of the final sound. Device 18 Plugin -1 -212 58 0 0 0 +212 378 0 0 0 1 28 frequency modulation, or FM. Device 19 Plugin -1 -337 72 0 0 0 +337 392 0 0 0 1 84 The first digital synths used this technique, such as the DX range of Yamaha synths. Device 22 Plugin -1 -216 246 0 0 0 +216 566 0 0 0 1 12 Oscillator 1 Device 23 Plugin -1 -352 243 0 0 0 +352 563 0 0 0 1 12 Oscillator 2 -11 +Device 24 Plugin 40 +145 446 0 200 50 +0 + + +10 2 2 0 1 1 0 2 2 1 1 1 1 0 0 0 2 2 0 3 3 0 5 5 1 4 4 0 6 6 1 6 6 1 0 0 0 -7 7 1 8 8 0 -8 8 1 5 5 0 -8 8 0 6 6 0 -7 7 0 3 3 0 5 5 1 4 4 0 +24 18 0 3 3 0 +24 18 1 5 5 0 +24 18 1 6 6 0 diff --git a/Examples/Tutorial5-Matrix&Sampler.ssm b/Examples/Tutorial5-Matrix&Sampler.ssm deleted file mode 100644 index 4caf1e4..0000000 --- a/Examples/Tutorial5-Matrix&Sampler.ssm +++ /dev/null @@ -1,99 +0,0 @@ -SpiralSynthModular File Ver 3 -225 58 903 467 306 558 724 420 -SectionList -12 - -Device 1 Plugin 0 -556 127 0 100 100 - - -Device 2 Plugin 18 -230 98 1 86 49 -2 0 0.127474 17 1 0 -32 5.4 0 -0 0 2 0 4 0 6 0 8 0 10 0 12 0 14 0 16 0 18 0 20 0 22 0 24 0 26 0 28 0 30 0 4 1 12 1 20 1 28 1 0 2 8 2 16 2 24 2 -1 32 1 0 --1 32 1 0 --1 32 1 0 --1 32 1 0 --1 32 1 0 --1 32 1 0 --1 32 1 0 --1 32 1 0 --1 32 1 0 --1 32 1 0 --1 32 1 0 --1 32 1 0 --1 32 1 0 --1 32 1 0 --1 32 1 0 --1 - -Device 3 Plugin 16 -316 97 1 634 10 -2 1 1 4 None 0 -1 1 4 None 1 -1 1 4 None 2 -1 1 4 None 3 -1 1 4 None 4 -1 1 4 None 5 -1 1 4 None 6 -1 1 4 None 7 - - -Device 4 Plugin 6 -481 128 0 0 0 - - -Device 5 Plugin -1 -358 21 0 0 0 -1 31 Tutorial 4 - Matrix and Sampler - - -Device 6 Plugin -1 -364 36 0 0 0 -1 99 This design won't produce sound by itself, you'll have to load some samples into the sampler first. - - -Device 7 Plugin -1 -342 50 0 0 0 -1 83 Open the sampler plugin window and load up samples (wav format) from your hardrive. - - -Device 8 Plugin -1 -375 65 0 0 0 -1 105 Hihat for the first sample, kickdrum and snare for the others (not that it really matters what they are). - - -Device 9 Plugin -1 -386 311 0 0 0 -1 104 This represents a very common combination of plugins in ssm, the matrix and sampler. This design is used - - -Device 10 Plugin -1 -361 325 0 0 0 -1 92 mainly creating drum loops. Open the matrix and change the trigger notes to change the beat. - - -Device 11 Plugin -1 -395 339 0 0 0 -1 108 If you move your mouse over the two columns of ports on the matrix and sampler, you'll see that the triggers - - -Device 12 Plugin -1 -256 353 0 0 0 -1 49 are connected up to fire the samples off. Simple! - - -11 -4 3 0 1 0 0 -4 3 1 1 0 1 -3 2 0 4 3 0 -2 1 2 3 2 1 -2 1 3 3 2 3 -2 1 4 3 2 5 -2 1 5 3 2 7 -2 1 6 3 2 9 -2 1 7 3 2 11 -2 1 8 3 2 13 -2 1 9 3 2 15 - diff --git a/Examples/Tutorial5-MatrixSampler.ssm b/Examples/Tutorial5-MatrixSampler.ssm new file mode 100644 index 0000000..a4d44ab --- /dev/null +++ b/Examples/Tutorial5-MatrixSampler.ssm @@ -0,0 +1,76 @@ +SpiralSynthModular File Ver 3 +0 0 700 300 0 300 700 300 +SectionList +9 + +Device 1 Plugin 0 +543 318 0 100 94 + + +Device 2 Plugin 18 +216 339 1 78 228 +3 0 0.0807003 55 1 0 +64 8.5 0 +0 0 1 2 0 1 8 0 1 16 0 1 18 0 1 24 0 1 32 0 1 34 0 1 40 0 1 48 0 1 50 0 1 56 0 1 0 1 1 2 1 1 3 1 1 6 1 1 7 1 1 10 1 1 11 1 1 14 1 1 15 1 1 18 1 1 19 1 1 22 1 1 23 1 1 26 1 1 27 1 1 30 1 1 31 1 1 34 1 1 35 1 1 38 1 1 39 1 1 42 1 1 43 1 1 46 1 1 47 1 1 50 1 1 51 1 1 54 1 1 55 1 1 58 1 1 59 1 1 62 1 1 63 1 1 2 2 1 6 2 1 10 2 1 14 2 1 18 2 1 22 2 1 26 2 1 30 2 1 34 2 1 38 2 1 42 2 1 46 2 1 50 2 1 54 2 1 58 2 1 62 2 1 4 3 1 12 3 1 20 3 1 28 3 1 36 3 1 44 3 1 47 3 0.666667 50 3 0.333333 52 3 1 53 3 0.180392 55 3 0.639216 58 3 0.333333 59 3 1 61 3 0.564706 -1 32 1 0 +-1 32 1 0 +-1 32 1 0 +-1 32 1 0 +-1 32 1 0 +-1 32 1 0 +-1 32 1 0 +-1 32 1 0 +-1 32 1 0 +-1 32 1 0 +-1 32 1 0 +-1 32 1 0 +-1 32 1 0 +-1 32 1 0 +-1 32 1 0 +-1 + +Device 3 Plugin 32 +317 324 1 79 9 +3 2 1 0 0 0 0 -1 0 0 12448 0 0.982 1 0 0 1 1 -1 0 0 1751 1 0.571 1.07 0 0 2 1 -1 0 0 7272 2 1.568 1 0 0 3 1 7118 0 0 8225 3 1 1 0 0 4 0 -1 0 0 2147483647 4 1 1 0 0 5 0 -1 0 0 2147483647 5 1 1 0 0 6 0 -1 0 0 2147483647 6 1 1 0 0 7 0 -1 0 0 2147483647 7 + +Device 8 Plugin -1 +470 391 0 0 0 +1 10 Tutorial 5 + + +Device 9 Plugin -1 +466 409 0 0 0 +1 48 Using samples to build drumloops with the matrix + + +Device 10 Plugin -1 +464 424 0 0 0 +1 46 Each row of the matrix corresponds to a sample + + +Device 11 Plugin -1 +477 439 0 0 0 +1 52 This also shows how you can use volumes to fake echo + + +Device 14 Plugin -1 +472 456 0 0 0 +1 54 The samples are really small to cut down distro size - + + +Device 15 Plugin -1 +399 471 0 0 0 +1 19 try using your own. + + +10 +2 1 2 3 2 1 +2 1 3 3 2 3 +2 1 4 3 2 5 +2 1 5 3 2 7 +2 1 6 3 2 9 +2 1 7 3 2 11 +2 1 8 3 2 13 +2 1 9 3 2 15 +3 2 0 1 0 0 +3 2 0 1 0 1 + diff --git a/Examples/Tutorial5-MatrixSampler.ssm_files/PoshSampler3_0.wav b/Examples/Tutorial5-MatrixSampler.ssm_files/PoshSampler3_0.wav new file mode 100644 index 0000000000000000000000000000000000000000..871d38fec091e7e9a0adb59db23a34c38c5fcdc0 GIT binary patch literal 24940 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 literal 0 HcmV?d00001 diff --git a/Examples/Tutorial5-MatrixSampler.ssm_files/PoshSampler3_1.wav b/Examples/Tutorial5-MatrixSampler.ssm_files/PoshSampler3_1.wav new file mode 100644 index 0000000000000000000000000000000000000000..f474957e92577fd1ca22aa2ee10f1bff03664580 GIT binary patch literal 3548 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 J{NLoj{{iaJFhKwS literal 0 HcmV?d00001 diff --git a/Examples/Tutorial5-MatrixSampler.ssm_files/PoshSampler3_3.wav b/Examples/Tutorial5-MatrixSampler.ssm_files/PoshSampler3_3.wav new file mode 100644 index 0000000000000000000000000000000000000000..c8bf39a3d035331d131728ba775a2f7e60dd9728 GIT binary patch literal 16496 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 HzgGNTB_gd1 literal 0 HcmV?d00001 diff --git a/Examples/Tutorial7-LADSPA.ssm b/Examples/Tutorial7-LADSPA.ssm index a2467c6..08165d3 100644 --- a/Examples/Tutorial7-LADSPA.ssm +++ b/Examples/Tutorial7-LADSPA.ssm @@ -1,125 +1,59 @@ SpiralSynthModular File Ver 3 -291 68 724 461 289 564 724 420 +0 0 700 300 0 300 700 300 SectionList -19 +10 Device 0 Plugin 23 -279 186 1 100 100 -1 3 1 1 1 - -Device 1 Plugin 2 -160 215 0 100 100 -2 0 0 0 - +243 432 1 99 11 +1 3 0 1 1 Device 2 Plugin 5 -280 251 1 481 220 -1 0.0036 0.3844 0 0.1156 0.5 0.01 +244 500 1 485 13 +1 0.0289 0.16 0.08 1.0404 0.58 0.01 Device 3 Plugin 13 -347 187 1 350 100 -1 0.3208 0.26683 +359 433 1 349 12 +1 0 0.37137 Device 4 Plugin 0 -638 187 0 100 100 - - -Device 25 Plugin 6 -487 157 0 0 0 - - -Device 31 Plugin 6 -212 144 0 0 0 - - -Device 32 Plugin 5 -413 144 1 482 101 -1 0 0.0784 1 0.2601 0.43 0.01 - -Device 33 Plugin 22 -571 187 0 415 148 -2 0.714 /usr/local/lib/ladspa/cmt.so freeverb3 8 -1 -1 -1 0 0 0 0 0 1 1 1 1 1 1 1 1 - -Device 34 Plugin 3 -435 245 1 95 215 -3 6 -0.06 0.78 -0.52 0.5 0.22 0.82 1 -6 -6 -Freeze -1 1 0.53 -4 -Room -1 1 0.11 -4 -Damp -1 1 0.76 -3 -Wet -1 1 0.25 -3 -Dry -1 1 0.39 -5 -Width -1 1 0.09 - - -Device 35 Plugin -1 -374 13 0 0 0 -1 33 Tutorial 6 - Using LADSPA Plugins - - -Device 36 Plugin -1 -375 29 0 0 0 -1 71 If you have LADSPA installed, the plugins should be fully connected up. - - -Device 37 Plugin -1 -377 43 0 0 0 -1 36 If not, then this won't work at all. - +575 412 0 593 -19 -Device 38 Plugin -1 -566 171 0 0 0 -1 10 (FreeVerb) +Device 7 Plugin -1 +358 303 0 0 0 +1 10 Tutorial 7 -Device 40 Plugin -1 -370 72 0 0 0 -1 82 This shows you how you can set up the CV slider plugin to control a LADSPA plugin. +Device 8 Plugin -1 +358 320 0 0 0 +1 37 The subtractive synth from tutorial 3 -Device 41 Plugin -1 -380 86 0 0 0 -1 91 It's handy to name the sliders according to what they are controlling. Also important is to +Device 31 Plugin 40 +157 465 0 200 -38 +0 -Device 42 Plugin -1 -385 99 0 0 0 -1 92 tweak the input scales so the plugin behaves correctly. Most plugins set these automatically +Device 32 Plugin 22 +472 410 1 119 124 +8 0 1 1216 8 1 0.1 0 0 -70 -70 -70 -1 300 360 1 1 0 0 0 1 1 1 1 1 1 1 1 1 121.497 90.075 0.81 0.719 -16.38 0 -3.92 0.000776224 -Device 43 Plugin -1 -277 113 0 0 0 -1 45 as this one does, but you have to be careful. +Device 33 Plugin -1 +361 336 0 0 0 +1 35 with a LADSPA reverb effect plugin. -Device 44 Plugin -1 -387 356 0 0 0 -1 112 Open the LADSPA plugin to load other plugins. When a new plugin is selected, all the connections will be broken. +Device 34 Plugin -1 +363 357 0 0 0 +1 65 This won't do much exiting if you don't have LADSPA installed. :) -18 -1 1 0 0 0 0 -2 2 0 3 3 1 -0 0 0 3 3 0 -1 1 1 31 6 0 -3 3 0 32 7 1 -31 6 0 32 7 0 -31 6 1 2 2 0 -34 9 0 33 8 2 -34 9 1 33 8 3 -34 9 2 33 8 4 -34 9 3 33 8 5 -34 9 4 33 8 6 -34 9 5 33 8 7 -33 8 0 4 4 0 -33 8 1 4 4 1 -25 5 0 33 8 0 -25 5 1 33 8 1 -32 7 1 25 5 0 +7 +2 1 0 3 2 1 +0 0 0 3 2 0 +31 6 0 0 0 0 +31 6 1 2 1 0 +3 2 0 32 7 7 +32 7 0 4 3 0 +32 7 1 4 3 1 diff --git a/Examples/Tutorial8-AdvSequencing.ssm b/Examples/Tutorial8-AdvSequencing.ssm deleted file mode 100644 index 61e5002..0000000 --- a/Examples/Tutorial8-AdvSequencing.ssm +++ /dev/null @@ -1,324 +0,0 @@ -SpiralSynthModular File Ver 3 -24 32 1244 544 19 534 1248 481 -SectionList -48 - -Device 3 Plugin 0 -1092 304 0 265 123 - - -Device 5 Plugin 5 -792 123 1 763 66 -1 0 0.0529 1 0.16 0.5 0.01 - -Device 7 Plugin 8 -1024 304 0 265 123 -1 1.52 0.5 1.01 0.5 1.3 0.5 1 0.5 - -Device 9 Plugin 14 -927 124 1 1031 63 -1 0.321 0.5 - -Device 12 Plugin 13 -859 124 1 907 65 -1 0.2642 0.21074 - -Device 13 Plugin 18 -445 124 0 265 123 -2 0 0.0976591 6 1 0 -32 6 5 -16 0 20 0 21 0 24 0 28 0 0 2 1 2 4 2 5 2 8 2 12 2 17 5 19 5 27 5 29 5 18 12 22 12 23 12 26 12 30 12 2 14 3 14 6 14 10 14 14 14 -1 32 6 5 -20 0 22 0 24 0 26 0 28 0 30 0 0 2 2 2 4 2 6 2 8 2 10 2 12 2 14 2 16 2 18 2 17 7 25 12 7 14 15 14 -1 32 6 5 -6 0 8 0 10 0 0 2 30 2 2 4 28 4 18 5 4 7 26 7 12 14 16 14 20 14 22 14 24 14 -1 32 1 0 --1 32 1 0 --1 32 1 0 --1 32 1 0 --1 32 1 0 --1 32 1 0 --1 32 1 0 --1 32 1 0 --1 32 1 0 --1 32 1 0 --1 32 1 0 --1 32 1 0 --1 32 1 0 --1 - -Device 17 Plugin 6 -589 123 0 0 0 - - -Device 20 Plugin 23 -654 95 1 513 14 -1 2 0 1.01382 1 - -Device 21 Plugin 23 -653 164 1 513 129 -1 2 0 0.992295 1 - -Device 22 Plugin 7 -724 124 0 265 123 -1 1 1 1 1 - -Device 23 Plugin 21 -366 183 0 265 123 -1 8 0 1 0 0 0 0 0 0 0 1 -1 0 0 0 0 0 0 0 -1 0 0 0 0 0 2 0 -1 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1 -1 0 0 0 0 0 1 0 -1 0 0 0 0 0 2 0 -1 0 0 0 0 0 - -Device 24 Plugin 18 -294 174 0 265 123 -2 0 0.0976591 6 1 0 -32 6 0 -31 0 -1 32 1 0 --1 32 1 0 --1 32 1 0 --1 32 1 0 --1 32 1 0 --1 32 1 0 --1 32 1 0 --1 32 1 0 --1 32 1 0 --1 32 1 0 --1 32 1 0 --1 32 1 0 --1 32 1 0 --1 32 1 0 --1 32 1 0 --1 - -Device 25 Plugin 23 -591 298 1 95 220 -1 2 1 1.00361 1 - -Device 26 Plugin 23 -590 362 1 95 333 -1 2 -1 1 1 - -Device 27 Plugin 6 -519 325 0 0 0 - - -Device 28 Plugin 7 -664 325 0 265 123 -1 1 1 1 1 - -Device 30 Plugin 13 -832 309 1 489 278 -1 0.4528 0.35798 - -Device 31 Plugin 5 -732 325 1 343 278 -1 0 0 1 0.2025 0.5 0.01 - -Device 32 Plugin 18 -450 325 0 265 123 -2 1 0.0860509 6 1 0 -32 6 3 -4 0 8 0 9 0 10 0 14 0 22 0 23 0 24 0 25 0 26 0 0 2 1 2 2 2 12 2 16 2 17 2 20 2 18 5 30 9 -1 32 6 3 -14 0 22 0 23 0 24 0 25 0 26 0 2 2 6 2 10 2 16 2 17 2 20 2 30 2 18 5 -1 32 1 0 --1 32 1 0 --1 32 1 0 --1 32 1 0 --1 32 1 0 --1 32 1 0 --1 32 1 0 --1 32 1 0 --1 32 1 0 --1 32 1 0 --1 32 1 0 --1 32 1 0 --1 32 1 0 --1 32 1 0 --1 - -Device 33 Plugin 23 -732 391 0 265 123 -1 0 0 0.00163394 1 - -Device 34 Plugin 9 -802 391 0 265 123 -1 0.2642 0 - -Device 35 Plugin 23 -755 497 1 762 241 -1 2 0 1 1 - -Device 36 Plugin 20 -689 497 0 265 123 -1 0.16 0.17 - -Device 37 Plugin 17 -617 516 0 149 229 -2 7.05675 16.45 1 0 0 0 EventMap 1 2 0 10 50 1 16.45 352 0 100 8 10 4.04 74 0.2 1 5.3 77 0.4 1 6.86 79 -6.86 1 0.74 77 0.14 1 1.12 74 0.14 1 2.24 72 0.2 1 3 74 0.2 1 8.92 60 0.2 1 11.8 65 0.3 1 12.92 62 0.14 1 - EventMap 1 1 0 10 100 1 2 0 0 100 8 0 - EventMap 1 1 0 10 100 1 2 0 0 100 8 0 - EventMap 1 1 0 10 100 1 2 0 0 100 8 0 - EventMap 1 1 0 10 100 1 2 0 0 100 8 0 - EventMap 1 1 0 10 100 1 2 0 0 100 8 0 - EventMap 1 1 0 10 100 1 2 0 0 100 8 0 - EventMap 1 1 0 10 100 1 2 0 0 100 8 0 - EventMap 1 1 0 10 100 1 2 0 0 100 8 0 - EventMap 1 1 0 10 100 1 2 0 0 100 8 0 - EventMap 1 1 0 10 100 1 2 0 0 100 8 0 - EventMap 1 1 0 10 100 1 2 0 0 100 8 0 - EventMap 1 1 0 10 100 1 2 0 0 100 8 0 - EventMap 1 1 0 10 100 1 2 0 0 100 8 0 - EventMap 1 1 0 10 100 1 2 0 0 100 8 0 - EventMap 1 1 0 10 100 1 2 0 0 100 8 0 - - -Device 38 Plugin 2 -546 539 0 265 123 -2 0 0 0 - - -Device 39 Plugin 5 -824 492 1 1015 352 -1 0.0784 0.0289 0.66 1.2769 0.28 0.01 - -Device 40 Plugin 11 -893 506 1 839 355 -1 1893.56 3.7 0 0 - -Device 41 Plugin -1 -637 22 0 0 0 -1 32 Tutorial 8 - Advanced Sequencing - - -Device 42 Plugin -1 -638 37 0 0 0 -1 59 This design shows you how to use sequencers to build songs. - - -Device 43 Plugin -1 -633 47 0 0 0 -1 59 Once the oscillators have settled onto the right frequency, - - -Device 44 Plugin -1 -641 58 0 0 0 -1 49 you should hear three patterns, playing together. - - -Device 45 Plugin -1 -302 123 0 0 0 -1 45 The SeqSelector is the main controlling part. - - -Device 46 Plugin -1 -286 138 0 0 0 -1 51 It tells the sequencers what part to play and when. - - -Device 47 Plugin -1 -298 375 0 0 0 -1 35 This matrix acts as the main clock. - - -Device 48 Plugin -1 -306 386 0 0 0 -1 39 It's one event triggers the seqselector - - -Device 49 Plugin -1 -305 397 0 0 0 -1 22 to move on a pattern. - - -Device 50 Plugin -1 -690 634 0 0 0 -1 39 This part was recorded from midi notes. - - -Device 51 Plugin -1 -695 646 0 0 0 -1 83 You can see them, if you open the Sequencer plugin window, and scroll around a bit. - - -Device 52 Plugin -1 -728 257 0 0 0 -1 92 Open the SeqSelector to see the patterns it's sending to the two matrixes and the sequencer. - - -Device 53 Plugin -1 -698 656 0 0 0 -1 77 The midi plugin is still connected, so it'll still record any incoming notes. - - -Device 55 Plugin -1 -637 69 0 0 0 -1 54 (The sequencer also takes some time to get in rhythm.) - - -Device 56 Plugin 7 -519 112 0 265 123 -1 0.46 1 1 1 - -Device 57 Plugin 23 -318 51 1 264 13 -1 0 -1 1.3716 1 - -Device 58 Plugin 9 -453 51 0 265 123 -1 -0.0377 0 - -Device 59 Plugin 9 -385 51 0 265 123 -1 0.0377 0 - -Device 60 Plugin 5 -824 559 1 1013 238 -1 0.1156 0.2025 1 1 0.23 0.01 - -Device 61 Plugin 6 -691 561 0 0 0 - - -Device 62 Plugin 14 -960 447 0 265 123 -1 0.415 0.58 - -43 -7 2 0 3 0 0 -7 2 1 3 0 1 -9 3 0 7 2 0 -13 5 1 5 1 0 -17 6 0 20 7 0 -17 6 1 21 8 0 -21 8 0 22 9 1 -20 7 0 22 9 0 -24 11 1 23 10 0 -23 10 0 13 5 0 -23 10 1 32 18 0 -32 18 0 27 14 0 -27 14 0 25 12 0 -27 14 1 26 13 0 -25 12 0 28 15 0 -26 13 0 28 15 1 -32 18 1 31 17 0 -28 15 0 31 17 1 -31 17 1 30 16 0 -30 16 0 7 2 1 -33 19 0 34 20 0 -34 20 0 30 16 1 -36 22 0 35 21 0 -38 24 0 37 23 2 -38 24 1 37 23 3 -37 23 0 36 22 0 -23 10 2 37 23 0 -35 21 0 39 25 1 -39 25 1 40 26 0 -22 9 0 5 1 1 -5 1 1 12 4 0 -12 4 0 9 3 0 -58 43 0 56 41 0 -13 5 0 56 41 1 -56 41 0 17 6 0 -57 42 0 59 44 0 -59 44 0 58 43 0 -37 23 1 61 46 0 -61 46 0 39 25 0 -61 46 1 60 45 0 -60 45 0 40 26 1 -40 26 0 62 47 0 -62 47 0 7 2 2 - diff --git a/Examples/soil_and_the_crop.ssm b/Examples/soil_and_the_crop.ssm new file mode 100644 index 0000000..ebd834e --- /dev/null +++ b/Examples/soil_and_the_crop.ssm @@ -0,0 +1,392 @@ +SpiralSynthModular File Ver 3 +0 0 700 300 0 300 700 300 +SectionList +74 + +Device 1 Plugin 23 +282 556 1 86 144 +1 1 0 0.0314069 1 + +Device 2 Plugin 51 +599 463 0 0 0 + + +Device 4 Plugin 23 +601 330 1 553 17 +1 0 0 0.0133213 1 + +Device 5 Plugin 5 +667 330 1 801 17 +1 0.0121 0.2601 0 1 1 0.02 + +Device 6 Plugin 0 +1349 597 0 993 435 + + +Device 7 Plugin 4 +610 530 0 452 441 +1 3 0 1 0.5 0 0 1 + +Device 8 Plugin 5 +676 528 1 802 358 +1 0 0.0289 0 1 0.5 0.01 + +Device 9 Plugin 8 +824 396 0 735 509 +1 2 0.5 0.6 0.5 1.45 0.5 1.37 0.5 + +Device 16 Plugin 4 +534 464 0 432 542 +1 3 0 1 0.49 0 0.4906 1 + +Device 17 Plugin 4 +469 398 0 452 441 +1 3 0 1 0.5 0 0.03125 1 + +Device 18 Plugin 51 +538 395 0 0 0 + + +Device 19 Plugin 4 +605 397 0 452 441 +1 3 0 1 0.5 0 0 1 + +Device 20 Plugin 5 +671 395 1 801 131 +1 0 0.16 0 1.4161 0.6 0.01 + +Device 21 Plugin 5 +535 330 1 408 18 +1 0.0036 0.0289 0 0.0529 0.96 0.01 + +Device 22 Plugin 5 +667 463 1 676 242 +1 0 0.16 0 0 0.89 0.01 + +Device 23 Plugin 4 +465 466 0 452 441 +1 3 0 1 0.5 0 0 1 + +Device 24 Plugin 51 +463 330 0 0 0 + + +Device 25 Plugin 11 +739 466 1 823 244 +1 3004.28 3.4 0 0 + +Device 26 Plugin 4 +394 328 0 447 565 +1 3 0 1 0.5 0 1.45626e-38 1 + +Device 28 Plugin 14 +905 397 1 969 199 +1 0.453 0.25 + +Device 29 Plugin 1 +1278 552 1 97 7 + + +Device 30 Plugin 23 +787 622 1 431 511 +1 2 -2 1 1 + +Device 31 Plugin 5 +720 622 1 680 511 +1 0 0.16 0.23 1 0.15 0.01 + +Device 32 Plugin 7 +1210 601 1 1243 524 +1 0.89 0.89 0.12 1.4 + +Device 33 Plugin 4 +385 713 0 452 441 +1 3 0 1 0.5 0 0 1 + +Device 34 Plugin 51 +523 710 0 0 0 + + +Device 35 Plugin 9 +652 710 0 360 609 +1 0.8679 0.9434 + +Device 36 Plugin 13 +853 622 1 827 510 +1 0 0.34807 + +Device 37 Plugin 23 +738 689 0 686 525 +1 0 -3 0.0298993 1 + +Device 38 Plugin 23 +806 688 0 487 534 +1 1 -3 0.000549012 1 + +Device 40 Plugin 9 +923 619 0 698 658 +1 0.0377 0 + +Device 44 Plugin 24 +457 709 0 0 0 + + +Device 47 Plugin 9 +588 710 0 430 401 +1 0.0377 0 + +Device 56 Plugin 23 +755 1026 1 242 963 +1 0 -1 0.842148 1 + +Device 57 Plugin 23 +950 1025 1 644 963 +1 0 3 0.0152308 1 + +Device 58 Plugin 5 +819 1026 1 496 963 +1 1.1664 2.89 1 1 1 0.01 + +Device 59 Plugin 4 +558 1023 0 452 799 +1 3 0 1 0.5 0 0 1 + +Device 61 Plugin 51 +626 1024 0 0 0 + + +Device 62 Plugin 5 +1017 1021 1 894 963 +1 2.3409 4.3681 0.17 4.8841 0.81 0.01 + +Device 64 Plugin 20 +691 1025 0 452 799 +1 0.5 0.5 + +Device 65 Plugin 51 +688 961 0 0 0 + + +Device 66 Plugin 23 +626 959 0 679 953 +1 0 0 1 1 + +Device 67 Plugin 1 +752 962 0 641 859 + + +Device 70 Plugin 7 +885 1024 0 831 859 +1 0.07 0.96 1 1 + +Device 71 Plugin 14 +1083 1018 1 1038 963 +1 0.17 0.71 + +Device 74 Plugin 4 +680 793 0 910 712 +1 3 0 1 0.91 0 2.98023e-09 1 + +Device 75 Plugin 5 +1012 797 1 839 715 +1 0 0.7225 0.94 4.6225 0.58 0.01 + +Device 80 Plugin 51 +747 794 0 0 0 + + +Device 81 Plugin 13 +948 796 1 718 716 +1 0.0566 0.2322 + +Device 83 Plugin 5 +881 789 1 575 716 +1 0 0.4624 0.06 9 0.75 0.74 + +Device 85 Plugin 7 +884 855 0 758 613 +1 1 1 1 1 + +Device 86 Plugin 14 +1077 795 1 983 715 +1 0.906 0.39 + +Device 87 Plugin 20 +872 685 0 663 632 +1 0.5 0.5 + +Device 88 Plugin 23 +814 793 1 328 666 +1 2 -1 1 1 + +Device 89 Plugin 23 +817 856 1 328 778 +1 2 -1 1.00333 1 + +Device 90 Plugin 15 +1282 643 0 746 628 +1 0 0.4 + +Device 93 Plugin -1 +164 314 0 0 0 +1 17 Soil and the crop + + +Device 94 Plugin -1 +194 329 0 0 0 +1 10 by nebogeo + + +Device 95 Plugin -1 +228 356 0 0 0 +1 47 Constantly changing random music, you'll either + + +Device 96 Plugin -1 +177 369 0 0 0 +1 27 love the idea or hate it... + + +Device 97 Plugin -1 +214 384 0 0 0 +1 44 The only certain thing is that it won't play + + +Device 98 Plugin -1 +169 397 0 0 0 +1 21 the same thing twice. + + +Device 99 Plugin -1 +523 302 0 0 0 +1 20 Percussion generator + + +Device 100 Plugin -1 +726 341 0 0 0 +1 9 Bass drum + + +Device 101 Plugin -1 +719 407 0 0 0 +1 7 Snare 1 + + +Device 102 Plugin -1 +747 450 0 0 0 +1 7 Snare 2 + + +Device 103 Plugin -1 +724 548 0 0 0 +1 6 Hi hat + + +Device 104 Plugin -1 +502 692 0 0 0 +1 49 Pitch generation, the bass and "lead" share this. + + +Device 105 Plugin -1 +438 629 0 0 0 +1 42 Changes of note occur on bass drum hits -> + + +Device 106 Plugin -1 +800 605 0 0 0 +1 4 Bass + + +Device 107 Plugin -1 +851 771 0 0 0 +1 11 Lead melody + + +Device 108 Plugin -1 +698 942 0 0 0 +1 49 Strange BG noises made with a bit of FM synthesis + + +Device 109 Plugin -1 +609 875 0 0 0 +1 47 <- gives the BG noises a bit of matching rhythm + + +Device 110 Plugin -1 +278 534 0 0 0 +1 23 Master clock oscillator + + +71 +1 0 0 2 1 1 +4 2 0 5 3 1 +5 3 1 9 7 0 +8 6 1 9 7 1 +7 5 0 8 6 1 +1 0 0 8 6 0 +16 8 0 2 1 0 +20 12 1 9 7 2 +19 11 0 20 12 1 +18 10 0 20 12 0 +17 9 0 18 10 0 +1 0 0 18 10 1 +21 13 0 4 2 0 +22 14 1 25 17 0 +25 17 0 9 7 3 +23 15 0 22 14 1 +26 18 0 24 16 0 +1 0 0 24 16 1 +22 14 0 25 17 1 +24 16 0 5 3 0 +24 16 0 21 13 0 +2 1 0 22 14 0 +9 7 0 28 19 0 +35 26 0 30 21 0 +28 19 0 32 23 1 +32 23 0 29 20 0 +31 22 0 36 27 1 +30 21 0 36 27 0 +37 28 0 38 29 0 +36 27 0 40 30 0 +1 0 0 31 22 0 +5 3 0 34 25 1 +44 31 0 34 25 0 +33 24 0 44 31 0 +34 25 0 47 32 0 +47 32 0 35 26 0 +56 33 0 58 35 1 +59 36 0 61 37 0 +61 37 0 64 39 0 +64 39 0 56 33 0 +57 34 0 62 38 1 +61 37 0 65 40 1 +66 41 0 65 40 0 +65 40 0 67 42 0 +67 42 0 58 35 0 +67 42 0 62 38 0 +1 0 0 61 37 1 +58 35 1 70 43 1 +70 43 0 57 34 0 +64 39 0 70 43 0 +29 20 0 6 4 0 +62 38 1 71 44 0 +71 44 0 32 23 2 +80 47 0 75 46 0 +74 45 0 80 47 0 +1 0 0 80 47 1 +80 47 0 83 49 0 +85 50 0 81 48 0 +81 48 0 75 46 1 +75 46 1 86 51 0 +86 51 0 32 23 0 +40 30 0 32 23 3 +38 29 0 87 52 0 +87 52 0 40 30 1 +89 54 0 85 50 1 +88 53 0 85 50 0 +35 26 0 89 54 0 +35 26 0 88 53 0 +90 55 0 6 4 1 +32 23 0 90 55 0 +83 49 0 81 48 1 + diff --git a/README b/README index 1ececf4..9ebc962 100644 --- a/README +++ b/README @@ -5,10 +5,12 @@ Last changed Saturday March 23 2002. SpiralSynthModular is open source software, distributed under the General Public License (GPL). See the file COPYING. -It uses the OSS /dev/dsp driver, (although this is configurable) and the GUI -it uses is FLTK (www.fltk.org). +Dependancies: +FLTK (www.fltk.org) -See www.pawfal.org for more details. +Sound output can be provided by either OSS or JACK (and therefore alsa). + +See www.pawfal.org or sourceforge.net/projects/spiralmodular for more details. ** Installing ** @@ -17,17 +19,22 @@ To build the SpiralSynthModular application, and all the plugins: ./configure make make install +spiralsynthmodular Check out the designs in the Examples directory. +For more examples be sure to check out the noize farm +(http://groups.yahoo.com/group/noize_farm) an open source repository of +ssm patches. -The GUI requires FLTK to be installed (www.fltk.org), Which in turn -require Mesa or OpenGL. +options list +-h : help +-v : print version +--NoGUI : run without GUI (only useful when loading patch from command line +--Realtime : spawn audio thread with FIFO scheduling (run as root) +--PluginPath : look for plugins in the specified directory *** Jack support *** -This release of SSM comes with an experimental JackPlugin. JACK stands for -Jack Audio Connection Kit and aims to connect Linux audio apps together. -For more information on Jack, and other apps supporting it, see: http://jackit.sourceforge.net To build the JackPlugin, use the configure option: @@ -38,8 +45,7 @@ To load the plugin, add it to .SpiralSynthModular's plugin list. *** Setting up your .SpiralSynthModular file *** This file contains all the setup variables for the program. Thes values can be -edited with the options window whilst running SSM, but they will default to the -values in the file. +edited with the options window whilst running SSM. The following variables in the are the ones to play with to get a good playback on your machine. This is usually tradeoff between quality and responsiveness (latency). You can build designs and songs at low quality (22050 samplerate etc) @@ -59,5 +65,19 @@ for any purpose. This software is provided "as is" without express or implied warranty. (Damage to ears, speakers or buildings are not my fault :)) +Contributors of code large and small (in no particular order): +Yves Usson +Erik de Castro Lopo +Takashi Iwai +Nicolas Noble +Dr Bill Bland +Dan "Pawfal" Bethell +Fade of pawfal fame +Andy Preston +Mike Rawes +Joe Jones +Patrick Shirkey +Paul Davis + Dave Griffiths - dave@pawfal.org www.pawfal.org diff --git a/SpiralSynthModular.C b/SpiralSynthModular.C index 3ed5da2..0fb2c69 100644 --- a/SpiralSynthModular.C +++ b/SpiralSynthModular.C @@ -40,7 +40,7 @@ #include "GUI/Widgets/PawfalYesNo.h" //#define DEBUG_PLUGINS -#define DEBUG_STREAM +//#define DEBUG_STREAM const static string LABEL = "SpiralSynthModular "+VER_STRING; static string TITLEBAR; @@ -262,7 +262,7 @@ SpiralWindowType *SynthModular::CreateWindow() Fl_Pixmap *tPix = new Fl_Pixmap(load_xpm); m_Load->image(tPix->copy(tPix->w(),tPix->h())); m_Load->selection_color(SpiralSynthModularInfo::GUICOL_Tool); - m_Load->tooltip("Load a design file"); + m_Load->tooltip("Load a patch file"); m_Load->callback((Fl_Callback*)cb_Load); m_MainButtons->add(m_Load); n++; @@ -273,7 +273,7 @@ SpiralWindowType *SynthModular::CreateWindow() m_Save->image(tPix->copy(tPix->w(),tPix->h())); delete tPix; m_Save->selection_color(SpiralSynthModularInfo::GUICOL_Tool); - m_Save->tooltip("Save a design file"); + m_Save->tooltip("Save a patch file"); m_Save->callback((Fl_Callback*)cb_Save); m_MainButtons->add(m_Save); n++; @@ -284,7 +284,7 @@ SpiralWindowType *SynthModular::CreateWindow() m_New->image(tPix->copy(tPix->w(),tPix->h())); delete tPix; m_New->selection_color(SpiralSynthModularInfo::GUICOL_Tool); - m_New->tooltip("New design"); + m_New->tooltip("New patch"); m_New->callback((Fl_Callback*)cb_New); m_MainButtons->add(m_New); n++; @@ -649,8 +649,13 @@ void SynthModular::AddComment(int n) void SynthModular::UpdateHostInfo() { - std::stringstream str; - str<<*this; + // used to use string streams, but this seems to cause a compiler bug + // at the moment, so fall back to using a temporary file + + //std::stringstream str; + fstream ofs("___temp.ssmtmp",ios::out); + //str<<*this; + ofs<<*this; ClearUp(); @@ -663,7 +668,12 @@ void SynthModular::UpdateHostInfo() m_Info.MIDIFILE = SpiralInfo::MIDIFILE; m_Info.POLY = SpiralInfo::POLY; - str>>*this; + fstream ifs("___temp.ssmtmp",ios::in); + //str>>*this; + ifs>>*this; + + system("rm -f ___temp.ssmtmp"); + } ////////////////////////////////////////////////////////// @@ -901,12 +911,12 @@ void SynthModular::cb_Close(Fl_Window* o, void* v) inline void SynthModular::cb_Load_i(Fl_Button* o, void* v) { - if (m_DeviceWinMap.size()>0 && !Pawfal_YesNo("Load - Loose changes to current design?")) + if (m_DeviceWinMap.size()>0 && !Pawfal_YesNo("Load - Lose changes to current patch?")) { return; } - char *fn=fl_file_chooser("Load a design", "*.ssm", NULL); + char *fn=fl_file_chooser("Load a patch", "*.ssm", NULL); if (fn && fn!='\0') { @@ -932,7 +942,7 @@ void SynthModular::cb_Load(Fl_Button* o, void* v) inline void SynthModular::cb_Save_i(Fl_Button* o, void* v) { - char *fn=fl_file_chooser("Save a design", "*.ssm", NULL); + char *fn=fl_file_chooser("Save a patch", "*.ssm", NULL); if (fn && fn!='\0') { @@ -965,7 +975,7 @@ void SynthModular::cb_Save(Fl_Button* o, void* v) inline void SynthModular::cb_New_i(Fl_Button* o, void* v) { - if (m_DeviceWinMap.size()>0 && !Pawfal_YesNo("New - Loose changes to current design?")) + if (m_DeviceWinMap.size()>0 && !Pawfal_YesNo("New - Lose changes to current patch?")) { return; } diff --git a/SpiralSynthModularInfo.C b/SpiralSynthModularInfo.C index a54736c..90d1ca1 100644 --- a/SpiralSynthModularInfo.C +++ b/SpiralSynthModularInfo.C @@ -23,7 +23,7 @@ string SpiralInfo::LOCALE = "EN"; int SpiralInfo::BUFSIZE = 512; int SpiralInfo::FRAGSIZE = 256; -int SpiralInfo::FRAGCOUNT = -1; +int SpiralInfo::FRAGCOUNT = 8; int SpiralInfo::SAMPLERATE = 44100; long SpiralInfo::MAXSAMPLE = 32767; float SpiralInfo::VALUECONV = 1.0f/MAXSAMPLE;