diff --git a/package.json b/package.json
index 8cbf012..bedea95 100644
--- a/package.json
+++ b/package.json
@@ -32,7 +32,8 @@
"@codemirror/search": "^6.5.11",
"@codemirror/state": "^6.5.2",
"@codemirror/view": "^6.38.6",
- "@csound/browser": "7.0.0-beta11",
+ "@csound/browser": "^6.18.7",
+ "csound7": "npm:@csound/browser@7.0.0-beta11",
"@hlolli/codemirror-lang-csound": "1.0.0-alpha10",
"@lezer/highlight": "^1.2.1",
"@replit/codemirror-vim": "^6.3.0",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 39ea39c..af8e1c3 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -33,8 +33,8 @@ importers:
specifier: ^6.38.6
version: 6.38.6
'@csound/browser':
- specifier: 7.0.0-beta11
- version: 7.0.0-beta11
+ specifier: ^6.18.7
+ version: 6.18.7(eslint@9.39.1)
'@hlolli/codemirror-lang-csound':
specifier: 1.0.0-alpha10
version: 1.0.0-alpha10(@codemirror/language@6.11.3)(@codemirror/state@6.5.2)(@codemirror/view@6.38.6)(codemirror@6.0.2)
@@ -47,6 +47,9 @@ importers:
codemirror:
specifier: ^6.0.2
version: 6.0.2
+ csound7:
+ specifier: npm:@csound/browser@7.0.0-beta11
+ version: '@csound/browser@7.0.0-beta11'
fuse.js:
specifier: ^7.1.0
version: 7.1.0
@@ -113,6 +116,9 @@ packages:
'@codemirror/view@6.38.6':
resolution: {integrity: sha512-qiS0z1bKs5WOvHIAC0Cybmv4AJSkAXgX5aD6Mqd2epSLlVJsQl8NG23jCVouIgkh4All/mrbdsf2UOLFnJw0tw==}
+ '@csound/browser@6.18.7':
+ resolution: {integrity: sha512-pHC83n1fzV9xp7hkFNBTWYsqkBnOS3qNAA9AJNnu3ZCG35a4rMZ5ydOuFi3qqfkLwRTd+frazabxM/lu0+u0qw==}
+
'@csound/browser@7.0.0-beta11':
resolution: {integrity: sha512-BGFTMXUdOJA1Xz1ETzbE/y8B/X6dpnrKThiqxDqj45K+ctOWtMqefgH6MojzJjWFwRs8UqhrJmVUq78SbMwGlw==}
@@ -125,6 +131,44 @@ packages:
'@emnapi/wasi-threads@1.1.0':
resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==}
+ '@eslint-community/eslint-utils@4.9.0':
+ resolution: {integrity: sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ peerDependencies:
+ eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
+
+ '@eslint-community/regexpp@4.12.2':
+ resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==}
+ engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
+
+ '@eslint/config-array@0.21.1':
+ resolution: {integrity: sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@eslint/config-helpers@0.4.2':
+ resolution: {integrity: sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@eslint/core@0.17.0':
+ resolution: {integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@eslint/eslintrc@3.3.1':
+ resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@eslint/js@9.39.1':
+ resolution: {integrity: sha512-S26Stp4zCy88tH94QbBv3XCuzRQiZ9yXofEILmglYTh/Ug/a9/umqvgFtYBAo3Lp0nsI/5/qH1CCrbdK3AP1Tw==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@eslint/object-schema@2.1.7':
+ resolution: {integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@eslint/plugin-kit@0.4.1':
+ resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
'@hlolli/codemirror-lang-csound@1.0.0-alpha10':
resolution: {integrity: sha512-pcI++pcME4oShgy6teaGzHNWoW9Cp3zdFGH/W5L2EYTkyRA4x+0DK5E7hWRmDDIhdlJE0xqaCrU4GH3oeD1GAA==}
peerDependencies:
@@ -133,6 +177,22 @@ packages:
'@codemirror/view': 6.x
codemirror: 6.x
+ '@humanfs/core@0.19.1':
+ resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==}
+ engines: {node: '>=18.18.0'}
+
+ '@humanfs/node@0.16.7':
+ resolution: {integrity: sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==}
+ engines: {node: '>=18.18.0'}
+
+ '@humanwhocodes/module-importer@1.0.1':
+ resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
+ engines: {node: '>=12.22'}
+
+ '@humanwhocodes/retry@0.4.3':
+ resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==}
+ engines: {node: '>=18.18'}
+
'@jridgewell/gen-mapping@0.3.13':
resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==}
@@ -295,17 +355,28 @@ packages:
'@types/estree@1.0.8':
resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
+ '@types/json-schema@7.0.15':
+ resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
+
'@types/node@24.7.2':
resolution: {integrity: sha512-/NbVmcGTP+lj5oa4yiYxxeBjRivKQ5Ns1eSZeB99ExsEQ6rX5XYU1Zy/gGxY/ilqtD4Etx9mKyrPxZRetiahhA==}
'@types/pako@2.0.4':
resolution: {integrity: sha512-VWDCbrLeVXJM9fihYodcLiIv0ku+AlOa/TQ1SvYOaBuyrSKgEcro95LJyIsJ4vSo6BXIxOKxiJAat04CmST9Fw==}
+ acorn-jsx@5.3.2:
+ resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
+ peerDependencies:
+ acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
+
acorn@8.15.0:
resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==}
engines: {node: '>=0.4.0'}
hasBin: true
+ ajv@6.12.6:
+ resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
+
ansi-styles@4.3.0:
resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
engines: {node: '>=8'}
@@ -314,6 +385,9 @@ packages:
resolution: {integrity: sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig==}
engines: {node: '>=14'}
+ argparse@2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+
aria-query@5.3.2:
resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==}
engines: {node: '>= 0.4'}
@@ -332,6 +406,13 @@ packages:
brace-expansion@1.1.12:
resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==}
+ builtins@5.1.0:
+ resolution: {integrity: sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg==}
+
+ callsites@3.1.0:
+ resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
+ engines: {node: '>=6'}
+
chalk@4.1.2:
resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
engines: {node: '>=10'}
@@ -368,6 +449,9 @@ packages:
color-name@1.1.4:
resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+ comlink@4.4.2:
+ resolution: {integrity: sha512-OxGdvBmJuNKSCMO4NTl1L47VRp6xn2wG4F/2hYzB6tiCb709otOxtEYCSvK80PtjODfXXZu8ds+Nw5kVCjqd2g==}
+
concat-map@0.0.1:
resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
@@ -377,6 +461,10 @@ packages:
crelt@1.0.6:
resolution: {integrity: sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==}
+ cross-spawn@7.0.6:
+ resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
+ engines: {node: '>= 8'}
+
debug@4.4.3:
resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==}
engines: {node: '>=6.0'}
@@ -386,6 +474,9 @@ packages:
supports-color:
optional: true
+ deep-is@0.1.4:
+ resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
+
deepmerge@4.3.1:
resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==}
engines: {node: '>=0.10.0'}
@@ -394,15 +485,100 @@ packages:
resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==}
engines: {node: '>=8'}
+ escape-string-regexp@4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
+
+ eslint-plugin-es@4.1.0:
+ resolution: {integrity: sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==}
+ engines: {node: '>=8.10.0'}
+ peerDependencies:
+ eslint: '>=4.19.1'
+
+ eslint-plugin-n@15.7.0:
+ resolution: {integrity: sha512-jDex9s7D/Qial8AGVIHq4W7NswpUD5DPDL2RH8Lzd9EloWUuvUkHfv4FRLMipH5q2UtyurorBkPeNi1wVWNh3Q==}
+ engines: {node: '>=12.22.0'}
+ peerDependencies:
+ eslint: '>=7.0.0'
+
+ eslint-scope@8.4.0:
+ resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ eslint-utils@2.1.0:
+ resolution: {integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==}
+ engines: {node: '>=6'}
+
+ eslint-utils@3.0.0:
+ resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==}
+ engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0}
+ peerDependencies:
+ eslint: '>=5'
+
+ eslint-visitor-keys@1.3.0:
+ resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==}
+ engines: {node: '>=4'}
+
+ eslint-visitor-keys@2.1.0:
+ resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==}
+ engines: {node: '>=10'}
+
+ eslint-visitor-keys@3.4.3:
+ resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+
+ eslint-visitor-keys@4.2.1:
+ resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ eslint@9.39.1:
+ resolution: {integrity: sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ hasBin: true
+ peerDependencies:
+ jiti: '*'
+ peerDependenciesMeta:
+ jiti:
+ optional: true
+
esm-env@1.2.2:
resolution: {integrity: sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==}
+ espree@10.4.0:
+ resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ esquery@1.6.0:
+ resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==}
+ engines: {node: '>=0.10'}
+
esrap@2.1.0:
resolution: {integrity: sha512-yzmPNpl7TBbMRC5Lj2JlJZNPml0tzqoqP5B1JXycNUwtqma9AKCO0M2wHrdgsHcy1WRW7S9rJknAMtByg3usgA==}
+ esrecurse@4.3.0:
+ resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
+ engines: {node: '>=4.0'}
+
+ estraverse@5.3.0:
+ resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
+ engines: {node: '>=4.0'}
+
+ esutils@2.0.3:
+ resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
+ engines: {node: '>=0.10.0'}
+
eventemitter3@4.0.7:
resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==}
+ fast-deep-equal@3.1.3:
+ resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
+
+ fast-json-stable-stringify@2.1.0:
+ resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
+
+ fast-levenshtein@2.0.6:
+ resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
+
fdir@6.5.0:
resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==}
engines: {node: '>=12.0.0'}
@@ -412,6 +588,21 @@ packages:
picomatch:
optional: true
+ file-entry-cache@8.0.0:
+ resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==}
+ engines: {node: '>=16.0.0'}
+
+ find-up@5.0.0:
+ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
+ engines: {node: '>=10'}
+
+ flat-cache@4.0.1:
+ resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==}
+ engines: {node: '>=16'}
+
+ flatted@3.3.3:
+ resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==}
+
fs.realpath@1.0.0:
resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
@@ -420,14 +611,25 @@ packages:
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
os: [darwin]
+ function-bind@1.1.2:
+ resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
+
fuse.js@7.1.0:
resolution: {integrity: sha512-trLf4SzuuUxfusZADLINj+dE8clK1frKdmqiJNb1Es75fmI5oY6X2mxLVUciLLjxqw/xr72Dhy+lER6dGd02FQ==}
engines: {node: '>=10'}
+ glob-parent@6.0.2:
+ resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
+ engines: {node: '>=10.13.0'}
+
glob@7.2.3:
resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
deprecated: Glob versions prior to v9 are no longer supported
+ globals@14.0.0:
+ resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==}
+ engines: {node: '>=18'}
+
google-closure-compiler-java@20221102.0.1:
resolution: {integrity: sha512-rMKLEma3uSe/6MGHtivDezTv4u5iaDEyxoy9No+1WruPSZ5h1gBZLONcfCA8JaoGojFPdHZI1qbwT0EveEWnAg==}
@@ -458,6 +660,22 @@ packages:
resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
engines: {node: '>=8'}
+ hasown@2.0.2:
+ resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
+ engines: {node: '>= 0.4'}
+
+ ignore@5.3.2:
+ resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
+ engines: {node: '>= 4'}
+
+ import-fresh@3.3.1:
+ resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==}
+ engines: {node: '>=6'}
+
+ imurmurhash@0.1.4:
+ resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
+ engines: {node: '>=0.8.19'}
+
inflight@1.0.6:
resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
@@ -465,19 +683,54 @@ packages:
inherits@2.0.4:
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+ is-core-module@2.16.1:
+ resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==}
+ engines: {node: '>= 0.4'}
+
+ is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+
is-reference@3.0.3:
resolution: {integrity: sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==}
isarray@1.0.0:
resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==}
+ isexe@2.0.0:
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+
jazz-midi@1.7.9:
resolution: {integrity: sha512-c8c4BBgwxdsIr1iVm53nadCrtH7BUlnX3V95ciK/gbvXN/ndE5+POskBalXgqlc/r9p2XUbdLTrgrC6fou5p9w==}
engines: {node: '>=10.0.0'}
+ js-yaml@4.1.1:
+ resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==}
+ hasBin: true
+
+ json-buffer@3.0.1:
+ resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
+
+ json-schema-traverse@0.4.1:
+ resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
+
+ json-stable-stringify-without-jsonify@1.0.1:
+ resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
+
jzz@1.9.6:
resolution: {integrity: sha512-J7ENLhXwfm2BNDKRUrL8eKtPhUS/CtMBpiafxQHDBcOWSocLhearDKEdh+ylnZFcr5OXWTed0gj6l/txeQA9vg==}
+ keyv@4.5.4:
+ resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
+
+ levn@0.4.1:
+ resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
+ engines: {node: '>= 0.8.0'}
+
lightningcss-android-arm64@1.30.2:
resolution: {integrity: sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==}
engines: {node: '>= 12.0.0'}
@@ -551,6 +804,13 @@ packages:
locate-character@3.0.0:
resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==}
+ locate-path@6.0.0:
+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+ engines: {node: '>=10'}
+
+ lodash.merge@4.6.2:
+ resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
+
lucide-svelte@0.545.0:
resolution: {integrity: sha512-lVza6hIAf1abADTU1ThyNp+M3bQZtzTGQ9EQZ2xo3n9ftkd4QcWbDB2ekP2MqRLTJpeLXX5gaFEgFZtbWCnyqg==}
peerDependencies:
@@ -577,16 +837,49 @@ packages:
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
hasBin: true
+ natural-compare@1.4.0:
+ resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
+
once@1.4.0:
resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+ optionator@0.9.4:
+ resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
+ engines: {node: '>= 0.8.0'}
+
+ p-limit@3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+ engines: {node: '>=10'}
+
+ p-locate@5.0.0:
+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+ engines: {node: '>=10'}
+
pako@2.1.0:
resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==}
+ parent-module@1.0.1:
+ resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
+ engines: {node: '>=6'}
+
+ path-browserify@1.0.1:
+ resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==}
+
+ path-exists@4.0.0:
+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
+ engines: {node: '>=8'}
+
path-is-absolute@1.0.1:
resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
engines: {node: '>=0.10.0'}
+ path-key@3.1.1:
+ resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
+ engines: {node: '>=8'}
+
+ path-parse@1.0.7:
+ resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
+
picocolors@1.1.1:
resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
@@ -598,9 +891,20 @@ packages:
resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==}
engines: {node: ^10 || ^12 || >=14}
+ prelude-ls@1.2.1:
+ resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
+ engines: {node: '>= 0.8.0'}
+
process-nextick-args@2.0.1:
resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
+ punycode@2.3.1:
+ resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
+ engines: {node: '>=6'}
+
+ rambda@7.5.0:
+ resolution: {integrity: sha512-y/M9weqWAH4iopRd7EHDEQQvpFPHj1AA3oHozE9tfITHUtTR7Z9PSlIRRG2l1GuW7sefC1cXFfIcF+cgnShdBA==}
+
ramda@0.28.0:
resolution: {integrity: sha512-9QnLuG/kPVgWvMQ4aODhsBUFKOUmnbUnsSXACv+NCQZcHbeb+v8Lodp8OVxtRULN1/xOyYLLaL6npE6dMq5QTA==}
@@ -614,6 +918,10 @@ packages:
resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==}
engines: {node: '>= 14.18.0'}
+ regexpp@3.2.0:
+ resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==}
+ engines: {node: '>=8'}
+
remove-trailing-separator@1.1.0:
resolution: {integrity: sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==}
@@ -621,6 +929,15 @@ packages:
resolution: {integrity: sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==}
engines: {node: '>= 0.10'}
+ resolve-from@4.0.0:
+ resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
+ engines: {node: '>=4'}
+
+ resolve@1.22.11:
+ resolution: {integrity: sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==}
+ engines: {node: '>= 0.4'}
+ hasBin: true
+
rimraf@3.0.2:
resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
deprecated: Rimraf versions prior to v4 are no longer supported
@@ -678,6 +995,19 @@ packages:
safe-buffer@5.1.2:
resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
+ semver@7.7.3:
+ resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==}
+ engines: {node: '>=10'}
+ hasBin: true
+
+ shebang-command@2.0.0:
+ resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
+ engines: {node: '>=8'}
+
+ shebang-regex@3.0.0:
+ resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
+ engines: {node: '>=8'}
+
source-map-js@1.2.1:
resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
engines: {node: '>=0.10.0'}
@@ -692,6 +1022,10 @@ packages:
string_decoder@1.1.1:
resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==}
+ strip-json-comments@3.1.1:
+ resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
+ engines: {node: '>=8'}
+
style-mod@4.1.2:
resolution: {integrity: sha512-wnD1HyVqpJUI2+eKZ+eo1UwghftP6yuFheBqqe+bWCotBjC2K1YnteJILRMs3SM4V/0dLEW1SC27MWP5y+mwmw==}
@@ -699,6 +1033,10 @@ packages:
resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
engines: {node: '>=8'}
+ supports-preserve-symlinks-flag@1.0.0:
+ resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
+ engines: {node: '>= 0.4'}
+
svelte-check@4.3.3:
resolution: {integrity: sha512-RYP0bEwenDXzfv0P1sKAwjZSlaRyqBn0Fz1TVni58lqyEiqgwztTpmodJrGzP6ZT2aHl4MbTvWP6gbmQ3FOnBg==}
engines: {node: '>= 18.0.0'}
@@ -721,6 +1059,10 @@ packages:
tslib@2.8.1:
resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
+ type-check@0.4.0:
+ resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
+ engines: {node: '>= 0.8.0'}
+
typescript@5.9.3:
resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==}
engines: {node: '>=14.17'}
@@ -732,6 +1074,9 @@ packages:
unmute-ios-audio@3.3.0:
resolution: {integrity: sha512-MmoCOrsS2gn3wLT2tT+hF56Q4V4kksIKn2LHrwAtX6umzQwQHDWSh1slMzH+0WuxTZ62s3w8/wsfIII1FQ7ACg==}
+ uri-js@4.4.1:
+ resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
+
util-deprecate@1.0.2:
resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
@@ -756,9 +1101,22 @@ packages:
web-midi-api@2.4.0:
resolution: {integrity: sha512-tTfLdxa5LpOP1NgWByV458iYKgSLhlsIwqCpfbcJuyjProNtuf5UnX97K4JNyuQCqkR+6thQAIsk2BOMSrKaCA==}
+ which@2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+ engines: {node: '>= 8'}
+ hasBin: true
+
+ word-wrap@1.2.5:
+ resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
+ engines: {node: '>=0.10.0'}
+
wrappy@1.0.2:
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+ yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
+
zimmerframe@1.1.4:
resolution: {integrity: sha512-B58NGBEoc8Y9MWWCQGl/gq9xBCe4IiKM0a2x7GZdQKOW5Exr8S1W24J6OgM1njK8xCRGvAJIL/MxXHf6SkmQKQ==}
@@ -814,6 +1172,23 @@ snapshots:
style-mod: 4.1.2
w3c-keyname: 2.2.8
+ '@csound/browser@6.18.7(eslint@9.39.1)':
+ dependencies:
+ comlink: 4.4.2
+ eslint-plugin-n: 15.7.0(eslint@9.39.1)
+ eventemitter3: 4.0.7
+ google-closure-compiler: 20221102.0.1
+ google-closure-library: 20221102.0.0
+ path-browserify: 1.0.1
+ rambda: 7.5.0
+ rimraf: 3.0.2
+ standardized-audio-context: 25.3.77
+ text-encoding-shim: 1.0.5
+ unmute-ios-audio: 3.3.0
+ web-midi-api: 2.4.0
+ transitivePeerDependencies:
+ - eslint
+
'@csound/browser@7.0.0-beta11':
dependencies:
eventemitter3: 4.0.7
@@ -843,6 +1218,52 @@ snapshots:
tslib: 2.8.1
optional: true
+ '@eslint-community/eslint-utils@4.9.0(eslint@9.39.1)':
+ dependencies:
+ eslint: 9.39.1
+ eslint-visitor-keys: 3.4.3
+
+ '@eslint-community/regexpp@4.12.2': {}
+
+ '@eslint/config-array@0.21.1':
+ dependencies:
+ '@eslint/object-schema': 2.1.7
+ debug: 4.4.3
+ minimatch: 3.1.2
+ transitivePeerDependencies:
+ - supports-color
+
+ '@eslint/config-helpers@0.4.2':
+ dependencies:
+ '@eslint/core': 0.17.0
+
+ '@eslint/core@0.17.0':
+ dependencies:
+ '@types/json-schema': 7.0.15
+
+ '@eslint/eslintrc@3.3.1':
+ dependencies:
+ ajv: 6.12.6
+ debug: 4.4.3
+ espree: 10.4.0
+ globals: 14.0.0
+ ignore: 5.3.2
+ import-fresh: 3.3.1
+ js-yaml: 4.1.1
+ minimatch: 3.1.2
+ strip-json-comments: 3.1.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@eslint/js@9.39.1': {}
+
+ '@eslint/object-schema@2.1.7': {}
+
+ '@eslint/plugin-kit@0.4.1':
+ dependencies:
+ '@eslint/core': 0.17.0
+ levn: 0.4.1
+
'@hlolli/codemirror-lang-csound@1.0.0-alpha10(@codemirror/language@6.11.3)(@codemirror/state@6.5.2)(@codemirror/view@6.38.6)(codemirror@6.0.2)':
dependencies:
'@codemirror/language': 6.11.3
@@ -853,6 +1274,17 @@ snapshots:
ramda: 0.30.1
style-mod: 4.1.2
+ '@humanfs/core@0.19.1': {}
+
+ '@humanfs/node@0.16.7':
+ dependencies:
+ '@humanfs/core': 0.19.1
+ '@humanwhocodes/retry': 0.4.3
+
+ '@humanwhocodes/module-importer@1.0.1': {}
+
+ '@humanwhocodes/retry@0.4.3': {}
+
'@jridgewell/gen-mapping@0.3.13':
dependencies:
'@jridgewell/sourcemap-codec': 1.5.5
@@ -983,20 +1415,35 @@ snapshots:
'@types/estree@1.0.8': {}
+ '@types/json-schema@7.0.15': {}
+
'@types/node@24.7.2':
dependencies:
undici-types: 7.14.0
'@types/pako@2.0.4': {}
+ acorn-jsx@5.3.2(acorn@8.15.0):
+ dependencies:
+ acorn: 8.15.0
+
acorn@8.15.0: {}
+ ajv@6.12.6:
+ dependencies:
+ fast-deep-equal: 3.1.3
+ fast-json-stable-stringify: 2.1.0
+ json-schema-traverse: 0.4.1
+ uri-js: 4.4.1
+
ansi-styles@4.3.0:
dependencies:
color-convert: 2.0.1
ansis@4.2.0: {}
+ argparse@2.0.1: {}
+
aria-query@5.3.2: {}
automation-events@7.1.13:
@@ -1013,6 +1460,12 @@ snapshots:
balanced-match: 1.0.2
concat-map: 0.0.1
+ builtins@5.1.0:
+ dependencies:
+ semver: 7.7.3
+
+ callsites@3.1.0: {}
+
chalk@4.1.2:
dependencies:
ansi-styles: 4.3.0
@@ -1052,39 +1505,176 @@ snapshots:
color-name@1.1.4: {}
+ comlink@4.4.2: {}
+
concat-map@0.0.1: {}
core-util-is@1.0.3: {}
crelt@1.0.6: {}
+ cross-spawn@7.0.6:
+ dependencies:
+ path-key: 3.1.1
+ shebang-command: 2.0.0
+ which: 2.0.2
+
debug@4.4.3:
dependencies:
ms: 2.1.3
+ deep-is@0.1.4: {}
+
deepmerge@4.3.1: {}
detect-libc@2.1.2: {}
+ escape-string-regexp@4.0.0: {}
+
+ eslint-plugin-es@4.1.0(eslint@9.39.1):
+ dependencies:
+ eslint: 9.39.1
+ eslint-utils: 2.1.0
+ regexpp: 3.2.0
+
+ eslint-plugin-n@15.7.0(eslint@9.39.1):
+ dependencies:
+ builtins: 5.1.0
+ eslint: 9.39.1
+ eslint-plugin-es: 4.1.0(eslint@9.39.1)
+ eslint-utils: 3.0.0(eslint@9.39.1)
+ ignore: 5.3.2
+ is-core-module: 2.16.1
+ minimatch: 3.1.2
+ resolve: 1.22.11
+ semver: 7.7.3
+
+ eslint-scope@8.4.0:
+ dependencies:
+ esrecurse: 4.3.0
+ estraverse: 5.3.0
+
+ eslint-utils@2.1.0:
+ dependencies:
+ eslint-visitor-keys: 1.3.0
+
+ eslint-utils@3.0.0(eslint@9.39.1):
+ dependencies:
+ eslint: 9.39.1
+ eslint-visitor-keys: 2.1.0
+
+ eslint-visitor-keys@1.3.0: {}
+
+ eslint-visitor-keys@2.1.0: {}
+
+ eslint-visitor-keys@3.4.3: {}
+
+ eslint-visitor-keys@4.2.1: {}
+
+ eslint@9.39.1:
+ dependencies:
+ '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1)
+ '@eslint-community/regexpp': 4.12.2
+ '@eslint/config-array': 0.21.1
+ '@eslint/config-helpers': 0.4.2
+ '@eslint/core': 0.17.0
+ '@eslint/eslintrc': 3.3.1
+ '@eslint/js': 9.39.1
+ '@eslint/plugin-kit': 0.4.1
+ '@humanfs/node': 0.16.7
+ '@humanwhocodes/module-importer': 1.0.1
+ '@humanwhocodes/retry': 0.4.3
+ '@types/estree': 1.0.8
+ ajv: 6.12.6
+ chalk: 4.1.2
+ cross-spawn: 7.0.6
+ debug: 4.4.3
+ escape-string-regexp: 4.0.0
+ eslint-scope: 8.4.0
+ eslint-visitor-keys: 4.2.1
+ espree: 10.4.0
+ esquery: 1.6.0
+ esutils: 2.0.3
+ fast-deep-equal: 3.1.3
+ file-entry-cache: 8.0.0
+ find-up: 5.0.0
+ glob-parent: 6.0.2
+ ignore: 5.3.2
+ imurmurhash: 0.1.4
+ is-glob: 4.0.3
+ json-stable-stringify-without-jsonify: 1.0.1
+ lodash.merge: 4.6.2
+ minimatch: 3.1.2
+ natural-compare: 1.4.0
+ optionator: 0.9.4
+ transitivePeerDependencies:
+ - supports-color
+
esm-env@1.2.2: {}
+ espree@10.4.0:
+ dependencies:
+ acorn: 8.15.0
+ acorn-jsx: 5.3.2(acorn@8.15.0)
+ eslint-visitor-keys: 4.2.1
+
+ esquery@1.6.0:
+ dependencies:
+ estraverse: 5.3.0
+
esrap@2.1.0:
dependencies:
'@jridgewell/sourcemap-codec': 1.5.5
+ esrecurse@4.3.0:
+ dependencies:
+ estraverse: 5.3.0
+
+ estraverse@5.3.0: {}
+
+ esutils@2.0.3: {}
+
eventemitter3@4.0.7: {}
+ fast-deep-equal@3.1.3: {}
+
+ fast-json-stable-stringify@2.1.0: {}
+
+ fast-levenshtein@2.0.6: {}
+
fdir@6.5.0(picomatch@4.0.3):
optionalDependencies:
picomatch: 4.0.3
+ file-entry-cache@8.0.0:
+ dependencies:
+ flat-cache: 4.0.1
+
+ find-up@5.0.0:
+ dependencies:
+ locate-path: 6.0.0
+ path-exists: 4.0.0
+
+ flat-cache@4.0.1:
+ dependencies:
+ flatted: 3.3.3
+ keyv: 4.5.4
+
+ flatted@3.3.3: {}
+
fs.realpath@1.0.0: {}
fsevents@2.3.3:
optional: true
+ function-bind@1.1.2: {}
+
fuse.js@7.1.0: {}
+ glob-parent@6.0.2:
+ dependencies:
+ is-glob: 4.0.3
+
glob@7.2.3:
dependencies:
fs.realpath: 1.0.0
@@ -1094,6 +1684,8 @@ snapshots:
once: 1.4.0
path-is-absolute: 1.0.1
+ globals@14.0.0: {}
+
google-closure-compiler-java@20221102.0.1: {}
google-closure-compiler-linux@20221102.0.1:
@@ -1121,6 +1713,19 @@ snapshots:
has-flag@4.0.0: {}
+ hasown@2.0.2:
+ dependencies:
+ function-bind: 1.1.2
+
+ ignore@5.3.2: {}
+
+ import-fresh@3.3.1:
+ dependencies:
+ parent-module: 1.0.1
+ resolve-from: 4.0.0
+
+ imurmurhash@0.1.4: {}
+
inflight@1.0.6:
dependencies:
once: 1.4.0
@@ -1128,18 +1733,49 @@ snapshots:
inherits@2.0.4: {}
+ is-core-module@2.16.1:
+ dependencies:
+ hasown: 2.0.2
+
+ is-extglob@2.1.1: {}
+
+ is-glob@4.0.3:
+ dependencies:
+ is-extglob: 2.1.1
+
is-reference@3.0.3:
dependencies:
'@types/estree': 1.0.8
isarray@1.0.0: {}
+ isexe@2.0.0: {}
+
jazz-midi@1.7.9: {}
+ js-yaml@4.1.1:
+ dependencies:
+ argparse: 2.0.1
+
+ json-buffer@3.0.1: {}
+
+ json-schema-traverse@0.4.1: {}
+
+ json-stable-stringify-without-jsonify@1.0.1: {}
+
jzz@1.9.6:
dependencies:
jazz-midi: 1.7.9
+ keyv@4.5.4:
+ dependencies:
+ json-buffer: 3.0.1
+
+ levn@0.4.1:
+ dependencies:
+ prelude-ls: 1.2.1
+ type-check: 0.4.0
+
lightningcss-android-arm64@1.30.2:
optional: true
@@ -1191,6 +1827,12 @@ snapshots:
locate-character@3.0.0: {}
+ locate-path@6.0.0:
+ dependencies:
+ p-locate: 5.0.0
+
+ lodash.merge@4.6.2: {}
+
lucide-svelte@0.545.0(svelte@5.39.13):
dependencies:
svelte: 5.39.13
@@ -1211,14 +1853,45 @@ snapshots:
nanoid@3.3.11: {}
+ natural-compare@1.4.0: {}
+
once@1.4.0:
dependencies:
wrappy: 1.0.2
+ optionator@0.9.4:
+ dependencies:
+ deep-is: 0.1.4
+ fast-levenshtein: 2.0.6
+ levn: 0.4.1
+ prelude-ls: 1.2.1
+ type-check: 0.4.0
+ word-wrap: 1.2.5
+
+ p-limit@3.1.0:
+ dependencies:
+ yocto-queue: 0.1.0
+
+ p-locate@5.0.0:
+ dependencies:
+ p-limit: 3.1.0
+
pako@2.1.0: {}
+ parent-module@1.0.1:
+ dependencies:
+ callsites: 3.1.0
+
+ path-browserify@1.0.1: {}
+
+ path-exists@4.0.0: {}
+
path-is-absolute@1.0.1: {}
+ path-key@3.1.1: {}
+
+ path-parse@1.0.7: {}
+
picocolors@1.1.1: {}
picomatch@4.0.3: {}
@@ -1229,8 +1902,14 @@ snapshots:
picocolors: 1.1.1
source-map-js: 1.2.1
+ prelude-ls@1.2.1: {}
+
process-nextick-args@2.0.1: {}
+ punycode@2.3.1: {}
+
+ rambda@7.5.0: {}
+
ramda@0.28.0: {}
ramda@0.30.1: {}
@@ -1247,10 +1926,20 @@ snapshots:
readdirp@4.1.2: {}
+ regexpp@3.2.0: {}
+
remove-trailing-separator@1.1.0: {}
replace-ext@1.0.1: {}
+ resolve-from@4.0.0: {}
+
+ resolve@1.22.11:
+ dependencies:
+ is-core-module: 2.16.1
+ path-parse: 1.0.7
+ supports-preserve-symlinks-flag: 1.0.0
+
rimraf@3.0.2:
dependencies:
glob: 7.2.3
@@ -1295,6 +1984,14 @@ snapshots:
safe-buffer@5.1.2: {}
+ semver@7.7.3: {}
+
+ shebang-command@2.0.0:
+ dependencies:
+ shebang-regex: 3.0.0
+
+ shebang-regex@3.0.0: {}
+
source-map-js@1.2.1: {}
source-map@0.5.7: {}
@@ -1309,12 +2006,16 @@ snapshots:
dependencies:
safe-buffer: 5.1.2
+ strip-json-comments@3.1.1: {}
+
style-mod@4.1.2: {}
supports-color@7.2.0:
dependencies:
has-flag: 4.0.0
+ supports-preserve-symlinks-flag@1.0.0: {}
+
svelte-check@4.3.3(picomatch@4.0.3)(svelte@5.39.13)(typescript@5.9.3):
dependencies:
'@jridgewell/trace-mapping': 0.3.31
@@ -1353,12 +2054,20 @@ snapshots:
tslib@2.8.1: {}
+ type-check@0.4.0:
+ dependencies:
+ prelude-ls: 1.2.1
+
typescript@5.9.3: {}
undici-types@7.14.0: {}
unmute-ios-audio@3.3.0: {}
+ uri-js@4.4.1:
+ dependencies:
+ punycode: 2.3.1
+
util-deprecate@1.0.2: {}
vinyl-sourcemaps-apply@0.2.1:
@@ -1384,6 +2093,14 @@ snapshots:
dependencies:
jzz: 1.9.6
+ which@2.0.2:
+ dependencies:
+ isexe: 2.0.0
+
+ word-wrap@1.2.5: {}
+
wrappy@1.0.2: {}
+ yocto-queue@0.1.0: {}
+
zimmerframe@1.1.4: {}
diff --git a/project.csd b/project.csd
new file mode 100644
index 0000000..08a6fbb
--- /dev/null
+++ b/project.csd
@@ -0,0 +1,27 @@
+
+
+-m0
+
+
+0dbfs=1
+nchnls=2
+ksmps = 64
+sr = 44100
+seed 0
+#include "globals.orc"
+#include "lib.orc"
+#include "synth.orc"
+#include "scale.orc"
+#include "livecode.orc"
+
+
+
+f 0 z
+f 1 0 2049 -16 0 204 -5.6072 1 1843 -10 0 ; kind of karplustrong
+
+
+
+
+
+
+
diff --git a/public/system-files/Documentation.orc.bak b/public/system-files/Documentation.orc.bak
new file mode 100644
index 0000000..6d8021a
--- /dev/null
+++ b/public/system-files/Documentation.orc.bak
@@ -0,0 +1,477 @@
+
+
+
+ _ _ _ _ _____ _____ _ _ _____ _
+| | (_) | (_) / __ \/ __ \| \ | | / __ \ | |
+| | ___ _____ ___ ___ __| |_ _ __ __ _ | / \/| / \/| \| | | / \/ ___ __| | ___
+| | | \ \ / / _ \ / __/ _ \ / _` | | '_ \ / _` | | | | | | . ` | | | / _ \ / _` |/ _ \
+| |___| |\ V / __/ | (_| (_) | (_| | | | | | (_| | | \__/\| \__/\| |\ | | \__/\ (_) | (_| | __/
+\_____/_| \_/ \___| \___\___/ \__,_|_|_| |_|\__, | \____/ \____/\_| \_/ \____/\___/ \__,_|\___|
+ __/ |
+ |___/
+
+
+ ; Ce document contient toutes les informations sur les fonctions (mots) utilisables
+ ; dans la plateforme de livecoding.
+ ; Vous pouvez copier-coller les exemples dans le fichier "livecode.orc".
+
+
+ _
+| |
+| |_ ___ _ __ ___ _ __ ___
+| __/ _ \ '_ ` _ \| '_ \ / _ \
+| || __/ | | | | | |_) | (_) |
+ \__\___|_| |_| |_| .__/ \___/
+ | |
+ |_|
+
+
+ ; Pour modifier le tempo, il faut utiliser la fonction de tempo
+ ; Par défaut, le tempo est de 1, ce qui signifie 1 pulsation par seconde
+ ; Si on met 2, la pulsation est donc de ... 2 pulsations par secondes
+ tempo(2) ; [0.001 - 10]
+ ; La modification du tempo modifiera la vitesse du rythme de TOUS les sons en train d'être joués
+
+ ; Un attracteur chaotique gère d'autres paramètres du temps, on peut changer sa vitesse en écrivant
+ ; Il influence notamment la vitesse d'évolution des modes "sauvages" (voir les Sons)
+ chaos_speed(4) ; [0.1 - 100]
+
+ ; Pour entendre le tempo, on peut utiliser le metronome (sans accent ici pour éviter l'erreur)
+ metronome
+
+
+ _____
+/ ___|
+\ `--. ___ _ __ ___
+ `--. \/ _ \| '_ \/ __|
+/\__/ / (_) | | | \__ \
+\____/ \___/|_| |_|___/
+
+ ; "ping" - son artificiel percussif brillant
+ ; Paramètres :
+ ; - Rythme
+ ; - Volume [0-1]
+ ; - Hauteur (note) [0-100]
+ ; - Durée [>0]
+ ping(beat(4), 0.3, 50, 1/4)
+
+ ; "buzzy" - Un son plus doux que Ping et dont le rythme interne peut être imprévisible
+ ; Paramètres :
+ ; - Rythme
+ ; - Volume [0-1]
+ ; - Hauteur (note de base de l'accord) [0-100]
+ ; - Durée [>0]
+ buzzy(beat(1/4), 0.5, 50, 4)
+
+ ; "glidy" - un son qui glisse vers la note choisie
+ ; - Rythme
+ ; - Volume [0-1]
+ ; - Hauteur (note de base de l'accord) [0-100]
+ ; - Durée [>0]
+ glidy(beat(1), 0.5, 60, 1)
+
+ ; "darkwave" - une vague sombre, qui gronde quand elle devient forte
+ ; - Rythme
+ ; - Volume [0-1]
+ ; - Hauteur (note de base de l'accord) [0-100]
+ ; - Durée [>0]
+ darkwave(beat(1/4), 0.6, 30, 4)
+
+ ; "brightwave" - une vague brillante et lumineuse
+ ; - Rythme
+ ; - Volume [0-1]
+ ; - Hauteur (note de base de l'accord) [0-100]
+ ; - Durée [>0]
+ brightwave(beat(1/4), 0.6, 30, 4)
+
+ ; "buzzwave" - une vague qui fait bzzz
+ ; - Rythme
+ ; - Volume [0-1]
+ ; - Hauteur (note de base de l'accord) [0-100]
+ ; - Durée [>0]
+ buzzwave(beat(1/4), 0.6, 30, 4)
+
+ ; "noisywave" - une vague avec un bruit de fond, comme l'écume de la mer
+ ; - Rythme
+ ; - Volume [0-1]
+ ; - Hauteur (note de base de l'accord) [0-100]
+ ; - Durée [>0]
+ noisywave(beat(1/4), 0.6, 30, 4)
+
+ ; "crunchy" - un son percussif qui croustille
+ ; - Rythme
+ ; - Volume [0-1]
+ ; - Hauteur (note de base de l'accord) [0-100]
+ ; - Durée [>0]
+ crunchy(beat(4), 0.6, 20, 1/4)
+
+ ; Strike : un son percussif et très saturé (distordu, sauvage)
+ ; Paramètres :
+ ; - Rythme
+ ; - Volume [0-1]
+ ; - Hauteur (note) [0-100]
+ ; - Durée [>0]
+ strike(beat(1), 0.9, 8, 1)
+
+ ; Smooth : un son doux, assez rond
+ ; Paramètres :
+ ; - Rythme
+ ; - Volume [0-1]
+ ; - Hauteur (note) [0-100]
+ ; - Durée [>0]
+ smooth(beat(1/3), 0.5, 20, 4)
+
+ ; Bounce : un son qui rebondit et qui brille !
+ ; Paramètres :
+ ; - Rythme
+ ; - Volume [0-1]
+ ; - Hauteur (note) [0-100]
+ ; - Durée [>0]
+ bounce(beat(1/2), 0.5, 30, 3)
+
+______ _ _ _ _ _
+| ___| | | (_) | | | | | |
+| |_ ___ _ __ ___| |_ _ ___ _ __ ___ __| | ___ _ __ _ _| |_| |__ _ __ ___ ___
+| _/ _ \| '_ \ / __| __| |/ _ \| '_ \/ __| / _` |/ _ \ | '__| | | | __| '_ \| '_ ` _ \ / _ \
+| || (_) | | | | (__| |_| | (_) | | | \__ \ | (_| | __/ | | | |_| | |_| | | | | | | | | __/
+\_| \___/|_| |_|\___|\__|_|\___/|_| |_|___/ \__,_|\___| |_| \__, |\__|_| |_|_| |_| |_|\___|
+ __/ |
+ |___/
+
+
+ ; "beat" - pulsation régulière
+ ;Paramètres :
+ ; - Vitesse (par rapport au tempo) [> 0]
+ beat(2) // 2 pulsations par temps
+
+ ; "swing" - pulsation régulière + une pulsation swing
+ ; Paramètres :
+ ; - Vitesse (par rapport au tempo) [> 0]
+ ; - Swing [0 - 1]
+ swing(2, 0.75)
+ swing(2, 3/4)
+
+ ; "rhythm" - rythme écrit sous la forme d'une liste
+ ; Paramètres :
+ ; - liste de 1 et 0 sous forme d'un "array"
+ ; - Vitesse (par rapport au tempo) [> 0]
+ rhythm(array(1, 0, 0, 1, 0, 0, 1, 1 ), 1)
+ ; Peut aussi s'écrire
+ rhythm(
+ array(1, 0, 0, 1),
+ 1)
+
+ ; "drunk" - rythme aléatoire mais quand même lié au tempo
+ ; Paramètres :
+ ; - Vitesse (par rapport au tempo) [> 0]
+ ; - Taux d'aléatoire [0 - 1]
+ drunk(2, 0.8)
+
+ ; "euclidian" - rythmes basés sur la division euclidienne
+ ; (voir https://dbkaplun.github.io/euclidean-rhythm/)
+ ; Paramètres :
+ ; - Vitesse [> 0]
+ ; - Nombre de "steps" [> 0]
+ ; - Division du cercle [> 0]
+ ; - Rotation [0 - 1]
+ euclidian(2, 3, 7, 0)
+
+ ; "chaos_rhythm" - rythmes basés sur l'horloge chaotique principale
+ ; Paramètres
+ ; - Choix de l'horloge [1, 2 ou 3]
+ ; - Seuil de détection [0 - 1]
+ chaos_rhythm(1, 0.6)
+
+
+______ _ _ _ _ _
+| ___| | | (_) | | | | | |
+| |_ ___ _ __ ___| |_ _ ___ _ __ ___ __| | ___ ___ ___ _ __ | |_ _ __ ___ | | ___
+| _/ _ \| '_ \ / __| __| |/ _ \| '_ \/ __| / _` |/ _ \ / __/ _ \| '_ \| __| '__/ _ \| |/ _ \
+| || (_) | | | | (__| |_| | (_) | | | \__ \ | (_| | __/ | (_| (_) | | | | |_| | | (_) | | __/
+\_| \___/|_| |_|\___|\__|_|\___/|_| |_|___/ \__,_|\___| \___\___/|_| |_|\__|_| \___/|_|\___|
+
+
+
+ ; "chance" - fait évoluer un paramètre aléatoirement - comme un lancer de dé
+ ; Paramètres :
+ ; - Minimum - valeur minimum possible [< Maximum]
+ ; - Maximum - valeur maximum possible [> Minimum]
+ chance(1, 5) // Donnera à chaque fois un nombre (décimal) entre 1 et 5 différent
+
+ ; "trajectory" - part d'une valeur et évolue progressivement vers une autre
+ ; Paramètres :
+ ; - Départ - valeur de départ
+ ; - Durée - Durée totale de l'évolution (en nombre de temps) [> 0]
+ ; - Arrivée - Valeur finale
+ trajectory(0, 10, 1) // évolue de 0 à 1 progressivement en 10 temps
+
+ ; "oscillation" - va et vient entre deux valeurs
+ ; Paramètres :
+ ; - Minimum : valeur minimum [< Maximum]
+ ; - Maximum : valeur maximum [> Minimum]
+ ; - Vitesse (par rapport au tempo) [> 0]
+ oscillation(10, 30, 1/2) // évolue progressivement entre 10 et 30 avec un cycle de 2 temps
+
+ ; "alternate" - alterne entre deux valeurs à une certaine vitesse et avec une proportion
+ ; Paramètres :
+ ; - Valeur 1
+ ; - Valeur 2
+ ; - Vitesse (par rapport au tempo) [> 0]
+ ; - Proportion de la valeur 1 [0 - 1] -
+ ; par exemple une proportion de 0.75 fait qu'on restera 3/4 du temps sur la valeur 1, et 1/4 du temps sur la valeur 2
+ alternate(50, 55, 1, 0.75) // alterne entre 50 et 55 tous les temps (75% du temps sur valeur 1)
+
+ ; "sequence" - lit une suite de valeurs (utile pour les notes et mélodies)
+ ; Paramètres :
+ ; - liste de valeurs
+ ; - Vitesse (par rapport au tempo) [> 0]
+ sequence(array(30, 33, 35), 1)
+
+ ; "chaos_control" - génère une valeur qui change en permanence en fonction de l'attracteur
+ ; chaotique principal
+ ; Paramètres :
+ ; - Choix de l'attracteur [1, 2 ou 3]
+ ; - Valeur minimum
+ ; - Valeur maximum
+ chaos_control(1, 0.5, 1) ; Pour du volume
+ chaos_control(2, 40, 60) ; Pour une note
+
+
+ _
+ | |
+ _____ _____ _ __ ___ _ __ | | ___ ___
+ / _ \ \/ / _ \ '_ ` _ \| '_ \| |/ _ \/ __|
+| __/> < __/ | | | | | |_) | | __/\__ \
+ \___/_/\_\___|_| |_| |_| .__/|_|\___||___/
+ | |
+ |_|
+
+ crunchy(beat(4), 0.5, 10, 1)
+ tempo(0.5)
+ darkwave(beat(1/2), 0.5, 30, 2)
+ darkwave(beat(1/2), 0.5, 33, 2)
+ darkwave(beat(1/4), 0.5, 40, 4)
+
+ chaos_speed(1)
+
+ noisywave(beat(1/4), 0.5, 50, 4)
+ noisywave(beat(1/4), 0.5, 55, 4)
+
+ brightwave(beat(1/2), 0.7, 70, 1)
+ buzzwave(beat(1/2), 0.8, 60, 2, 2)
+ _ _ _ _ _ _ _
+ /\| |/\ /\| |/\ /\| |/\ /\| |/\ /\| |/\ /\| |/\ /\| |/\
+ \ ` ' / \ ` ' / \ ` ' / \ ` ' / \ ` ' / \ ` ' / \ ` ' /
+|_ _|_ _|_ _|_ _|_ _|_ _|_ _|
+ / , . \ / , . \ / , . \ / , . \ / , . \ / , . \ / , . \
+ \/|_|\/ \/|_|\/ \/|_|\/ \/|_|\/ \/|_|\/ \/|_|\/ \/|_|\/
+
+ /*
+ crunchy(beat(4), 0.6, 10, 1, 2)
+ crunchy(beat(8), 0.6, 50, 1, 2)
+ crunchy(beat(8), 0.6, 55, 1)
+ */
+ ;crunchy(beat(8), 0.8, sequence(array(60, 57, 57, 63, 58), 8), 1)
+
+ tempo(.5)
+ chaos_speed(7)
+/*
+ brightwave(beat(1/8), 0.5, 50, 3, 3)
+ brightwave(beat(1/8), 0.5, 53, 3)
+ brightwave(beat(1/8), 0.5, 57, 3, 3)
+ */
+
+ /*
+ glidy(beat(1/2), 0.7, 60, 2)
+ glidy(beat(1/3), 0.7, 64, 2)
+ glidy(beat(1/4), 0.7, 65, 2)
+ */
+
+ /*
+ darkwave(beat(1/4), 0.6, 30, 5, 1)
+ darkwave(beat(1/4), 0.6, 32, 5, 1)
+ darkwave(beat(1/4), 0.6, 27, 5)
+ darkwave(beat(1/4), 0.6, 20, 5)
+ */
+
+ _ _ _ _ _ _ _
+ /\| |/\ /\| |/\ /\| |/\ /\| |/\ /\| |/\ /\| |/\ /\| |/\
+ \ ` ' / \ ` ' / \ ` ' / \ ` ' / \ ` ' / \ ` ' / \ ` ' /
+|_ _|_ _|_ _|_ _|_ _|_ _|_ _|
+ / , . \ / , . \ / , . \ / , . \ / , . \ / , . \ / , . \
+ \/|_|\/ \/|_|\/ \/|_|\/ \/|_|\/ \/|_|\/ \/|_|\/ \/|_|\/
+
+ /*
+ darkwave(beat(1/4), .7, 60, 4)
+ darkwave(beat(1/6), .7, 42, 4)
+ darkwave(beat(1/4), .7, 67, 4)
+ darkwave(beat(1/6), .7, 10, 4)
+
+
+ crunchy(beat(4), 0.9, 10, 1, 2)
+ crunchy(beat(8), 0.7, 50, 1, 2)
+ crunchy(beat(8), 0.7, 55, 1)
+
+ crunchy(beat(8), 0.7, sequence(array(60, 57, 57, 63, 58), 8), 1)
+
+ tempo(.125)
+ chaos_speed(8)
+
+ ping(beat(4), 1, sequence(array(50, 55, 50, 57, 50, 58), 1), 1)
+ */
+ /*
+ brightwave(beat(1/8), 0.5, 50, 3, 3)
+ brightwave(beat(1/8), 0.5, 53, 3)
+ brightwave(beat(1/8), 0.5, 57, 3, 3)
+ */
+/*
+ brightwave(beat(1/8), 0.5, 50, 3, 3)
+ brightwave(beat(1/8), 0.5, 53, 3)
+ brightwave(beat(1/8), 0.5, 57, 3, 3)
+ */
+ /*
+ tempo(1)
+ glidy(beat(1/2), 0.3, 60, 2)
+ glidy(beat(1/3), 0.3, 64, 3)
+ glidy(beat(1/4), 0.4, 65, 4)
+ glidy(beat(1/7), 0.5, 40, 5)
+ glidy(beat(1/5), 0.4, 44, 6)
+ glidy(beat(1/6), 0.5, 45, 7)
+ */
+ /*
+ noisywave(beat(1/4), 0.9, 20, 6)
+ noisywave(beat(1/4), 0.9, 48, 6)
+ noisywave(beat(1/8), 0.9, 34, 6)
+ noisywave(beat(1/8), 0.9, 39, 6)
+*/
+
+
+
+
+
+
+
+ _ _ _ _ _ _ _
+ /\| |/\ /\| |/\ /\| |/\ /\| |/\ /\| |/\ /\| |/\ /\| |/\
+ \ ` ' / \ ` ' / \ ` ' / \ ` ' / \ ` ' / \ ` ' / \ ` ' /
+|_ _|_ _|_ _|_ _|_ _|_ _|_ _|
+ / , . \ / , . \ / , . \ / , . \ / , . \ / , . \ / , . \
+ \/|_|\/ \/|_|\/ \/|_|\/ \/|_|\/ \/|_|\/ \/|_|\/ \/|_|\/
+
+
+
+ tempo(1)
+ chaos_speed(1)
+ darkwave(beat(1/4), .5, 60, 4)
+ darkwave(beat(1/6), .65, 36, 6)
+ darkwave(beat(1/8), .65, 38, 8)
+ darkwave(beat(1/4), .65, 67, 4)
+ darkwave(beat(1/6), .65, 24, 6)
+ darkwave(beat(1/3), .65, 40, 4)
+ darkwave(beat(1/5), .65, 31, 5)
+
+ crunchy(beat(4), 1, 12, 1/2, 2)
+ crunchy(beat(1), 1, 22, 1)
+ crunchy(beat(8), 0.6, 50, 1/2, 2)
+ crunchy(beat(8), 0.6, 55, 1/2)
+
+ crunchy(beat(8), 0.7, sequence(array(60, 57, 57, 63, 58), 8), 1/2)
+ crunchy(beat(8), 0.8, sequence(array(72, 48, 74, 75, 46, 50, 78), 8), 1/2)
+
+
+ /*
+ tempo(.125)
+ chaos_speed(8)
+
+ ping(beat(4), 1, sequence(array(50, 55, 50, 57, 50, 58), 1), 1)
+ */
+ /*
+ brightwave(beat(1/8), 0.5, 50, 3, 3)
+ brightwave(beat(1/8), 0.5, 53, 3)
+ brightwave(beat(1/8), 0.5, 57, 3, 3)
+ */
+/*
+ brightwave(beat(1/8), 0.5, 50, 3, 3)
+ brightwave(beat(1/8), 0.5, 53, 3)
+ brightwave(beat(1/8), 0.5, 57, 3, 3)
+ */
+ /*
+ tempo(1)
+ glidy(beat(1/2), 0.3, 60, 2)
+ glidy(beat(1/3), 0.3, 64, 3)
+ glidy(beat(1/4), 0.4, 65, 4)
+ glidy(beat(1/7), 0.5, 40, 5)
+ glidy(beat(1/5), 0.4, 44, 6)
+ glidy(beat(1/6), 0.5, 45, 7)
+ */
+ /*
+ noisywave(beat(1/4), 0.9, 20, 6)
+ noisywave(beat(1/4), 0.9, 48, 6)
+ noisywave(beat(1/8), 0.9, 34, 6)
+ noisywave(beat(1/8), 0.9, 39, 6)
+*/
+
+
+
+/*
+Exemple réalisé en première séance à l'école du Centre
+ crunchy(beat(2), 0.9, chance(15, 80), 0.5)
+ buzzy(beat(1/4), 0.8, 10, 4)
+ tempo(4)
+ glidy(beat(1), 0.6, 60, 1)
+ darkwave(beat(1/4), 0.9, 30, 4)
+*/
+
+
+
+
+/*
+
+ ping(beat(8), 1, 10, 1/8)
+ ping(beat(8), 1, sequence(array(20, 22), 1/4), 1/8)
+ crunchy(beat(4), 0.9, chance(30, 80), 1/6)
+ crunchy(beat(4), 0.8, chance(30, 80), 1/6)
+ kick(beat(2), 0.5)
+ snare(beat(1), 0.8, 100, 1/10)
+
+*/
+
+/*
+ noisywave(beat(1/4), 0.6, 80, 4)
+ noisywave(beat(1/8), 0.6, 60, 8)
+ noisywave(beat(1/6), 0.6, 40, 6)
+ snare(rhythm(array(1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1), 8), 0.5)
+ kick(rhythm(array(0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0), 8), 0.7)
+*/
+
+/*
+ ; MELODY
+ ping(beat(2), oscillation(.5, 1, 1/2), sequence(array(52, 55, 50, 48, 50)+sequence(array(2, 0), 2), 2), oscillation(.5, 2, 1/2))
+
+ ; CHORD
+ buzzwave(beat(4), oscillation(0, .5, 1/6), sequence(array(52, 55, 50, 48, 50)-24, 1/2), 1)
+ buzzwave(beat(4), oscillation(0, .5, 1/3), sequence(array(52, 55, 50, 48, 50)-7, 1/2), 2)
+
+ ; BUZZ
+ noisywave(beat(1/4), .5, sequence(array(52, 55), 2), 8)
+*/
+
+
+
+ _ _ _ _ _ _ _
+ /\| |/\ /\| |/\ /\| |/\ /\| |/\ /\| |/\ /\| |/\ /\| |/\
+ \ ` ' / \ ` ' / \ ` ' / \ ` ' / \ ` ' / \ ` ' / \ ` ' /
+|_ _|_ _|_ _|_ _|_ _|_ _|_ _|
+ / , . \ / , . \ / , . \ / , . \ / , . \ / , . \ / , . \
+ \/|_|\/ \/|_|\/ \/|_|\/ \/|_|\/ \/|_|\/ \/|_|\/ \/|_|\/
+
+ ; Rythme 1
+ kick(swing(1, 0.75), 0.5)
+ snare(swing(0.5, 0.25), 0.7)
+ hihat( rhythm(array(1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1), 4), 0.5, 95, 0.1)
+
+
+
+
+; Ping à corriger
+; Noisywave avec mode sauvage ou son grave avec mode sauvage aussi
diff --git a/public/system-files/archives.orc b/public/system-files/archives.orc
index 6fc82fb..6ca27ff 100644
--- a/public/system-files/archives.orc
+++ b/public/system-files/archives.orc
@@ -140,14 +140,14 @@
kmet = drunk(0.125, 0.25)
ktog init 0
krhythm_mult init 1
- if(kmet == 1 ) then
+ if (kmet == 1 ) then
ktog = 1 - ktog
- if(rint:k(1, 6) == 1) then
+ if (rint:k(1, 6) == 1) then
krhythm_mult = rint:k(1, 3)
endif
endif
- if(ktog == 1) then
+ if (ktog == 1) then
strike( rhythm(array(1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1), 4 * krhythm_mult),
oscillation(0.1, 0.6, 10),
sequence(array(60, 64, 66, 67, 69), 8) +
diff --git a/public/system-files/archives.orc.bak b/public/system-files/archives.orc.bak
new file mode 100644
index 0000000..6fc82fb
--- /dev/null
+++ b/public/system-files/archives.orc.bak
@@ -0,0 +1,162 @@
+
+ kick(swing(1, 0.75), 0.5)
+ snare(swing(0.5, 0.25), 0.7)
+ hihat( rhythm(array(1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1), 4), 0.3, 95, 0.05)
+
+ tempo(0.5)
+ chaos_speed(0.5)
+ ; Base rythmique
+ crunchy(beat(8), 1, 8, 1/4)
+ crunchy(beat(2), 1, 20, 1/2)
+ crunchy(beat(8), 1, trajectory(60, 15, 30), 1/4)
+ crunchy(beat(4), 1, 23, 1/4)
+
+ ; Mélodie aléatoire
+ buzzy(beat(8), 0.8, chance(60, 90), 1/16)
+ buzzy(beat(8), 0.8, chance(70, 80), 1/16)
+ buzzy(beat(4), 0.8, trajectory(80, 10, 60), 1/8)
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+ ping(beat(1), 0.8, 50,1)
+ ping(beat(1/2), 0.2, 90,2)
+ ping(beat(4), 0.9, 41, 1/3)
+ ping(beat(4), 0.9, 46, 1/4)
+ ping(beat(1/2), 0.8, 37,3)
+ ping(beat(1/4), 0.8, 60,4)
+ ping(beat(1/2), 0.8, 62,2)
+ ping(beat(1/6), 0.8, 67,6)
+
+ buzzwave(beat(1/3), 0.8, sequence(array(20, 25), 1), 3)
+
+ tempo(1)
+ snare(swing(2, 0.25), 0.9)
+ kick(swing(0.5, 0.75), 0.5)
+ hihat( swing(4, 0.25), 0.6, chance(80, 100), 0.1)
+ hihat( beat(8), 0.8, 100, 0.05)
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+; Lunégroove
+ noisywave(beat(1/4), 0.9, sequence(array(20, 30, 23, 27), 1/4), 4)
+ noisywave(beat(1/8), 0.9, sequence(array(60, 60, 65, 53), 1/8), 8)
+ noisywave(beat(1/6), 0.9, sequence(array(40, 43, 46), 1/6), 6)
+ glidy(rhythm(array(1, 1, 1, 0, 0, 1), 2), 0.5, sequence(array(70, 75, 53, 51), 3), 1/4)
+ glidy(rhythm(array(0, 1, 0, 1, 1, 1), 2), 0.5, sequence(array(73, 65, 60), 3), 1/2)
+ brightwave(beat(1/4), 1, sequence(array(15, 18, 23), 1/4), 7)
+
+ snare(rhythm(array(1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1), 4), 0.5)
+ kick(rhythm(array(0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0), 2), 0.7)
+ tempo(1)
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+ ; LA VOITURE EN PANNE !!!!!!
+
+ tempo(1.5)
+ kick(rhythm(array(1, 0, 0, 0, 0, 1, 0, 0), 2), 0.45)
+ snare(rhythm(array(0, 0, 1, 0, 0, 0, 1, 0), 2), 0.25)
+ hihat(beat(4), 0.15, 95, 1/12)
+
+ ping(beat(2), 0.45, sequence(array(20, 21), 1/8), .5)
+ ping(beat(1/4), .95, sequence(array(20, 21)-12, 1/8), 4)
+
+ crunchy(beat(1), .95, sequence(array(20, 18, 28, 21), 1/7)+12*sequence(array(1, 2, 3), 1), 1+sequence(array(1, 2, 3), 1))
+
+ brightwave(swing(1/8, .95), 0.55, sequence(array(21, 20, 25, 30)+24, 1/8), 6)
+
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+ ; on va faire fortune dans le reggae
+
+ tempo(1)
+ crunchy(rhythm(array(1, 1, 1, 1, 1, 1, 0, 0), 8), 0.8, sequence(array(11, 17), 1/2), 1/4)
+
+ ping(rhythm(array(0, 1), 2), 0.9, sequence(array(43, 41), 1/2), 0.25 )
+ ping(rhythm(array(0, 1), 2), 0.9, sequence(array(47, 45), 1/2), 0.25)
+ ping(rhythm(array(0, 1), 2), 0.9, sequence(array(50, 48), 1/2), 0.25)
+
+ glidy(beat(1/4), 0.2, sequence(array(49, 55, 52, 67, 46, 70), 1/4), 6)
+
+ kick(rhythm(array(1, 0), 2), 0.8)
+ snare(beat(1), 0.6)
+ hihat(rhythm(array(1, 1, 1, 0, 1, 0), 6), 0.7, 90, 0.1)
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+ ; Ardoise
+ tempo(1.25)
+ kick(rhythm(array(1, 1, 0, 0, 0, 1), 4), .5)
+ snare(beat(1/2), .5)
+ hihat(rhythm(array(0, 1, 1, 0, 1, 1, 1), 4), .25, 95-4*swing(1, .25), 1/8)
+
+ ping(beat(6), .35, sequence(array(48, 51, 55, 60, 48, 51, 55, 60, 47, 51, 55, 60, 44, 51, 55, 60), oscillation(6, 12, 1/32)), oscillation(.25, 3, 1/8))
+ ping(beat(6), .35, sequence(array(48, 51, 55, 60, 48, 51, 55, 60, 47, 51, 55, 60, 44, 51, 55, 60), oscillation(2, 16, 1/24)), oscillation(.25, 3, 1/3))
+ darkwave(beat(3), .85, sequence(array(48, 51, 55, 60, 47, 51, 55, 60, 44, 51, 55, 60)-24, oscillation(3, 9, 1/48)), oscillation(1, 3, 1/3))
+
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;KS
+ chaos_speed(1)
+ $tempo = .5
+ ;ks(beat(1), 0.8, 44, .5)
+ ks(beat(.25), 0.8, 16, .5)
+ ks(beat(1), 0.9, 52, .5)
+ ks(beat(3), 0.9, 64, 1)
+ ks(beat(4), 0.9, 83, 2)
+ ;ks(beat(8), 0.5, sequence(array(75, 83, 80, 85, 83), 1), .25)
+ ;ks(beat( alternate(.5, 2, .5, 0.5) ), 0.8, 30, 1)
+
+ ;ping(beat(4), 0.8, 72, .8)
+ ;crunchy(beat(16), 0.6, trajectory(16, 4, 32), .5)
+
+
+
+
+
+
+
+
+
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;MOBILE 1
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+ $tempo = 0.25
+ klf = abs(lfo:k(1, 0.05))
+ kilf = 1 - klf
+ strike(beat(1/16), 0.9 * klf , alternate(40, 28, 1/4, 0.5), 16)
+ strike(beat(1/16), 0.9 * klf , alternate(6, 18, 1/4, 0.5), 16)
+ strike(beat(1/12), 0.9 * kilf , alternate(30, 18, 1/8, 0.5), 12)
+
+ kmet = drunk(0.125, 0.25)
+ ktog init 0
+ krhythm_mult init 1
+ if(kmet == 1 ) then
+ ktog = 1 - ktog
+ if(rint:k(1, 6) == 1) then
+ krhythm_mult = rint:k(1, 3)
+ endif
+ endif
+
+ if(ktog == 1) then
+ strike( rhythm(array(1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1), 4 * krhythm_mult),
+ oscillation(0.1, 0.6, 10),
+ sequence(array(60, 64, 66, 67, 69), 8) +
+ sequence(array(2, 3, 8, 1, 5, 10), 3.3), 1/2)
+ else
+ buzzy(beat(krhythm_mult * 2), 0.9, oscillation(40, 70, 10), 1)
+ buzzy(beat(1/2), 0.8 * klf , alternate(44, 33, 1/4, 0.5), 2)
+ buzzy(beat(1/3), 0.8 * kilf , alternate(24, 21, 1/8, 0.5), 2)
+ endif
+
+ smooth(drunk(1/10, 0.3), 0.5, sequence(array(60, 30, 64, 67), 1), 8)
+ smooth(drunk(1/9, 0.3), 0.5, sequence(array(48, 18, 66, 70, 65), 1/2), 8)
\ No newline at end of file
diff --git a/public/system-files/examples.orc.bak b/public/system-files/examples.orc.bak
new file mode 100644
index 0000000..0cfa6be
--- /dev/null
+++ b/public/system-files/examples.orc.bak
@@ -0,0 +1,9 @@
+░▒▓████████▓▒░▒▓█▓▒░░▒▓█▓▒░░▒▓██████▓▒░░▒▓██████████████▓▒░░▒▓███████▓▒░░▒▓█▓▒░ ░▒▓████████▓▒░░▒▓███████▓▒░
+░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░ ░▒▓█▓▒░ ░▒▓█▓▒░
+░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░ ░▒▓█▓▒░ ░▒▓█▓▒░
+░▒▓██████▓▒░ ░▒▓██████▓▒░░▒▓████████▓▒░▒▓█▓▒░░▒▓█▓▒░░▒▓█▓▒░▒▓███████▓▒░░▒▓█▓▒░ ░▒▓██████▓▒░ ░▒▓██████▓▒░
+░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░ ░▒▓█▓▒░ ░▒▓█▓▒░ ░▒▓█▓▒░
+░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░ ░▒▓█▓▒░ ░▒▓█▓▒░ ░▒▓█▓▒░
+░▒▓████████▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░ ░▒▓████████▓▒░▒▓████████▓▒░▒▓███████▓▒░
+
+
\ No newline at end of file
diff --git a/public/system-files/globals.orc b/public/system-files/globals.orc
index 6d70c2d..36afc26 100644
--- a/public/system-files/globals.orc
+++ b/public/system-files/globals.orc
@@ -14,7 +14,7 @@ endin
opcode metronome, 0, 0
kmet = gkbeat
- if(kmet == 1) then
+ if (kmet == 1) then
schedulek("metronome_instr", 0, 0.1)
endif
endop
@@ -101,15 +101,15 @@ schedule("lorenz_sched", 0, $LORENZ_TIME)
ifq mtof inote
ksavage init 0
- if(isavage_mode == 1) then
+ if (isavage_mode == 1) then
ksavage = savage_1()
- elseif(isavage_mode == 2) then
+ elseif (isavage_mode == 2) then
ksavage = savage_2()
- elseif(isavage_mode == 3) then
+ elseif (isavage_mode == 3) then
ksavage = savage_3()
- elseif(isavage_mode == 4) then
+ elseif (isavage_mode == 4) then
ksavage = savage_4()
- elseif(isavage_mode == 5) then
+ elseif (isavage_mode == 5) then
ksavage = savage_5()
endif
@@ -119,30 +119,30 @@ schedule("lorenz_sched", 0, $LORENZ_TIME)
#define FQPERC #
isavage_mode = rint:i(1, 5)
ksavage init 0
- if(isavage_mode == 1) then
+ if (isavage_mode == 1) then
ksavage = savage_1()
- elseif(isavage_mode == 2) then
+ elseif (isavage_mode == 2) then
ksavage = savage_2()
- elseif(isavage_mode == 3) then
+ elseif (isavage_mode == 3) then
ksavage = savage_3()
- elseif(isavage_mode == 4) then
+ elseif (isavage_mode == 4) then
ksavage = savage_4()
- elseif(isavage_mode == 5) then
+ elseif (isavage_mode == 5) then
ksavage = savage_5()
endif
#
#define SAVAGE(isavage_mode') #
ksavage init 0
- if(isavage_mode == 1) then
+ if (isavage_mode == 1) then
ksavage = savage_1()
- elseif(isavage_mode == 2) then
+ elseif (isavage_mode == 2) then
ksavage = savage_2()
- elseif(isavage_mode == 3) then
+ elseif (isavage_mode == 3) then
ksavage = savage_3()
- elseif(isavage_mode == 4) then
+ elseif (isavage_mode == 4) then
ksavage = savage_4()
- elseif(isavage_mode == 5) then
+ elseif (isavage_mode == 5) then
ksavage = savage_5()
endif
#
diff --git a/public/system-files/globals.orc.bak b/public/system-files/globals.orc.bak
new file mode 100644
index 0000000..6d70c2d
--- /dev/null
+++ b/public/system-files/globals.orc.bak
@@ -0,0 +1,159 @@
+gktempo init 1
+gkphasor init 0
+gkslowph init 0
+gkbeat init 0
+gkgain init 0.05
+#define tempo #gktempo#
+
+instr metronome_instr
+ kenv = expseg(1.01, p3, 0.01) - 0.01
+ asig = oscili(0.3, 3000) * kenv
+ chnmix(asig, "out1")
+ chnmix(asig, "out2")
+endin
+
+opcode metronome, 0, 0
+ kmet = gkbeat
+ if(kmet == 1) then
+ schedulek("metronome_instr", 0, 0.1)
+ endif
+endop
+
+instr gclock
+ gkphasor = phasor:k(gktempo)
+ gkslowph = phasor:k(gktempo / 100)
+ gkbeat = metro:k(gktempo)
+endin
+schedule("gclock", 0, -1)
+
+opcode reset_clock, 0, 0
+ turnoff2( nstrnum("gclock"), 0, 0)
+ schedule("gclock", 0.01, -1)
+endop
+
+instr audio_out
+
+ a1 = clip:a(chnget:a("out1"), 0, 0.99);limit:a(chnget:a("out1"), -1, 1) ;* gkgain
+ a2 = clip:a(chnget:a("out2"), 0, 0.99);limit:a(chnget:a("out2"), -1, 1) ;* gkgain
+ chnclear("out1")
+ chnclear("out2")
+ outs a1, a2
+endin
+schedule("audio_out", 0, -1)
+
+
+gklorenz_speed init 0.00001
+
+gklorenz_x init 0
+gklorenz_y init 0
+gklorenz_z init 0
+gkmirlorenz_x init 0
+gkmirlorenz_y init 0
+gkmirlorenz_z init 0
+galorenz_x init 0
+galorenz_y init 0
+galorenz_z init 0
+
+opcode lorenz_ctl, aaa, kppp
+ kspeed, ix, iy, iz xin
+ kspeed = limit:k(kspeed, 0.0000001, 0.09)
+ ksv init 10
+ krv init 28
+ kbv init 2.6
+; kh init 0.001
+ kh = kspeed
+ ix = (ix != 0) ? ix : 0.6
+ iy = (iy != 0) ? iy : 0.6
+ iz = (iz != 0) ? iz : 0.6
+ iskip = 1
+ ax1, ay1, az1 lorenz ksv, krv, kbv, kh, ix, iy, iz, iskip
+
+ ax1 /= krv
+ ay1 /= krv
+ az1 /= krv
+
+ xout ax1, ay1, az1
+endop
+
+#define LORENZ_TIME #720#
+
+instr lorenz_sched
+ ix = random:i(0, 1)
+ iy = random:i(0, 1)
+ iz = random:i(0, 1)
+ ax, ay, az lorenz_ctl gklorenz_speed, ix, iy, iz
+ gklorenz_x = lag(k(ax), 0.01)
+ gklorenz_y = lag(k(ay), 0.01)
+ gklorenz_z = lag(k(az), 0.01)
+ gkmirlorenz_x = mirror:k(gklorenz_x, 0, 1)
+ gkmirlorenz_y = mirror:k(gklorenz_y, 0, 1)
+ gkmirlorenz_z = mirror:k(gklorenz_z, 0, 1)
+ galorenz_x = ax
+ galorenz_y = ay
+ galorenz_z = az
+ schedule("lorenz_sched", $LORENZ_TIME, $LORENZ_TIME)
+endin
+
+schedule("lorenz_sched", 0, $LORENZ_TIME)
+
+#define FQ #
+ isavage_mode init p6
+ ifq mtof inote
+
+ ksavage init 0
+ if(isavage_mode == 1) then
+ ksavage = savage_1()
+ elseif(isavage_mode == 2) then
+ ksavage = savage_2()
+ elseif(isavage_mode == 3) then
+ ksavage = savage_3()
+ elseif(isavage_mode == 4) then
+ ksavage = savage_4()
+ elseif(isavage_mode == 5) then
+ ksavage = savage_5()
+ endif
+
+ kfq = limit:k(ifq + (ksavage * ifq), 20, 20000)
+#
+
+#define FQPERC #
+ isavage_mode = rint:i(1, 5)
+ ksavage init 0
+ if(isavage_mode == 1) then
+ ksavage = savage_1()
+ elseif(isavage_mode == 2) then
+ ksavage = savage_2()
+ elseif(isavage_mode == 3) then
+ ksavage = savage_3()
+ elseif(isavage_mode == 4) then
+ ksavage = savage_4()
+ elseif(isavage_mode == 5) then
+ ksavage = savage_5()
+ endif
+#
+
+#define SAVAGE(isavage_mode') #
+ ksavage init 0
+ if(isavage_mode == 1) then
+ ksavage = savage_1()
+ elseif(isavage_mode == 2) then
+ ksavage = savage_2()
+ elseif(isavage_mode == 3) then
+ ksavage = savage_3()
+ elseif(isavage_mode == 4) then
+ ksavage = savage_4()
+ elseif(isavage_mode == 5) then
+ ksavage = savage_5()
+ endif
+#
+
+opcode tempo, 0, k
+ kval xin
+ $tempo = limit:k(kval, 0.001, 10)
+endop
+
+opcode chaos_speed, 0, k
+ kval xin
+ gklorenz_speed = 0.0000001 * (limit:k(kval, 0.01, 100) * 10)
+endop
+
diff --git a/public/system-files/lib.orc b/public/system-files/lib.orc
index 4a979db..50f70bf 100644
--- a/public/system-files/lib.orc
+++ b/public/system-files/lib.orc
@@ -57,7 +57,7 @@ opcode array_rhythm, k, k[]
kcnt init 0
ilen = lenarray(karr)
ktrig = 0
- if( kmet > 0 ) then
+ if ( kmet > 0 ) then
kval = karr[kcnt]
ktrig = kval
kcnt = (kcnt + 1) % ilen
@@ -82,7 +82,7 @@ opcode phase_trig, k, k
kold init 1
ktrigger init 0
ktrigger = 0
- if(kold > kphase) then
+ if (kold > kphase) then
ktrigger = 1
endif
kold = kphase
@@ -92,7 +92,7 @@ endop
opcode downprint, 0, kki
kprint, kdown, imargin xin
kcnt init 0
- if(kcnt == 0) then
+ if (kcnt == 0) then
printk2(kprint, imargin)
endif
kcnt = (kcnt + 1) % kdown
@@ -101,13 +101,13 @@ endop
opcode phasor_fqmult, k, kk
kphase, kmult xin
- if(kmult <= 0) then
+ if (kmult <= 0) then
kmult = 1
endif
kfphase init 0
- if(kmult <= 1) then
+ if (kmult <= 1) then
kfphase = mfmod(gkslowph * (kmult * 100), 1)
- elseif(kmult > 1) then
+ elseif (kmult > 1) then
kfphase = mfmod(gkslowph * (kmult * 100), 1)
;kfphase= mfmod(gkphasor * kmult, 1)
endif
@@ -117,7 +117,7 @@ endop
opcode rh_subd, k, k[]P
karr[], kpdiv xin
ilen = lenarray(karr)
- if(kpdiv <= 0) then
+ if (kpdiv <= 0) then
kpdiv = ilen
endif
kdiv = kpdiv
@@ -125,7 +125,7 @@ opcode rh_subd, k, k[]P
ktr = phase_trig(kph)
kidx init 0
ktrigger = 0
- if(ktr == 1) then
+ if (ktr == 1) then
ktrigger = karr[kidx]
kidx = (kidx+1) % ilen
endif
@@ -135,7 +135,7 @@ endop
opcode rhythm, k, k[]P
karr[], kpdiv xin
ilen = lenarray(karr)
- if(kpdiv <= 0) then
+ if (kpdiv <= 0) then
kpdiv = ilen
endif
kdiv = kpdiv
@@ -143,7 +143,7 @@ opcode rhythm, k, k[]P
ktr = phase_trig(kph)
kidx init 0
ktrigger = 0
- if(ktr == 1) then
+ if (ktr == 1) then
ktrigger = karr[kidx]
kidx = (kidx+1) % ilen
endif
@@ -166,7 +166,7 @@ opcode swing, k, kk
kph = phasor_fqmult(gkphasor, kspeed)
ktr1 = phase_trig(kph)
ktr2 = 0
- if(kold < ksw && kph >= ksw) then
+ if (kold < ksw && kph >= ksw) then
ktr2 = 0.6
endif
kold = kph
@@ -219,16 +219,16 @@ endop
opcode alternate, k, kkkO
kone, ktwo, kspeed, kduty xin
- if(kduty == 0) then
+ if (kduty == 0) then
kduty = 0.5
endif
- if(kspeed <= 0) then
+ if (kspeed <= 0) then
kspeed = 1
endif
kspeed = limit:k(to_tempo_dur(kspeed), 0.0001, 1000)
kph = phasor_fqmult(gkphasor, kspeed)
kres init i(kone)
- if(kph < kduty) then
+ if (kph < kduty) then
kres = kone
else
kres = ktwo
@@ -245,7 +245,7 @@ endop
opcode oscillation, k, kkk
kmin, kmax, kspeed xin
- if(kmin > kmax) then
+ if (kmin > kmax) then
ktmp = kmin
kmin = kmax
kmax = ktmp
@@ -262,14 +262,14 @@ endop
opcode sequence, k, k[]P
karr[], kpdiv xin
ilen = lenarray(karr)
- if(kpdiv <= 0) then
+ if (kpdiv <= 0) then
kpdiv = ilen
endif
kdiv = kpdiv
kph = phasor_fqmult(gkphasor, kdiv )
ktr = phase_trig(kph)
kidx init 0
- if(ktr == 1) then
+ if (ktr == 1) then
kidx = (kidx+1) % ilen
endif
ktrigger = karr[kidx]
@@ -313,15 +313,15 @@ opcode savage_1, k, 0
ksel init 0
ksel_sig init 0
- if(trigger:k(kmod, 0.5, 0) == 1) then
+ if (trigger:k(kmod, 0.5, 0) == 1) then
ksel = rint:k(0, 2)
endif
- if(ksel == 0) then
+ if (ksel == 0) then
ksel_sig = k1
- elseif(ksel == 1) then
+ elseif (ksel == 1) then
ksel_sig = k2
- elseif(ksel == 2) then
+ elseif (ksel == 2) then
ksel_sig = k3
endif
@@ -341,7 +341,7 @@ opcode savage_3, k, 0
kduty = gkmirlorenz_y
kph = phasor:k(gkmirlorenz_x * 5 )
kres init 0
- if(kph < kduty) then
+ if (kph < kduty) then
kres = 1
else
kres = 0
@@ -358,7 +358,7 @@ opcode savage_4, k, 0
kchange init 1
kchange = changed:k(round(abs(gklorenz_x )))
kmod init 1
- if(kchange == 1) then
+ if (kchange == 1) then
iarr[0] = random:i(0, 1)
iarr[1] = random:i(0, 1)
iarr[2] = random:i(0, 1)
@@ -381,11 +381,11 @@ opcode chaos_rhythm, k, kk
kthresh = limit:k(kthresh, 0, 1)
kchoice = int(limit:k(kchoice, 1, 3.99))
kval init 0
- if(kchoice == 1) then
+ if (kchoice == 1) then
kval = gkmirlorenz_x
- elseif(kchoice == 2) then
+ elseif (kchoice == 2) then
kval = gkmirlorenz_y
- elseif(kchoice == 3) then
+ elseif (kchoice == 3) then
kval = gkmirlorenz_z
endif
@@ -399,11 +399,11 @@ opcode chaos_control, k, kkk
kmin = min:k(kmin, kmax)
kchoice = int(limit:k(kchoice, 1, 3.99))
kval init 0
- if(kchoice == 1) then
+ if (kchoice == 1) then
kval = gkmirlorenz_x
- elseif(kchoice == 2) then
+ elseif (kchoice == 2) then
kval = gkmirlorenz_y
- elseif(kchoice == 3) then
+ elseif (kchoice == 3) then
kval = gkmirlorenz_z
endif
kdiff = kmax - kmin
diff --git a/public/system-files/lib.orc.bak b/public/system-files/lib.orc.bak
new file mode 100644
index 0000000..50f70bf
--- /dev/null
+++ b/public/system-files/lib.orc.bak
@@ -0,0 +1,414 @@
+; instruments management
+instr KillImpl
+ Sinstr = p4
+ if (nstrnum(Sinstr) > 0) then
+ turnoff2(Sinstr, 0, 0)
+ endif
+ turnoff
+endin
+
+opcode kill, 0, S
+ Sinstr xin
+ schedule("KillImpl", 0, .05, Sinstr)
+endop
+
+opcode refresh, 0, S
+ Sinstr xin
+ if (nstrnum(Sinstr) > 0) then
+ kill(Sinstr)
+ schedule(Sinstr, ksmps / sr, -1)
+ endif
+endop
+
+#define _endin #
+endin
+refresh("livecoding")
+#
+
+opcode rint, i, ii
+ imin, imax xin
+ irnd = int(random:i(imin, int(imax) + 0.99))
+ xout irnd
+endop
+
+opcode rint, k, kk
+ kmin, kmax xin
+ krnd = int(random:k(kmin, int(kmax) + 0.99))
+ xout krnd
+endop
+
+opcode euclidian, k, kkkk
+ konset, kdiv, kpulses, krot xin
+ kphasor = gkphasor
+ kph = int( ( ( (kphasor + krot) * kdiv) / 1) * kpulses)
+ keucval = int((konset / kpulses) * kph)
+ kold_euc init i(keucval)
+ kold_ph init i(kph)
+ kres = ((kold_euc != keucval) && (kold_ph != kph)) ? 1 : 0
+ kold_euc = keucval
+ kold_ph = kph
+ xout kres
+endop
+
+// Simple rhythm array
+opcode array_rhythm, k, k[]
+ karr[] xin
+ kmet = gkbeat
+ kcnt init 0
+ ilen = lenarray(karr)
+ ktrig = 0
+ if ( kmet > 0 ) then
+ kval = karr[kcnt]
+ ktrig = kval
+ kcnt = (kcnt + 1) % ilen
+ endif
+
+ xout ktrig
+endop
+
+opcode trunc, k, k
+ kx xin
+ ky = (kx < 0) ? -(floor(-kx)) : floor(kx)
+ xout ky
+endop
+opcode mfmod, k, kk
+ kone, ktwo xin
+ kres = kone - trunc(kone/ktwo) * ktwo
+ xout kres
+endop
+
+opcode phase_trig, k, k
+ kphase xin
+ kold init 1
+ ktrigger init 0
+ ktrigger = 0
+ if (kold > kphase) then
+ ktrigger = 1
+ endif
+ kold = kphase
+ xout ktrigger
+endop
+
+opcode downprint, 0, kki
+ kprint, kdown, imargin xin
+ kcnt init 0
+ if (kcnt == 0) then
+ printk2(kprint, imargin)
+ endif
+ kcnt = (kcnt + 1) % kdown
+endop
+
+
+opcode phasor_fqmult, k, kk
+ kphase, kmult xin
+ if (kmult <= 0) then
+ kmult = 1
+ endif
+ kfphase init 0
+ if (kmult <= 1) then
+ kfphase = mfmod(gkslowph * (kmult * 100), 1)
+ elseif (kmult > 1) then
+ kfphase = mfmod(gkslowph * (kmult * 100), 1)
+ ;kfphase= mfmod(gkphasor * kmult, 1)
+ endif
+ xout kfphase
+endop
+
+opcode rh_subd, k, k[]P
+ karr[], kpdiv xin
+ ilen = lenarray(karr)
+ if (kpdiv <= 0) then
+ kpdiv = ilen
+ endif
+ kdiv = kpdiv
+ kph = phasor_fqmult(gkphasor, kdiv )
+ ktr = phase_trig(kph)
+ kidx init 0
+ ktrigger = 0
+ if (ktr == 1) then
+ ktrigger = karr[kidx]
+ kidx = (kidx+1) % ilen
+ endif
+ xout ktrigger
+endop
+
+opcode rhythm, k, k[]P
+ karr[], kpdiv xin
+ ilen = lenarray(karr)
+ if (kpdiv <= 0) then
+ kpdiv = ilen
+ endif
+ kdiv = kpdiv
+ kph = phasor_fqmult(gkphasor, kdiv)
+ ktr = phase_trig(kph)
+ kidx init 0
+ ktrigger = 0
+ if (ktr == 1) then
+ ktrigger = karr[kidx]
+ kidx = (kidx+1) % ilen
+ endif
+ xout ktrigger
+endop
+
+opcode beat, k, k
+ kmult xin
+ kmult = limit:k(kmult, 0.001, 1000)
+ km = rhythm(array(1), kmult)
+ ;kph = phasor:k(kmult * gktempo)
+ ;km = phase_trig(kph)
+ xout km
+endop
+
+opcode swing, k, kk
+ kspeed, ksw xin
+ ktrig init 0
+ kold init 0
+ kph = phasor_fqmult(gkphasor, kspeed)
+ ktr1 = phase_trig(kph)
+ ktr2 = 0
+ if (kold < ksw && kph >= ksw) then
+ ktr2 = 0.6
+ endif
+ kold = kph
+ ktrig = limit:k(ktr1 + ktr2, 0, 1)
+ xout ktrig
+endop
+
+opcode drunk, k, kk
+ kspeed, kdrunk xin
+ kold init 0
+ kspeed = limit:k(kspeed, 0.001, 1000)
+ knoi = random:k(0, kdrunk)
+
+ kph = phasor_fqmult(gkphasor, kspeed)
+ ;kph = phase_incr_mod(gkphasor, 1/ kspeed)
+ ktrig = limit:k(phase_trig(kph) + ((kold < knoi && kph > knoi) ? 1 : 0), 0, 1)
+
+ kold = kph
+ xout ktrig
+endop
+
+
+opcode filter_first_trig, k, k
+ ktrig xin
+ ksub init 1
+ ktrig -= ksub
+ ksub = 0
+ xout ktrig
+endop
+
+opcode check_trig, k, k
+ ktrig xin
+ kf = filter_first_trig(ktrig)
+ kres = (changed:k(kf) > 0 && kf > 0) ? 1 : 0
+ xout kres
+endop
+
+opcode to_tempo_dur, k, k
+ kdur xin
+ ktdur = kdur / gktempo
+ xout ktdur
+endop
+
+opcode chance, k, kk
+ kmin, kmax xin
+ kres = random:k(kmin, kmax)
+ xout kres
+endop
+
+opcode alternate, k, kkkO
+ kone, ktwo, kspeed, kduty xin
+
+ if (kduty == 0) then
+ kduty = 0.5
+ endif
+ if (kspeed <= 0) then
+ kspeed = 1
+ endif
+ kspeed = limit:k(to_tempo_dur(kspeed), 0.0001, 1000)
+ kph = phasor_fqmult(gkphasor, kspeed)
+ kres init i(kone)
+ if (kph < kduty) then
+ kres = kone
+ else
+ kres = ktwo
+ endif
+ xout kres
+endop
+
+opcode trajectory, k, kkk
+ kfrom, kdur, kto xin
+ kdur = to_tempo_dur(kdur)
+ kres = linseg:k( i(kfrom), i(kdur), i(kto) )
+ xout kres
+endop
+
+opcode oscillation, k, kkk
+ kmin, kmax, kspeed xin
+ if (kmin > kmax) then
+ ktmp = kmin
+ kmin = kmax
+ kmax = ktmp
+ endif
+ kspeed = limit:k(gktempo / kspeed, 0.001, 1000)
+
+ kfq = kspeed ; / gktempo
+ iphs init i(gkphasor)
+ kosc = oscili(0.5, kfq, -1, iphs) + 0.5
+ kres = kosc * (kmax - kmin) + kmin
+ xout kres
+endop
+
+opcode sequence, k, k[]P
+ karr[], kpdiv xin
+ ilen = lenarray(karr)
+ if (kpdiv <= 0) then
+ kpdiv = ilen
+ endif
+ kdiv = kpdiv
+ kph = phasor_fqmult(gkphasor, kdiv )
+ ktr = phase_trig(kph)
+ kidx init 0
+ if (ktr == 1) then
+ kidx = (kidx+1) % ilen
+ endif
+ ktrigger = karr[kidx]
+ xout ktrigger
+endop
+
+opcode random_array_int, i[], iii
+ isize, imin, imax xin
+ iarr[] init isize
+
+ icnt init 0
+ while icnt < isize do
+ iarr[icnt] = int(random:i(imin, imax+0.99))
+ icnt += 1
+ od
+ xout iarr
+endop
+
+opcode random_array_int, k[], iii
+ isize, imin, imax xin
+ kArr[] init isize
+ icnt init 0
+ iArr[] = random_array_int(isize, imin, imax)
+ while icnt < isize do
+ kArr[icnt] = iArr[icnt]
+ icnt += 1
+ od
+ xout kArr
+endop
+
+#define arr #fillarray(#
+
+; kind of random based savage
+opcode savage_1, k, 0
+ k1 = gkmirlorenz_x
+ k2 = abs(oscili:k(1, gkmirlorenz_y * 6 + 0.01))
+ k3 = rspline:k(0, gkmirlorenz_z, 1, 5)
+
+ kfq = gkmirlorenz_x * rspline:k(1, 3, 1, 5) + 0.001
+ kmod = beat(kfq) ;lfo:k(1, kfq, 3)
+
+ ksel init 0
+ ksel_sig init 0
+ if (trigger:k(kmod, 0.5, 0) == 1) then
+ ksel = rint:k(0, 2)
+ endif
+
+ if (ksel == 0) then
+ ksel_sig = k1
+ elseif (ksel == 1) then
+ ksel_sig = k2
+ elseif (ksel == 2) then
+ ksel_sig = k3
+ endif
+
+ kres = (kmod > 0) ? ksel_sig : 0
+ xout kres
+endop
+
+; direct lorenz savage mode
+opcode savage_2, k, 0
+ kmult = pow(abs(lfo:k(1, rspline:k(0, gklorenz_x, 0.1, 3), 1)),3)
+ kmod = abs(poscil:k( pow(gkmirlorenz_z, 3) * kmult, gkmirlorenz_x * gkmirlorenz_y * 40))
+ xout kmod
+endop
+
+; pwm based savage mode
+opcode savage_3, k, 0
+ kduty = gkmirlorenz_y
+ kph = phasor:k(gkmirlorenz_x * 5 )
+ kres init 0
+ if (kph < kduty) then
+ kres = 1
+ else
+ kres = 0
+ endif
+
+ kmult = mirror:k(gklorenz_z, 0, 1)
+ kres *= kmult
+ xout kres
+endop
+
+opcode savage_4, k, 0
+ iarr[] = fillarray(random:i(0, 1), random:i(0, 1), random:i(0, 1), random:i(0, 1))
+
+ kchange init 1
+ kchange = changed:k(round(abs(gklorenz_x )))
+ kmod init 1
+ if (kchange == 1) then
+ iarr[0] = random:i(0, 1)
+ iarr[1] = random:i(0, 1)
+ iarr[2] = random:i(0, 1)
+ iarr[3] = random:i(0, 1)
+ endif
+ ksel = int(abs(gklorenz_x) * 4.99) % 4
+ kres = limit:k (lineto(iarr[ksel], mirror:k(abs(gklorenz_y), 0, 1) ), 0, 1)
+ xout kres
+endop
+
+opcode savage_5, k, 0
+ kamp = pow(abs(gklorenz_x), 2)
+ kfq = 8 - (0.01 + abs(gklorenz_y) * 8)
+ kmod = oscili:k(kamp, kfq)
+ xout kmod
+endop
+
+opcode chaos_rhythm, k, kk
+ kchoice, kthresh xin
+ kthresh = limit:k(kthresh, 0, 1)
+ kchoice = int(limit:k(kchoice, 1, 3.99))
+ kval init 0
+ if (kchoice == 1) then
+ kval = gkmirlorenz_x
+ elseif (kchoice == 2) then
+ kval = gkmirlorenz_y
+ elseif (kchoice == 3) then
+ kval = gkmirlorenz_z
+ endif
+
+ kres = trigger:k(kval, kthresh, 2)
+ xout kres
+endop
+
+opcode chaos_control, k, kkk
+ kchoice, kmin, kmax xin
+ kmax = max:k(kmin, kmax)
+ kmin = min:k(kmin, kmax)
+ kchoice = int(limit:k(kchoice, 1, 3.99))
+ kval init 0
+ if (kchoice == 1) then
+ kval = gkmirlorenz_x
+ elseif (kchoice == 2) then
+ kval = gkmirlorenz_y
+ elseif (kchoice == 3) then
+ kval = gkmirlorenz_z
+ endif
+ kdiff = kmax - kmin
+ kres = kval * kdiff + kmin
+ xout kres
+endop
+
+
diff --git a/public/system-files/livecode.orc b/public/system-files/livecode.orc
index cc45500..4a711cc 100644
--- a/public/system-files/livecode.orc
+++ b/public/system-files/livecode.orc
@@ -1,3 +1,3 @@
-instr livecoding
+instr livecoding
$_endin
diff --git a/public/system-files/livecode.orc.bak b/public/system-files/livecode.orc.bak
new file mode 100644
index 0000000..cc45500
--- /dev/null
+++ b/public/system-files/livecode.orc.bak
@@ -0,0 +1,3 @@
+instr livecoding
+
+$_endin
diff --git a/public/system-files/project.csd b/public/system-files/project.csd
new file mode 100644
index 0000000..f7a36a9
--- /dev/null
+++ b/public/system-files/project.csd
@@ -0,0 +1,27 @@
+
+
+-m0 -d
+
+
+0dbfs=1
+nchnls=2
+ksmps = 64
+sr = 44100
+seed 0
+#include "globals.orc"
+#include "lib.orc"
+#include "synth.orc"
+#include "scale.orc"
+#include "livecode.orc"
+
+
+
+f 0 z
+f 1 0 2049 -16 0 204 -5.6072 1 1843 -10 0 ; kind of karplustrong
+
+
+
+
+
+
+
diff --git a/public/system-files/scale.orc b/public/system-files/scale.orc
index 1083907..3e9857f 100644
--- a/public/system-files/scale.orc
+++ b/public/system-files/scale.orc
@@ -125,16 +125,16 @@ opcode scale_up, k, ikkk
knote init ibase
kitv init 0
ilen = ftlen(iscale)
- if(ktrig == 1) then
+ if (ktrig == 1) then
kpick = (kpick + 1) ;% ilen
- if(kpick == ilen) then
+ if (kpick == ilen) then
kpick = 0
kitv = 0
endif
kitv = table(kpick, iscale) - kitv
printk2 kitv
knote = knote + kitv
- if(knote > kmax) then
+ if (knote > kmax) then
knote = kmin + (knote - kmax)
endif
endif
@@ -150,11 +150,11 @@ opcode scale_up, k, ikkk
kpick init 0
knote init ibase
ilen = ftlen(iscale)
- if(ktrig == 1) then
+ if (ktrig == 1) then
kpick = (kpick + 1) % ilen
kitv = table(kpick, iscale)
knote = knote + kitv
- if(knote > kmax) then
+ if (knote > kmax) then
knote = kmin + (knote - kmax)
endif
endif
@@ -172,11 +172,11 @@ opcode scale_down, k, ikkk
kpick init 0
knote init ibase
ilen = ftlen(iscale)
- if(ktrig == 1) then
+ if (ktrig == 1) then
kpick = (kpick + 1) % ilen
kitv = table(kpick, iscale)
knote = knote - kitv
- if(knote < kmin) then
+ if (knote < kmin) then
knote = kmax ;- (kmin - knote)
endif
endif
@@ -191,15 +191,15 @@ opcode scale_random, k, ikkk
kpick init 0
knote init ibase
ilen = ftlen(iscale)
- if(ktrig == 1) then
+ if (ktrig == 1) then
ksign = (rint:k(0, 1) == 0) ? -1 : 1
kpick = (kpick + 1) % ilen
kitv = table(kpick, iscale)
knote = knote + (kitv * ksign)
- if(knote < kmin) then
+ if (knote < kmin) then
knote = kmax ;- (kmin - knote)
endif
- if(knote > kmax) then
+ if (knote > kmax) then
knote = kmin ;+ (knote - kmax)
endif
endif
diff --git a/public/system-files/scale.orc.bak b/public/system-files/scale.orc.bak
new file mode 100644
index 0000000..1083907
--- /dev/null
+++ b/public/system-files/scale.orc.bak
@@ -0,0 +1,207 @@
+gi3semitone ftgen 0, 0, 5, -2, 0, 3, 6, 9, 12
+gi4semitone ftgen 0, 0, 4, -2, 0, 4, 8, 12
+giaeolian ftgen 0, 0, 7, -2, 0, 2, 3, 5, 7, 8, 10
+giaeolian ftgen 0, 0, 8, -2, 0, 2, 3, 5, 7, 8, 10, 12
+gialgerian ftgen 0, 0, 8, -2, 0, 2, 3, 6, 7, 8, 11, 12
+gialgerian1 ftgen 0, 0, 8, -2, 0, 2, 3, 6, 7, 8, 11, 12
+gialgerian2 ftgen 0, 0, 8, -2, 0, 2, 3, 5, 7, 8, 10, 12
+gialtered ftgen 0, 0, 8, -2, 0, 1, 3, 4, 6, 8, 10, 12
+giarabian ftgen 0, 0, 8, -2, 0, 1, 4, 5, 7, 8, 11, 12
+giaugmented ftgen 0, 0, 7, -2, 0, 3, 4, 7, 8, 11, 12
+gibalinese ftgen 0, 0, 6, -2, 0, 1, 3, 7, 8, 12
+gibebopdominant ftgen 0, 0, 9, -2, 0, 2, 4, 5, 7, 9, 10, 11, 12
+gibebopdominantflatnine ftgen 0, 0, 9, -2, 0, 1, 4, 5, 7, 9, 10, 11, 12
+gibebopmajor ftgen 0, 0, 9, -2, 0, 2, 4, 5, 7, 8, 9, 11, 12
+gibebopminor ftgen 0, 0, 9, -2, 0, 2, 3, 5, 7, 8, 9, 10, 12
+gibeboptonicminor ftgen 0, 0, 9, -2, 0, 2, 3, 5, 7, 8, 9, 11, 12
+giblues ftgen 0, 0, 7, -2, 0, 3, 5, 6, 7, 10, 12
+gibyzantine ftgen 0, 0, 8, -2, 0, 1, 4, 5, 7, 8, 11, 12
+gichahargah ftgen 0, 0, 8, -2, 0, 1, 4, 5, 7, 8, 11, 12
+gichinese ftgen 0, 0, 6, -2, 0, 2, 4, 7, 9, 12
+gichinese2 ftgen 0, 0, 6, -2, 0, 4, 6, 7, 11, 12
+gichroma ftgen 0, 0, 12, -2, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
+gichromatic ftgen 0, 0, 13, -2, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12
+gidim ftgen 0, 0, 4, -2, 0, 3, 6, 9
+gidiminished ftgen 0, 0, 9, -2, 0, 2, 3, 5, 6, 8, 9, 11, 12
+gidorian ftgen 0, 0, 7, -2, 0, 2, 3, 5, 7, 9, 10
+gidorian ftgen 0, 0, 8, -2, 0, 2, 3, 5, 7, 9, 10, 12
+gidoubleharmonic ftgen 0, 0, 8, -2, 0, 1, 4, 5, 7, 8, 11, 12
+giegyptian ftgen 0, 0, 8, -2, 0, 2, 3, 6, 7, 8, 11, 12
+gienigmatic ftgen 0, 0, 8, -2, 0, 1, 4, 6, 8, 10, 11, 12
+giethiopian ftgen 0, 0, 8, -2, 0, 2, 4, 5, 7, 8, 11, 12
+giflamenco ftgen 0, 0, 9, -2, 0, 1, 3, 4, 5, 7, 8, 10, 12
+gigypsy ftgen 0, 0, 8, -2, 0, 1, 4, 5, 7, 8, 11, 12
+giharmonic ftgen 0, 0, 7, -2, 0, 2, 4, 5, 7, 9, 11
+giharmonicmajor ftgen 0, 0, 8, -2, 0, 2, 4, 5, 8, 9, 11, 12
+giharmonicminor ftgen 0, 0, 7, -2, 0, 2, 3, 5, 7, 8, 11
+giharmonicminor ftgen 0, 0, 8, -2, 0, 2, 3, 5, 7, 8, 11, 12
+gihindu ftgen 0, 0, 8, -2, 0, 2, 4, 5, 7, 8, 10, 12
+gihirajoshi ftgen 0, 0, 6, -2, 0, 2, 3, 7, 8, 12
+gihungariangypsy ftgen 0, 0, 8, -2, 0, 2, 3, 6, 7, 8, 11, 12
+gihungarianmajor ftgen 0, 0, 8, -2, 0, 3, 4, 6, 7, 9, 10, 12
+gihungarianminor ftgen 0, 0, 8, -2, 0, 2, 3, 6, 7, 8, 11, 12
+giindian ftgen 0, 0, 8, -2, 0, 1, 3, 4, 7, 8, 10, 12
+giinverteddiminished ftgen 0, 0, 9, -2, 0, 1, 3, 4, 6, 7, 9, 10, 12
+giionian ftgen 0, 0, 7, -2, 0, 2, 4, 5, 7, 9, 11
+giionian ftgen 0, 0, 8, -2, 0, 2, 4, 5, 7, 9, 11, 12
+giiwato ftgen 0, 0, 6, -2, 0, 1, 5, 6, 10, 12
+gijapanese ftgen 0, 0, 6, -2, 0, 1, 5, 7, 8, 12
+gijavanese ftgen 0, 0, 8, -2, 0, 1, 3, 5, 7, 9, 10, 12
+gijewish ftgen 0, 0, 8, -2, 0, 1, 4, 5, 7, 8, 10, 12
+gikumoi ftgen 0, 0, 6, -2, 0, 1, 5, 7, 8, 12
+gileadingwholetone ftgen 0, 0, 8, -2, 0, 2, 4, 6, 8, 10, 11, 12
+gilocrian ftgen 0, 0, 7, -2, 0, 1, 3, 5, 6, 8, 10
+gilocrian ftgen 0, 0, 8, -2, 0, 1, 3, 5, 6, 8, 10, 12
+gilocrianmajor ftgen 0, 0, 8, -2, 0, 2, 4, 5, 6, 8, 10, 12
+gilocriannatural ftgen 0, 0, 8, -2, 0, 2, 3, 5, 6, 8, 10, 12
+gilocriansuper ftgen 0, 0, 8, -2, 0, 1, 3, 4, 6, 8, 10, 12
+gilocrianultra ftgen 0, 0, 8, -2, 0, 1, 3, 4, 6, 8, 9, 12
+gilydian ftgen 0, 0, 7, -2, 0, 2, 4, 6, 7, 9, 11
+gilydian ftgen 0, 0, 8, -2, 0, 2, 4, 6, 7, 9, 11, 12
+gilydianaugmented ftgen 0, 0, 8, -2, 0, 2, 4, 6, 8, 9, 10, 12
+gilydiandominant ftgen 0, 0, 8, -2, 0, 2, 4, 6, 7, 9, 10, 12
+gilydianminor ftgen 0, 0, 8, -2, 0, 2, 4, 6, 7, 8, 10, 12
+gim7 ftgen 0, 0, 19, -2, 0, 3, 7, 10, 14, 17, 21, 24, 27, 31, 34, 38, 41, 45, 48, 51, 55, 58, 62
+gimajor ftgen 0, 0, 7, -2, 0, 2, 4, 5, 7, 9, 11
+gimarva ftgen 0, 0, 8, -2, 0, 1, 4, 6, 7, 9, 11, 12
+gimelodicminor ftgen 0, 0, 8, -2, 0, 2, 3, 5, 7, 9, 11, 12
+gimelodicminorascending ftgen 0, 0, 7, -2, 0, 2, 3, 5, 7, 9, 11
+gimelodicminordescending ftgen 0, 0, 7, -2, 0, 2, 3, 5, 7, 8, 10
+giminor ftgen 0, 0, 7, -2, 0, 2, 3, 5, 7, 8, 10
+giminor3 ftgen 0, 0, 7, -2, 0, 2, 2.75, 5, 7.15, 8, 10
+gimjnor ftgen 0, 0, 7, -2, 0, 1.75, 2.75, 5.35, 7.35, 8, 10
+giminor2v5 ftgen 0, 0, 7, -2, 0, 2, 2.5, 5, 7, 8, 10
+gimixolydian ftgen 0, 0, 7, -2, 0, 2, 4, 5, 7, 9, 10
+gimixolydian ftgen 0, 0, 8, -2, 0, 2, 4, 5, 7, 9, 10, 12
+gimixolydianaugmented ftgen 0, 0, 8, -2, 0, 2, 4, 5, 8, 9, 10, 12
+gimohammedan ftgen 0, 0, 8, -2, 0, 2, 3, 5, 7, 8, 11, 12
+gimongolian ftgen 0, 0, 6, -2, 0, 2, 4, 7, 9, 12
+gimonotone ftgen 0, 0, 1, -2, 0
+ginaturalminor ftgen 0, 0, 7, -2, 9, 11, 0, 2, 4, 5, 7
+ginaturalminor ftgen 0, 0, 8, -2, 0, 2, 3, 5, 7, 8, 10, 12
+gineapolitanmajor ftgen 0, 0, 8, -2, 0, 1, 3, 5, 7, 9, 11, 12
+gineapolitanminor ftgen 0, 0, 8, -2, 0, 1, 3, 5, 7, 8, 11, 12
+giocta_1_2 ftgen 0, 0, 8, -2, 0, 1, 3, 4, 6, 7, 9, 10
+giocta_2_1 ftgen 0, 0, 8, -2, 0, 2, 3, 5, 6, 8, 9, 11
+gioriental ftgen 0, 0, 8, -2, 0, 1, 4, 5, 6, 9, 10, 12
+giovertone ftgen 0, 0, 8, -2, 0, 2, 4, 6, 7, 9, 10, 12
+gipa ftgen 0, 0, 6, -2, 0, 2, 3, 7, 8, 12
+gipb ftgen 0, 0, 6, -2, 0, 1, 3, 6, 8, 12
+gipd ftgen 0, 0, 6, -2, 0, 2, 3, 7, 9, 12
+gipe ftgen 0, 0, 6, -2, 0, 1, 3, 7, 8, 12
+gipelog ftgen 0, 0, 6, -2, 0, 1, 3, 7, 10, 12
+gipentamaj ftgen 0, 0, 5, -2, 0, 2, 4, 7, 9
+gipentamin ftgen 0, 0, 5, -2, 0, 3, 5, 7, 10
+gipentatonicmajor ftgen 0, 0, 6, -2, 0, 2, 4, 7, 9, 12
+gipentatonicminor ftgen 0, 0, 6, -2, 0, 3, 5, 7, 10, 12
+gipersian ftgen 0, 0, 8, -2, 0, 1, 4, 5, 6, 8, 11, 12
+gipfcg ftgen 0, 0, 6, -2, 0, 2, 4, 7, 9, 12
+giphrygian ftgen 0, 0, 7, -2, 0, 1, 3, 5, 7, 8, 10
+giphrygian ftgen 0, 0, 8, -2, 0, 1, 3, 5, 7, 8, 10, 12
+giphrygianmajor ftgen 0, 0, 8, -2, 0, 1, 4, 5, 7, 8, 10, 12
+giquarter ftgen 0, 0, 22, -2, 0.5, 1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5, 5.5, 6, 6.5, 7, 7.5, 8, 8.5, 9, 9.5, 10, 10.5, 11, 11.5
+giromanian ftgen 0, 0, 8, -2, 0, 2, 3, 6, 7, 9, 10, 12
+gispanish ftgen 0, 0, 8, -2, 0, 1, 4, 5, 7, 8, 10, 12
+gispanish8tone ftgen 0, 0, 9, -2, 0, 1, 3, 4, 5, 6, 8, 10, 12
+gisymmetrical ftgen 0, 0, 9, -2, 0, 1, 3, 4, 6, 7, 9, 10, 12
+gitodi ftgen 0, 0, 8, -2, 0, 1, 3, 6, 7, 8, 11, 12
+giwhole ftgen 0, 0, 6, -2, 0, 2, 4, 6, 8, 10
+giwhole ftgen 0, 0, 7, -2, 0, 2, 4, 6, 8, 10, 12
+gibp ftgen 0, 0, 12, -2, 0, 1.3324, 3.0185, 4.3508, 5.8251, 7.3693, 8.8436, 10.1760, 11.6502, 13.1944, 14.6687, 16.0011, 17.6872, 19.0196
+
+#define chinese #gichinese#
+#define persian #gipersian#
+#define indian #giindian#
+#define arabian #giarabian#
+#define minor #giminor#
+#define major #gimajor#
+
+opcode scale_up, k, ikkk
+ iscale, kmin, kmax, kspeed xin
+ ktrig = metro:k(kspeed)
+ idiff = abs( i(kmax) - i(kmin) )
+ ibase = i(kmin)
+ kpick init 0
+ knote init ibase
+ kitv init 0
+ ilen = ftlen(iscale)
+ if(ktrig == 1) then
+ kpick = (kpick + 1) ;% ilen
+ if(kpick == ilen) then
+ kpick = 0
+ kitv = 0
+ endif
+ kitv = table(kpick, iscale) - kitv
+ printk2 kitv
+ knote = knote + kitv
+ if(knote > kmax) then
+ knote = kmin + (knote - kmax)
+ endif
+ endif
+ xout knote
+endop
+
+/*
+opcode scale_up, k, ikkk
+ iscale, kmin, kmax, kspeed xin
+ ktrig = metro:k(kspeed)
+ idiff = abs( i(kmax) - i(kmin) )
+ ibase = i(kmin) + (idiff/2)
+ kpick init 0
+ knote init ibase
+ ilen = ftlen(iscale)
+ if(ktrig == 1) then
+ kpick = (kpick + 1) % ilen
+ kitv = table(kpick, iscale)
+ knote = knote + kitv
+ if(knote > kmax) then
+ knote = kmin + (knote - kmax)
+ endif
+ endif
+ xout knote
+endop
+
+*/
+
+opcode scale_down, k, ikkk
+ iscale, kmin, kmax, kspeed xin
+ ktrig = metro:k(kspeed)
+
+ idiff = abs( i(kmax) - i(kmin) )
+ ibase = i(kmax)
+ kpick init 0
+ knote init ibase
+ ilen = ftlen(iscale)
+ if(ktrig == 1) then
+ kpick = (kpick + 1) % ilen
+ kitv = table(kpick, iscale)
+ knote = knote - kitv
+ if(knote < kmin) then
+ knote = kmax ;- (kmin - knote)
+ endif
+ endif
+ xout knote
+endop
+
+opcode scale_random, k, ikkk
+ iscale, kmin, kmax, kspeed xin
+ ktrig = metro:k(kspeed)
+ idiff = abs( i(kmax) - i(kmin) )
+ ibase = i(kmin) + (idiff/2)
+ kpick init 0
+ knote init ibase
+ ilen = ftlen(iscale)
+ if(ktrig == 1) then
+ ksign = (rint:k(0, 1) == 0) ? -1 : 1
+ kpick = (kpick + 1) % ilen
+ kitv = table(kpick, iscale)
+ knote = knote + (kitv * ksign)
+ if(knote < kmin) then
+ knote = kmax ;- (kmin - knote)
+ endif
+ if(knote > kmax) then
+ knote = kmin ;+ (knote - kmax)
+ endif
+ endif
+ xout knote
+endop
diff --git a/public/system-files/synth.orc b/public/system-files/synth.orc
index 5c58d84..6859376 100644
--- a/public/system-files/synth.orc
+++ b/public/system-files/synth.orc
@@ -12,7 +12,7 @@ opcode basic_sine_gen, 0, kk
ktrig, kamp xin
kamp = limit:k(kamp, 0, 1)
ktrig = limit:k(ktrig, 0, 1)
- if(check_trig(ktrig) == 1) then
+ if (check_trig(ktrig) == 1) then
schedulek("basic_sine", 0, random:k(0.03, 0.1), random:k(50, 80), kamp * ktrig)
endif
endop
@@ -35,7 +35,7 @@ opcode pop, 0, kkkk
knote = limit:k(knote, 0, 100) + 27
kdur = to_tempo_dur(limit:k(kdur, 0.01, 1))
ktrig = limit:k(ktrig, 0, 1)
- if(check_trig(ktrig) == 1) then
+ if (check_trig(ktrig) == 1) then
schedulek("pop_impl", 0, kdur, knote, kamp * ktrig)
endif
endop
@@ -78,7 +78,7 @@ opcode kick, 0, kkO
ktrig = limit:k(ktrig, 0, 1)
ksav = rint:i(1, 5)
- if(check_trig(ktrig) == 1) then
+ if (check_trig(ktrig) == 1) then
schedulek("basic_kick", 0, 0.1, kamp * ktrig, 0)
endif
endop
@@ -112,7 +112,7 @@ opcode hihat, 0, kkkkO
kdur = to_tempo_dur(limit:k(kdur, 0.001, 100))
kfq = mtof(limit:k(knote, 0, 100) + 27)
ktrig = limit:k(ktrig, 0, 1)
- if(check_trig(ktrig) == 1) then
+ if (check_trig(ktrig) == 1) then
schedulek("noisy_hat", 0, kdur, kfq, kamp * ktrig, ksav)
endif
endop
@@ -125,7 +125,7 @@ instr bass_impl
aenv = expsegr:a(0.01, 0.05, 1.01, p3 - 0.05, 1.01, p3/16, 0.01) - a(0.01)
imult = rint:i(1, 8)
- if(imodspeed >= 0) then
+ if (imodspeed >= 0) then
imult = imodspeed
endif
kmodfq = gktempo * imult
@@ -146,7 +146,7 @@ opcode wah, 0, kkkkJ
kfq = mtof(limit:k(knote, 0, 100) + 20)
ktrigger = limit:k(ktrigger, 0, 1)
kmodspeed = limit:k(kmodspeed, -1, 100)
- if(check_trig(ktrigger) == 1) then
+ if (check_trig(ktrigger) == 1) then
schedulek("bass_impl", 0, kdur, kamp * ktrigger, kfq, kmodspeed)
endif
endop
@@ -175,7 +175,7 @@ opcode glide, 0, kkkkO
kamp = limit:k(kamp, 0, 1)
kfq = mtof(limit:k(knote, 0, 100) + 20)
ktrig = limit:k(ktrig, 0, 1)
- if(check_trig(ktrig) == 1) then
+ if (check_trig(ktrig) == 1) then
kcnt = 0
while kcnt < kdensity do
schedulek("glide_impl", 0, to_tempo_dur(kdur), kamp * ktrig, kfq, ksav)
@@ -212,7 +212,7 @@ opcode ping, 0, kkkkO
kamp = limit:k(kamp, 0, 1)
kfq = mtof(limit:k(knote, 0, 100) + 20)
kdur = limit:k(kdur, 0.001, 1000)
- if(check_trig(ktrig) == 1) then
+ if (check_trig(ktrig) == 1) then
schedulek("trumpet_impl", 0, to_tempo_dur(kdur), kfq, kamp, rint:k(1, 3), random:k(1, 4), ksav)
endif
endop
@@ -258,7 +258,7 @@ opcode wave, 0, kkkkO
kamp = limit:k(kamp, 0, 1)
ktrig = limit:k(ktrig, 0, 1)
kdur = to_tempo_dur(limit:k(kdur, 0.001, 1000))
- if(check_trig(ktrig) == 1) then
+ if (check_trig(ktrig) == 1) then
schedulek("wave_impl", 0, kdur, kamp, kfq, ksav)
endif
endop
@@ -271,7 +271,7 @@ instr pluck_impl
imult init p6
iamp init p4
inote init p5
- if(imult <= 0) then
+ if (imult <= 0) then
imult = rint:i(1, 10)
endif
@@ -309,7 +309,7 @@ opcode chord, 0, kkkkJO
knote = limit:k(knote, 0, 100) + 20
kdur = to_tempo_dur(limit:k(kdur, 0.001, 1000))
kmult = limit:k(kmult, -1, 10)
- if(check_trig(ktrig) == 1) then
+ if (check_trig(ktrig) == 1) then
schedulek("pluck_impl", 0, kdur, kamp, knote, kmult, ksav)
endif
endop
@@ -325,9 +325,9 @@ opcode funkymod, k, kkk
; 5 saw down
; 6 pwm
iwave = rint:i(1, 6)
- if(iwave == 3) then
+ if (iwave == 3) then
iwave = 4
- elseif(iwave == 6) then
+ elseif (iwave == 6) then
iwave = 5
endif
@@ -335,7 +335,7 @@ opcode funkymod, k, kkk
kpwm_amp = 1 - klf_amp
klfo = lfo:k(kamp, kfq)
- if(iwave < 3) then
+ if (iwave < 3) then
klfo += kamp
klfo /= 2
endif
@@ -391,7 +391,7 @@ opcode buzzy, 0, kkkkO
kamp = limit:k(kamp ,0, 1)
knote = limit:k(knote, 0, 100) + 20
kdur = to_tempo_dur(limit:k(kdur, 0.001, 1000))
- if(check_trig(ktrig) == 1) then
+ if (check_trig(ktrig) == 1) then
schedulek("buzzy_impl", 0, kdur, mtof:k(knote), kamp, ksav)
endif
endop
@@ -422,7 +422,7 @@ opcode noisy, 0, kkkk
kamp = limit:k(kamp ,0, 1)
knote = limit:k(knote, 0, 100) + 20
kdur = to_tempo_dur(limit:k(kdur, 0.001, 1000))
- if(check_trig(ktrig) == 1) then
+ if (check_trig(ktrig) == 1) then
schedulek("fnoise_impl", 0, kdur, mtof:k(knote), kamp)
endif
endop
@@ -471,7 +471,7 @@ opcode pulsar, 0, kkkkkk
kformant_fq = limit:k(kformant_fq, 0, 10) * 150 + 300
ksine_cycles = int(limit:k(ksine_cycles, 1, 10))
- if(check_trig(ktrig) == 1) then
+ if (check_trig(ktrig) == 1) then
schedulek("pulsar_impl", 0, kdur, kamp, mtof:k(knote), kformant_fq, ksine_cycles)
endif
endop
@@ -524,7 +524,7 @@ opcode piou, 0, kkkkk
kdur = to_tempo_dur(limit:k(kdur, 0.001, 1000))
kQ = limit:k(kQ, 1, 10)
- if(check_trig(ktrig) == 1) then
+ if (check_trig(ktrig) == 1) then
schedulek("graou_impl", 0, kdur, kamp, mtof:k(knote), kQ)
endif
endop
@@ -554,7 +554,7 @@ opcode buzzwave, 0, kkkkO
kamp = limit:k(kamp ,0, 1)
knote = limit:k(knote, 0, 100) + 20
kdur = to_tempo_dur(limit:k(kdur, 0.001, 1000))
- if(trigger:k(ktrig, 0.5, 0) == 1) then
+ if (trigger:k(ktrig, 0.5, 0) == 1) then
schedulek("smooth_wave_instr", 0, kdur, knote, kamp, ksav)
endif
endop
@@ -594,7 +594,7 @@ opcode noisywave, 0, kkkkO
kamp = limit:k(kamp ,0, 1)
knote = limit:k(knote, 0, 100) + 20
kdur = to_tempo_dur(limit:k(kdur, 0.001, 1000))
- if(trigger:k(ktrig, 0.5, 0) == 1) then
+ if (trigger:k(ktrig, 0.5, 0) == 1) then
schedulek("smooth_noise_instr", 0, kdur, knote, kamp, ksav)
endif
endop
@@ -628,7 +628,7 @@ opcode crunchy, 0, kkkkO
kamp = limit:k(kamp ,0, 1)
knote = limit:k(knote, 0, 100) + 20
kdur = to_tempo_dur(limit:k(kdur, 0.001, 1000))
- if(check_trig(ktrig) == 1) then
+ if (check_trig(ktrig) == 1) then
schedulek("crunchy_instr", 0, kdur, knote, kamp, ksav)
endif
endop
@@ -652,7 +652,7 @@ instr crunchyslow_instr
adist *= aenv * iamp
ipan_base = rint:i(0, 1)
kpan = gkmirlorenz_y
- if(ipan_base > 0) then
+ if (ipan_base > 0) then
kpan = 1 - kpan
endif
aL, aR pan2 adist * gkgain, kpan
@@ -666,7 +666,7 @@ opcode crunchy_wav, 0, kkkkO
kamp = limit:k(kamp ,0, 1)
knote = limit:k(knote, 0, 100) + 20
kdur = to_tempo_dur(limit:k(kdur, 0.001, 1000))
- if(check_trig(ktrig) == 1) then
+ if (check_trig(ktrig) == 1) then
schedulek("crunchyslow_instr", 0, kdur, knote, kamp, ksav)
endif
endop
@@ -693,7 +693,7 @@ instr shinywave_instr
adist *= aenv * iamp * 0.7
ipan_base = rint:i(0, 1)
kpan = gkmirlorenz_y
- if(ipan_base > 0) then
+ if (ipan_base > 0) then
kpan = 1 - kpan
endif
aL, aR pan2 adist * gkgain, kpan
@@ -707,7 +707,7 @@ opcode brightwave, 0, kkkkO
kamp = limit:k(kamp ,0, 1)
knote = limit:k(knote, 0, 100) + 20
kdur = to_tempo_dur(limit:k(kdur, 0.001, 1000))
- if(check_trig(ktrig) == 1) then
+ if (check_trig(ktrig) == 1) then
schedulek("shinywave_instr", 0, kdur, knote, kamp, ksav)
endif
endop
@@ -744,7 +744,7 @@ opcode glidy, 0, kkkkO
kamp = limit:k(kamp ,0, 1)
knote = limit:k(knote, 0, 100) + 20
kdur = to_tempo_dur(limit:k(kdur, 0.001, 1000))
- if(check_trig(ktrig) == 1) then
+ if (check_trig(ktrig) == 1) then
schedulek("glide_instr", 0, kdur, knote, kamp, ksav)
endif
endop
@@ -811,7 +811,7 @@ opcode snare, 0, kkO
ktrig, kamp, ksav xin
ktrig = limit:k(ktrig, 0, 1)
kamp = limit:k(kamp ,0, 1)
- if(check_trig(ktrig) == 1) then
+ if (check_trig(ktrig) == 1) then
;i34 0.0 .5 30000 7.00 .5 .7 1 1 1 1 1.5 .1
idur random 1/12, 1/8 ; Duration
kdyn = kamp ; random 1/9, 1/2 ; Amplitude
@@ -890,7 +890,7 @@ opcode water_drop, 0, kkk
kspeed = limit:k(kspeed, 0.001, 1)*15
kmet = drunk(kspeed, 0.7)
- if(kmet == 1) then
+ if (kmet == 1) then
kfq1 = random:k(380, 500) ;430
kfq2 = random:k(900, 1200) ; 1000
kfq3 = random:k(700, 880) ;800
@@ -937,7 +937,7 @@ opcode strike, 0, kkkk
kamp = limit:k(kamp ,0, 1)
knote = limit:k(knote, 0, 100) + 20
kdur = to_tempo_dur(limit:k(kdur, 0.001, 1000))
- if(check_trig(ktrig) == 1) then
+ if (check_trig(ktrig) == 1) then
schedulek("ks_impl", 0, kdur, knote, kamp)
endif
endop
@@ -981,7 +981,7 @@ opcode smooth, 0, kkkk
kamp = limit:k(kamp ,0, 1)
knote = limit:k(knote, 0, 100) + 20
kdur = to_tempo_dur(limit:k(kdur, 0.001, 1000))
- if(check_trig(ktrig) == 1) then
+ if (check_trig(ktrig) == 1) then
schedulek("vibish_impl", 0, kdur, knote, kamp)
endif
endop
@@ -1032,7 +1032,7 @@ opcode bounce, 0, kkkk
kamp = limit:k(kamp ,0, 1)
knote = limit:k(knote, 0, 100) + 20
kdur = to_tempo_dur(limit:k(kdur, 0.001, 1000))
- if(check_trig(ktrig) == 1) then
+ if (check_trig(ktrig) == 1) then
schedulek("bounce_impl", 0, kdur, knote, kamp)
endif
endop
diff --git a/public/system-files/synth.orc.bak b/public/system-files/synth.orc.bak
new file mode 100644
index 0000000..5c58d84
--- /dev/null
+++ b/public/system-files/synth.orc.bak
@@ -0,0 +1,1039 @@
+instr basic_sine
+ inote init p4
+ ifq = mtof:i(inote)
+ iamp = p5
+ kenv = expsegr(1.01, p3, 0.01) - 0.01
+ ao = oscili(iamp, ifq) * kenv * 0.4
+ chnmix(ao, "out1")
+ chnmix(ao, "out2")
+endin
+
+opcode basic_sine_gen, 0, kk
+ ktrig, kamp xin
+ kamp = limit:k(kamp, 0, 1)
+ ktrig = limit:k(ktrig, 0, 1)
+ if(check_trig(ktrig) == 1) then
+ schedulek("basic_sine", 0, random:k(0.03, 0.1), random:k(50, 80), kamp * ktrig)
+ endif
+endop
+
+instr pop_impl
+ inote init p4
+ ifq = mtof:i(inote)
+ iamp = p5
+ kenv = expsegr(1.01, p3, 0.01) - 0.01
+ kmod = oscili:k(ifq / 100, 40)
+ ao = vco2(iamp, ifq + kmod) * kenv
+ af = K35_lpf(ao, ifq*4, 8) * 0.3
+ chnmix(af, "out1")
+ chnmix(af, "out2")
+endin
+
+opcode pop, 0, kkkk
+ ktrig, kamp, knote, kdur xin
+ kamp = limit:k(kamp, 0, 1)
+ knote = limit:k(knote, 0, 100) + 27
+ kdur = to_tempo_dur(limit:k(kdur, 0.01, 1))
+ ktrig = limit:k(ktrig, 0, 1)
+ if(check_trig(ktrig) == 1) then
+ schedulek("pop_impl", 0, kdur, knote, kamp * ktrig)
+ endif
+endop
+
+
+instr basic_kick
+ iamp init p4
+ $FQPERC
+
+ ihi = random:i(100, 600) ; 600
+ ilo = random:i(100, 800) ; 20
+ kfq = expseg(ihi, p3, ilo)
+ ao = vco2(1, kfq)
+ af = K35_lpf(ao, 100, 3)
+ amod = oscili(100, 2)
+ acar = oscili(1, abs(amod) + 250)
+ abnd = butterhp(acar, 400)
+ klofq = expseg(2000, p3/4, 20)
+ alo = K35_lpf(abnd, klofq, 5) * 0.5
+ aenv = expseg:a(1.01, p3/4*3, 1.01, p3/4, 0.01) - 0.01
+ akick = (alo + af) * aenv * iamp
+
+ adist = distort1(akick, ksavage*3, 1, 1 / (abs(gklorenz_x*3) + 1), 1 - abs(gklorenz_z))
+ kdist_mult = isavage_mode > 0 ? 1 : 0
+
+ adelayed init 0
+ kfb = mirror:k(abs(gklorenz_y) + 0.5, 0, 0.9)
+ adel = interp( ( mirror:k( lineto(abs(ksavage), 0.1) , 0.2, 0.999 ) * 1000))
+ adelayed = vdelay(akick + (adelayed * kfb), adel, 1500)
+ krel = linsegr:k(1, 1, 1, 1, 0)
+
+ akick += (adelayed * kdist_mult) * krel
+ chnmix(akick, "out1")
+ chnmix(akick, "out2")
+endin
+
+opcode kick, 0, kkO
+ ktrig, kamp, ksav xin
+ kamp = limit:k(kamp, 0, 1)
+ ktrig = limit:k(ktrig, 0, 1)
+
+ ksav = rint:i(1, 5)
+ if(check_trig(ktrig) == 1) then
+ schedulek("basic_kick", 0, 0.1, kamp * ktrig, 0)
+ endif
+endop
+
+instr noisy_hat
+ asig = pinker()
+ aenv = expseg(1.01, p3, 0.01) - a(0.01)
+ ifq init p4
+ iamp init p5
+ isavage_mode init p6
+ $SAVAGE(isavage_mode')
+ kfq = ifq + (ifq * ksavage)
+ af = K35_hpf(asig, kfq, 9) * aenv * iamp
+
+ adelayed init 0
+ kfb = mirror:k(abs(gklorenz_y) + 0.5, 0, 0.9)
+ adel = interp( ( mirror:k( lineto(abs(ksavage), 0.1) , 0.2, 0.999 ) * 1000))
+ adelayed = vdelay3(af + (adelayed * kfb), adel, 1000)
+ krel = linsegr:k(1, 1, 1, 1, 0)
+
+ ksav_mult = (isavage_mode > 0) ? 1 : 0
+ amix = af + (adelayed * ksav_mult)
+
+ chnmix(amix, "out1")
+ chnmix(amix, "out2")
+endin
+
+opcode hihat, 0, kkkkO
+ ktrig, kamp, knote, kdur, ksav xin
+ kamp = limit:k(kamp, 0, 1)
+ kdur = to_tempo_dur(limit:k(kdur, 0.001, 100))
+ kfq = mtof(limit:k(knote, 0, 100) + 27)
+ ktrig = limit:k(ktrig, 0, 1)
+ if(check_trig(ktrig) == 1) then
+ schedulek("noisy_hat", 0, kdur, kfq, kamp * ktrig, ksav)
+ endif
+endop
+
+instr bass_impl
+ iamp init p4
+ ifq init p5
+ imodspeed init p6
+ ao = vco2(0.8, ifq)
+ aenv = expsegr:a(0.01, 0.05, 1.01, p3 - 0.05, 1.01, p3/16, 0.01) - a(0.01)
+
+ imult = rint:i(1, 8)
+ if(imodspeed >= 0) then
+ imult = imodspeed
+ endif
+ kmodfq = gktempo * imult
+ kcut = poscil(0.5, kmodfq) + 0.5
+ afilt = K35_lpf(ao, limit:k(kcut * (ifq * 20) + 20, 0, 12000), 6)
+ asynt = afilt * aenv * iamp * 0.2
+
+ ipan = random:i(0.25, 0.75)
+ a1, a2 pan2 asynt, ipan
+ chnmix(a1, "out1")
+ chnmix(a2, "out2")
+endin
+
+opcode wah, 0, kkkkJ
+ ktrigger, kamp, knote, kdur, kmodspeed xin
+ kamp = limit:k(kamp, 0, 1)
+ kdur = to_tempo_dur(limit:k(kdur, 0.001, 1000))
+ kfq = mtof(limit:k(knote, 0, 100) + 20)
+ ktrigger = limit:k(ktrigger, 0, 1)
+ kmodspeed = limit:k(kmodspeed, -1, 100)
+ if(check_trig(ktrigger) == 1) then
+ schedulek("bass_impl", 0, kdur, kamp * ktrigger, kfq, kmodspeed)
+ endif
+endop
+
+instr glide_impl
+ iamp init p4
+ ifqcenter init p5
+ isavage_mode init p6
+ $SAVAGE(isavage_mode')
+ ifqstart = random:i(ifqcenter - (ifqcenter/2), ifqcenter + (ifqcenter / 2))
+ ifqend = random:i(ifqcenter - (ifqcenter/2), ifqcenter + (ifqcenter / 2))
+ kfq = expseg(ifqstart, p3, ifqend)
+ kfq = kfq + (ksavage * kfq)
+ ;aenv = expsegr:a(0.01, p3/8, 1.01, p3/8*7, 1.01, p3/4, 0.01) - a(0.01)
+ aenv = expsegr:a(0.01, p3, 1.01, p3/4, 0.01) - a(0.01)
+ ao = vco2(1, kfq)
+ afilt = K35_lpf(ao*aenv, kfq * 2, 7) * iamp * 0.3
+ chnmix(afilt, "out1")
+ chnmix(afilt, "out2")
+endin
+maxalloc("glide", 12)
+
+opcode glide, 0, kkkkO
+ ktrig, kamp, knote, kdur, ksav xin
+ kdensity = 4
+ kamp = limit:k(kamp, 0, 1)
+ kfq = mtof(limit:k(knote, 0, 100) + 20)
+ ktrig = limit:k(ktrig, 0, 1)
+ if(check_trig(ktrig) == 1) then
+ kcnt = 0
+ while kcnt < kdensity do
+ schedulek("glide_impl", 0, to_tempo_dur(kdur), kamp * ktrig, kfq, ksav)
+ kcnt += 1
+ od
+ endif
+endop
+
+instr trumpet_impl
+ aenv = expseg:a(1.01, p3, 0.01) - a(0.01)
+ ;kff init p4
+ kff = p4
+ isavage_mode init p8
+ $SAVAGE(isavage_mode')
+ kff = kff + (ksavage * kff)
+ ao = vco2(p5, kff + oscili:k(3, 0.1) ) * aenv
+ ;ao2 = vco2(p5 * 0.7, kff + oscili:k(20, 0.15) ) * aenv
+ ;ao3 = vco2(p5, kff * 1.9 + oscili:k(20, 0.15) ) * aenv
+ anul = a(0)
+ irnd = random:i(0.01, 0.2)
+ kml = (p6 == 1) ? 1 : 0
+ kmb = (p6 == 2) ? 1 : 0
+ kmh = (p6 == 3) ? 1 : 0
+ af = spf(ao * kml, ao * kmb, ao * kmh, aenv * 500 + 400 + abs(oscili:k(1000, irnd)), p7)
+ af *= 0.2
+ kpan = rspline(0, 1, 0.1, 2)
+ a1, a2 pan2 af, kpan
+ chnmix(a1, "out1")
+ chnmix(a2, "out2")
+endin
+
+opcode ping, 0, kkkkO
+ ktrig, kamp, knote, kdur, ksav xin
+ kamp = limit:k(kamp, 0, 1)
+ kfq = mtof(limit:k(knote, 0, 100) + 20)
+ kdur = limit:k(kdur, 0.001, 1000)
+ if(check_trig(ktrig) == 1) then
+ schedulek("trumpet_impl", 0, to_tempo_dur(kdur), kfq, kamp, rint:k(1, 3), random:k(1, 4), ksav)
+ endif
+endop
+
+instr wave_impl
+ ; pluck env
+ ;ares repluck iplk, kamp, icps, kpick, krefl, axcite
+ axcite init 1
+ axcite = linseg:a(1, 0.01, 0)
+ krefl = 0.5
+ kpick = 0.1
+ icps = 400
+ kamp = 1
+ iplk = 0.8
+ apluck = follow2(repluck(iplk, kamp, icps, kpick, krefl, axcite), 0.01, 0.05)
+ ; ares follow2 asig, katt, krel
+ isavage_mode init p6
+ $SAVAGE(isavage_mode')
+
+ ifq init p5
+ iamp init p4
+
+ kfq1 = ifq + oscili:k(ifq / 100, rspline:k(0.01, 5, 1, 5))
+ kfq1 = kfq1 + (kfq1 * ksavage)
+ kfq2 = (ifq * 0.99) + oscili:k(ifq / 100, rspline:k(0.01, 5, 1, 5))
+ kfq2 = kfq2 + (kfq2 * ksavage)
+ ao = vco2(1/2, kfq1)
+ ao += vco2(1/2, kfq2, 12)
+ aenv = expsegr:a(0.01, p3/2, 1.01, p3/2, 1.01, p3, 0.01) - a(0.01)
+ kfb = 0.5
+ adel = a(0.02)
+ ;adel = rspline:a(0.01, 0.2, 0.01, 0.2)
+ af = flanger(ao * aenv, adel, kfb) * iamp * 0.2
+ kpan = rspline:k(0, 1, 0.1, 3)
+ a1, a2 pan2 af, kpan
+ chnmix(a1, "out1")
+ chnmix(a2, "out2")
+endin
+
+opcode wave, 0, kkkkO
+ ktrig, kamp, knote, kdur, ksav xin
+ kfq = mtof(limit:k(knote, 0, 100) + 20)
+ kamp = limit:k(kamp, 0, 1)
+ ktrig = limit:k(ktrig, 0, 1)
+ kdur = to_tempo_dur(limit:k(kdur, 0.001, 1000))
+ if(check_trig(ktrig) == 1) then
+ schedulek("wave_impl", 0, kdur, kamp, kfq, ksav)
+ endif
+endop
+
+instr pluck_impl
+ ; pluck env
+ ;ares repluck iplk, kamp, icps, kpick, krefl, axcite
+ aseg = linsegr:a(0, 0.01, 0.1, p3 - 0.01, 0.3, p3/4, 1)
+ aenv = tablei:a(aseg, 1, 1)
+ imult init p6
+ iamp init p4
+ inote init p5
+ if(imult <= 0) then
+ imult = rint:i(1, 10)
+ endif
+
+ isavage_mode init p7
+ $SAVAGE(isavage_mode')
+
+ ifq1 = mtof:i(inote + (imult * 0)); / ((1) * 2)
+ ifq2 = mtof:i(inote + (imult * 1)); / ((2) * 2)
+ ifq3 = mtof:i(inote + (imult * 2)); / ((3) * 2)
+ ifq4 = mtof:i(inote + (imult * 3)); / ((4) * 2)
+
+ kfq1 = ifq1 + (ksavage * ifq1)
+ kfq2 = ifq2 + (ksavage * ifq2)
+ kfq3 = ifq3 + (ksavage * ifq3)
+ kfq4 = ifq4 + (ksavage * ifq4)
+
+
+ imult = 1 - (inote / 100)
+ imult *= (imult * imult)
+ imult = (imult * 15) + 5
+
+ aosc = vco2(1/4, kfq1) + vco2(1/4, kfq2) + vco2(1/2, kfq3) + vco2(1/4, kfq4)
+ aosc *= aenv
+ af = K35_lpf(aosc, limit:a(aenv * ifq1 * imult, 0, 10000), 7) * iamp * 0.5
+ chnmix(af, "out1")
+ chnmix(af, "out2")
+endin
+
+ ; faire une table karplustrong
+ ; trouver une solution pour le "mult" (random ? init ? harmonie ? )
+opcode chord, 0, kkkkJO
+ ktrig, kamp, knote, kdur, kmult, ksav xin
+ ktrig = limit:k(ktrig, 0, 1)
+ kamp = limit:k(kamp ,0, 1)
+ knote = limit:k(knote, 0, 100) + 20
+ kdur = to_tempo_dur(limit:k(kdur, 0.001, 1000))
+ kmult = limit:k(kmult, -1, 10)
+ if(check_trig(ktrig) == 1) then
+ schedulek("pluck_impl", 0, kdur, kamp, knote, kmult, ksav)
+ endif
+endop
+
+
+opcode funkymod, k, kkk
+ kamp, kfq, kduty xin
+
+ ; 1 sine
+ ; 2 tri
+ ; 3 square
+ ; 4 saw up
+ ; 5 saw down
+ ; 6 pwm
+ iwave = rint:i(1, 6)
+ if(iwave == 3) then
+ iwave = 4
+ elseif(iwave == 6) then
+ iwave = 5
+ endif
+
+ klf_amp = (iwave < 6) ? 1 : 0
+ kpwm_amp = 1 - klf_amp
+
+ klfo = lfo:k(kamp, kfq)
+ if(iwave < 3) then
+ klfo += kamp
+ klfo /= 2
+ endif
+
+ klfo *= klf_amp
+
+ kpwm = vco2(kamp*0.5, kfq, 2, kduty) + (kamp * 0.5)
+ kpwm *= kpwm_amp
+ xout klfo + kpwm
+endop
+
+
+instr buzzy_impl
+ iwavet[] fillarray 0, 2, 4, 12
+ iwavep = rint:i(0, lenarray(iwavet)-1)
+ iwave = iwavet[iwavep]
+ kpw = rspline(0, 1, 0.25, 4)
+
+ ifq init p4
+ kfq = ifq + rspline:k(-(ifq/1000), ifq/1000, 0.01, 0.3)
+
+ isavage_mode init p6
+ $SAVAGE(isavage_mode')
+ kfq = kfq + (kfq * ksavage)
+
+ ao = vco2(0.3, kfq, iwave, kpw ) * (expseg(1.01, p3, 0.01) - 0.01)
+
+ ahp,alp,abp,abr svn ao, kfq, 10, 0.5
+ iamp init p5
+
+ ipick = rint:i(1, 4)
+ ihp = (ipick == 1) ? 1 : 0
+ ilp = (ipick == 2) ? 1 : 0
+ ibp = (ipick == 3) ? 1 : 0
+ ibr = (ipick == 4) ? 1 : 0
+ ares = (ahp * ihp) + (alp * ilp) + (abp * ibp) + (abr * ibr)
+
+ imodfq = random:i(0.5, 4)
+ imodamp = random:i(0.2, 1)
+ kduty = rspline:k(0, 1, 0.2, 4)
+ kmod = funkymod(imodamp, imodfq, kduty)
+ ares = (ares * kmod) + (ares * (1 - imodamp))
+ ares *= iamp
+ ipan = random:i(0, 1)
+ al, ar pan2 ares, ipan
+ outs al, ar
+endin
+
+
+opcode buzzy, 0, kkkkO
+ ktrig, kamp, knote, kdur, ksav xin
+ ktrig = limit:k(ktrig, 0, 1)
+ kamp = limit:k(kamp ,0, 1)
+ knote = limit:k(knote, 0, 100) + 20
+ kdur = to_tempo_dur(limit:k(kdur, 0.001, 1000))
+ if(check_trig(ktrig) == 1) then
+ schedulek("buzzy_impl", 0, kdur, mtof:k(knote), kamp, ksav)
+ endif
+endop
+
+
+instr fnoise_impl
+ iamp init p5
+ ifqmult init 4
+ ifqoffset init p4
+
+ kcrv = expsegr:k(0.01, p3/4, 1.01, p3, 0.01) - 0.01
+
+ kres = kcrv * 0.7
+ kcf = kcrv * ifqmult + ifqoffset
+ ao = noise(0.5, 0.5) * kcrv
+ ao *= kcrv
+ afilt = vclpf(ao, kcf, kres)
+ asig = afilt
+
+ kpan = rspline:k(0, 1, 0.01, 0.4)
+ a1, a2 pan2 asig, kpan
+ outs a1, a2
+endin
+
+opcode noisy, 0, kkkk
+ ktrig, kamp, knote, kdur xin
+ ktrig = limit:k(ktrig, 0, 1)
+ kamp = limit:k(kamp ,0, 1)
+ knote = limit:k(knote, 0, 100) + 20
+ kdur = to_tempo_dur(limit:k(kdur, 0.001, 1000))
+ if(check_trig(ktrig) == 1) then
+ schedulek("fnoise_impl", 0, kdur, mtof:k(knote), kamp)
+ endif
+endop
+
+#define PI #3.141592653589793#
+
+opcode audio_ltone, a, a
+ ain xin
+ aout init 0
+ kcnt = 0
+ while kcnt < ksmps do
+ aout[kcnt] = (ain[kcnt] < 1) ? 1 : 0
+ kcnt += 1
+ od
+ xout aout
+endop
+
+gipulsar_env = ftgen(0, 0, 16384, -16, 0, 682, -3.606, 0.99403, 4588, 3.8776, 0.47761, 11112, -6.1075, 0)
+
+instr pulsar_impl
+ ifq init p5
+ iform_fq init p6
+ isine_cycles init p7
+ iamp init p4
+
+ aenv = tablei:a(linseg:a(0, p3, 1), gipulsar_env, 1)
+
+ kform_fq = (iform_fq) + randomi:k(0, iform_fq / 10, 0.2)
+
+ apulsaret_phase = phasor:a(ifq) * kform_fq / ifq
+ agate = audio_ltone(apulsaret_phase) ;(apulsaret_phase < 1) ? 1 : 0
+ awin = pow(apulsaret_phase, 4)
+ asine = sin:a(apulsaret_phase * 2 * $PI * isine_cycles) * awin * agate
+ asine *= iamp * 0.7 * aenv
+ ipan = random:i(0.25, 0.75)
+ al, ar pan2 asine, ipan
+ outs al, ar
+endin
+
+opcode pulsar, 0, kkkkkk
+ ktrig, kamp, knote, kdur, kformant_fq, ksine_cycles xin
+ ktrig = limit:k(ktrig, 0, 1)
+ kamp = limit:k(kamp ,0, 1)
+ knote = limit:k(knote, 0, 100) + 20
+ kdur = to_tempo_dur(limit:k(kdur, 0.001, 1000))
+
+ kformant_fq = limit:k(kformant_fq, 0, 10) * 150 + 300
+ ksine_cycles = int(limit:k(ksine_cycles, 1, 10))
+ if(check_trig(ktrig) == 1) then
+ schedulek("pulsar_impl", 0, kdur, kamp, mtof:k(knote), kformant_fq, ksine_cycles)
+ endif
+endop
+
+gigraou_env = ftgen(0, 0, 16384, -16, 0, 185, -3.606, 1, 3125, 4.7463, 0.40746, 13072, -8.0925, 0)
+
+gaGraou[] init 2
+instr graou_out
+ afbl init 0
+ afbr init 0
+ al = gaGraou[0]
+ ar = gaGraou[1]
+
+ imaxdel init 2000
+ adL = randomi:a(100, 500, 0.1)
+ adR = randomi:a(125, 525, 0.1)
+ adelL = vdelay(al+afbl, adL, imaxdel)
+ adelR = vdelay(ar+afbr, adR, imaxdel)
+ ifb init 0.6
+ afbl = adelL * ifb
+ afbr = adelR * ifb
+ gaGraou[0] = 0
+ gaGraou[1] = 0
+ outs al+adelL, ar+adelR
+endin
+schedule("graou_out", 0, -1)
+
+instr graou_impl
+ iamp init p4
+ ifq init p5
+ iQ init p6
+ aosc = vco2:a(1, ifq)
+ kfilt_env = expseg:k(5000, p3, 50)
+ afilt = K35_lpf(aosc, kfilt_env, iQ)
+ aenv = tablei:a(linseg:a(0, p3, 1), gigraou_env, 1)
+ afilt *= aenv * iamp * 0.4
+
+ ipan = random:i(0.25, 0.75)
+ al, ar pan2 afilt, ipan
+ gaGraou[0] = gaGraou[0] + al
+ gaGraou[1] = gaGraou[1] + ar
+endin
+
+
+opcode piou, 0, kkkkk
+ ktrig, kamp, knote, kdur, kQ xin
+ ktrig = limit:k(ktrig, 0, 1)
+ kamp = limit:k(kamp ,0, 1)
+ knote = limit:k(knote, 0, 100) + 20
+ kdur = to_tempo_dur(limit:k(kdur, 0.001, 1000))
+ kQ = limit:k(kQ, 1, 10)
+
+ if(check_trig(ktrig) == 1) then
+ schedulek("graou_impl", 0, kdur, kamp, mtof:k(knote), kQ)
+ endif
+endop
+
+instr smooth_wave_instr
+ inote init p4
+ iamp init p5
+ $FQ
+ acrv = transeg:a(0, p3/3, 3, 1, p3/3*2, -3, 0)
+
+ ;acrv = tablei:a(linseg:a(0, p3, 1), icrv, 1) * linseg:a(0, p3/100, 1, p3/100*98, 1, p3/100, 0)
+ kvib = poscil:k( expseg:k(random:i(0, ifq/30), p3, random:i(0, ifq/30)), expseg:k(random:i(0.01, 10), p3, random:i(0.01, 10)))
+ asig = vco2(0.8, kfq + kvib, 10)
+
+ abnd = bqrez:a(asig, kfq, 50, 3)
+ aout = balance(abnd, asig) * (acrv * iamp)
+
+ ipan = random:i(0, 1)
+ aL, aR pan2 aout * gkgain, ipan
+ chnmix(aL, "out1")
+ chnmix(aR, "out2")
+endin
+
+opcode buzzwave, 0, kkkkO
+ ktrig, kamp, knote, kdur, ksav xin
+ ktrig = limit:k(ktrig, 0, 1)
+ kamp = limit:k(kamp ,0, 1)
+ knote = limit:k(knote, 0, 100) + 20
+ kdur = to_tempo_dur(limit:k(kdur, 0.001, 1000))
+ if(trigger:k(ktrig, 0.5, 0) == 1) then
+ schedulek("smooth_wave_instr", 0, kdur, knote, kamp, ksav)
+ endif
+endop
+
+instr smooth_noise_instr
+ inote init p4
+ iamp init p5
+
+ $FQ
+
+ afb init 0
+
+ acrv = transeg:a(0, p3/3, 3, 1, p3/3*2, -3, 0)
+ kvib = oscili:k( expseg:k(random:i(0, ifq/30), p3, random:i(0, ifq/30)), expseg:k(random:i(0.1, 15), p3, random:i(0.1, 15)))
+ asig = pinker()
+
+ kfreq = kfq + kvib
+
+ abnd = bqrez:a( bqrez:a(asig, kfreq, 70, 2), kfreq * 2, 70, 2)
+ adist = distort1(abnd, 2, 1, 0.15, 0.15)
+ aout = balance(adist, asig) * (acrv * iamp)
+
+ ;adel = abs(oscili:a(200, expseg:a(random:i(0.1, 15), p3, random:i(0.1, 15))))
+ adelayed = vdelay3(aout + afb, a(100) , 1000)
+ afb = adelayed * 0.2
+
+ ares = (adelayed + aout)
+ ipan = random:i(0, 1)
+ aL, aR pan2 ares * 5 * gkgain, ipan
+ chnmix(aL, "out1")
+ chnmix(aR, "out2")
+endin
+
+opcode noisywave, 0, kkkkO
+ ktrig, kamp, knote, kdur, ksav xin
+ ktrig = limit:k(ktrig, 0, 1)
+ kamp = limit:k(kamp ,0, 1)
+ knote = limit:k(knote, 0, 100) + 20
+ kdur = to_tempo_dur(limit:k(kdur, 0.001, 1000))
+ if(trigger:k(ktrig, 0.5, 0) == 1) then
+ schedulek("smooth_noise_instr", 0, kdur, knote, kamp, ksav)
+ endif
+endop
+
+; very chaotic nonlinear moving waveform & timber & modulation
+instr crunchy_instr
+ inote init p4
+ iamp init p5
+ $FQ
+
+ ao = vco2:a(iamp, kfq) + oscili:a(iamp * 0.5, kfq * 0.5)
+ afilt = K35_lpf(ao, abs(galorenz_x)*2000+100, abs(galorenz_z) * 5 + 1.05 )
+
+ kshape1 = 0.1;lag(abs( gklorenz_y) * 0.1, 1)
+ kshape2 = 0.1;lag(abs(gklorenz_z) * 0.1, 1)
+ kpregain = mirror:k(gklorenz_x * gklorenz_y, 0.03, 1) * 500
+ kpostgain = 1 / limit:k(kpregain, .2, 25);0.1
+ adist = lag(distort1(afilt, kpregain, kpostgain, kshape1, kshape2) , 0.003)
+
+ aenv = (expseg:a(1.01, p3, 0.01) - a(0.01))
+ adist *= aenv * iamp * 0.8
+ kpan = gkmirlorenz_y
+ aL, aR pan2 adist * gkgain, kpan
+ chnmix(aL, "out1")
+ chnmix(aR, "out2")
+endin
+
+opcode crunchy, 0, kkkkO
+ ktrig, kamp, knote, kdur, ksav xin
+ ktrig = limit:k(ktrig, 0, 1)
+ kamp = limit:k(kamp ,0, 1)
+ knote = limit:k(knote, 0, 100) + 20
+ kdur = to_tempo_dur(limit:k(kdur, 0.001, 1000))
+ if(check_trig(ktrig) == 1) then
+ schedulek("crunchy_instr", 0, kdur, knote, kamp, ksav)
+ endif
+endop
+
+instr crunchyslow_instr
+ inote init p4
+ iamp init p5
+ $FQ
+ ao = vco2:a(iamp, kfq) + oscili:a(iamp * 0.5, kfq * 0.5) + vco2(iamp*0.25, kfq * 3)
+ afilt = K35_lpf(ao, mirror:a(galorenz_x, 0, 1)*5000+100, abs(galorenz_z) * 5 + 1.05 )
+
+ kshape1 = 0.1;lag(abs( gklorenz_y) * 0.1, 1)
+ kshape2 = 0.1;lag(abs(gklorenz_z) * 0.1, 1)
+ kpregain = mirror:k(gklorenz_x * gklorenz_y, 0.03, 1) * 350
+ ;kpostgain = 0.1
+ kpostgain = 1 / limit:k(kpregain, .2, 25);0.1
+
+ adist = lag(distort1(afilt, kpregain, kpostgain, kshape1, kshape2) , 0.003)
+
+ aenv = (expseg:a(0.01, p3/2, 1.01, p3/2, 0.01) - a(0.01))
+ adist *= aenv * iamp
+ ipan_base = rint:i(0, 1)
+ kpan = gkmirlorenz_y
+ if(ipan_base > 0) then
+ kpan = 1 - kpan
+ endif
+ aL, aR pan2 adist * gkgain, kpan
+ chnmix(aL, "out1")
+ chnmix(aR, "out2")
+endin
+
+opcode crunchy_wav, 0, kkkkO
+ ktrig, kamp, knote, kdur, ksav xin
+ ktrig = limit:k(ktrig, 0, 1)
+ kamp = limit:k(kamp ,0, 1)
+ knote = limit:k(knote, 0, 100) + 20
+ kdur = to_tempo_dur(limit:k(kdur, 0.001, 1000))
+ if(check_trig(ktrig) == 1) then
+ schedulek("crunchyslow_instr", 0, kdur, knote, kamp, ksav)
+ endif
+endop
+
+opcode darkwave, 0, kkkkO
+ ktrig, kamp, knote, kdur, ksav xin
+ crunchy_wav(ktrig, kamp, knote, kdur, ksav)
+endop
+
+instr shinywave_instr
+ inote init p4
+ iamp init p5
+ $FQ
+ ao = vco2:a(iamp, kfq) + oscili:a(iamp * 0.5, kfq * 0.5) + vco2(iamp*0.45, kfq * 2) + vco2(iamp*0.3, kfq*3)
+ ;afilt = K35_lpf(ao, mirror:a(galorenz_x, 0, 1)*5000+100, abs(galorenz_z) * 5 + 1.05 )
+
+ kshape1 = 0;lag(abs( gklorenz_y) * 0.1, 1)
+ kshape2 = 0; lag(abs(gklorenz_z) * 0.1, 1)
+ kpregain = abs( lag( mirror:k(gklorenz_x * gklorenz_y, 0.03, 1) , 0.5) ) * 500
+ kpostgain = 0.1
+ adist = lag(distort1(ao, kpregain, kpostgain, kshape1, kshape2) , 0.003)
+
+ aenv = (expsegr:a(0.01, p3, 1.01, 0.05, 0.01) - a(0.01))
+ adist *= aenv * iamp * 0.7
+ ipan_base = rint:i(0, 1)
+ kpan = gkmirlorenz_y
+ if(ipan_base > 0) then
+ kpan = 1 - kpan
+ endif
+ aL, aR pan2 adist * gkgain, kpan
+ chnmix(aL, "out1")
+ chnmix(aR, "out2")
+endin
+
+opcode brightwave, 0, kkkkO
+ ktrig, kamp, knote, kdur, ksav xin
+ ktrig = limit:k(ktrig, 0, 1)
+ kamp = limit:k(kamp ,0, 1)
+ knote = limit:k(knote, 0, 100) + 20
+ kdur = to_tempo_dur(limit:k(kdur, 0.001, 1000))
+ if(check_trig(ktrig) == 1) then
+ schedulek("shinywave_instr", 0, kdur, knote, kamp, ksav)
+ endif
+endop
+
+; very chaotic nonlinear moving waveform & timber & modulation
+instr glide_instr
+ inote init p4
+ iamp init p5
+ $FQ
+
+ ibase = random:i(0.01, 0.4) * ifq
+ kglide = transeg:k(ibase, p3/4, -6, ifq) + (ksavage * ifq)
+
+ ao = vco2:a(iamp, kglide) + oscili:a(iamp * 0.5, kglide * 0.5) + vco2(iamp * 0.3, kglide * 2, 10)
+ ;afilt = K35_lpf(ao, abs(galorenz_x)* 10000+500, abs(galorenz_z) * 3 + 1.05 )
+
+ kshape1 = lag(abs( gklorenz_y) * 0.1, 1)
+ kshape2 = lag(abs(gklorenz_z) * 0.1, 1)
+ kpregain = abs( lag( mirror:k(gklorenz_y * gklorenz_z, 0.03, 1) , 1) ) * 500
+ kpostgain = 0.1
+ adist = lag(distort1(ao, kpregain, kpostgain, kshape1, kshape2) , 0.003)
+
+ aenv = (expseg:a(0.01, 0.02, 1.01, p3 - 0.02, 0.01) - a(0.01))
+ adist *= aenv * iamp * 0.3
+ kpan = gkmirlorenz_z ;mirror:a(abs(galorenz_y), 0, 1)
+ aL, aR pan2 adist * gkgain, kpan
+ chnmix(aL, "out1")
+ chnmix(aR, "out2")
+endin
+
+opcode glidy, 0, kkkkO
+ ktrig, kamp, knote, kdur, ksav xin
+ ktrig = limit:k(ktrig, 0, 1)
+ kamp = limit:k(kamp ,0, 1)
+ knote = limit:k(knote, 0, 100) + 20
+ kdur = to_tempo_dur(limit:k(kdur, 0.001, 1000))
+ if(check_trig(ktrig) == 1) then
+ schedulek("glide_instr", 0, kdur, knote, kamp, ksav)
+ endif
+endop
+
+instr snare_impl
+
+ idur init p3 ; Duration
+ idyn init p4 ; Amplitude
+ ifqc init p5 ; Pitch to frequency
+ irez init p6 ; Tone
+ ispdec init p7 ; Spring decay
+ ispton init p8 ; Spring tone
+ ispmix init p9 ; Spring mix
+ ispq init p10 ; Spring Q
+ ipbnd init p11 ; Pitch bend
+ ipbtm init p12 ; Pitch bend time
+
+
+ kdclk linseg 1, idur-.002, 1, .002, 0 ; Declick envelope
+ adyn linseg 1, .2/ifqc, 1, .2/ifqc, 0, idur-.002, 0 ; An amplitude pulse
+ kptch linseg 1, ipbtm, ipbnd, ipbtm, 1, .1, 1
+
+ aosc1 vco 1, ifqc, 2, 1, 1, 1 ; Use a pulse of the vco to stimulate the filters
+ aosc = -aosc1*adyn ; Multiply by the envelope pulse
+ aosc2 butterlp aosc, 12000 ; Lowpass at 12K to take the edge off
+
+ asig1 moogvcf aosc, ifqc*kptch, .9*irez ; Moof filter with high resonance for basic drum tone
+ asig2 moogvcf aosc*.5, ifqc*2.1*kptch, .75*irez ; Sweeten with an overtone
+
+ adynr expseg .1, .002, 1, .2, .005
+
+ apink1 pinkish 2, 0, 20;, iseed ; Use multi-rate pink noise
+ apink2 pinkish 2, 0, 20;, iseed ; Use multi-rate pink noise
+
+ apink1 = apink1*2*asig1
+ arndr1 delay apink1-apink2*.6, .01
+
+ ahp1l rezzy apink1+arndr1, 2700*ispton*kptch, 5*ispq, 1 ; High pass rezzy based at 2700
+ ahp2l butterbp apink1, 2000*ispton*kptch, 500/ispq ; Generate an undertone
+ ahp3l butterbp apink1, 5400*ispton*kptch, 500/ispq ; Generate an overtone
+ ahpl pareq ahp1l+ahp2l*.7+ahp3l*.3, 15000, .1, .707, 2 ; Attenuate the highs a bit
+
+ ; Mix drum tones, pulse and noise signal & declick
+ aoutl = (asig1+asig2+aosc2*.1+ahpl*ispmix*4)*idyn*kdclk
+
+ isavage_mode init p13
+ $SAVAGE(isavage_mode')
+ adelayed init 0
+ kfb = mirror:k(abs(gklorenz_y) + 0.5, 0, 0.9)
+ adel = limit:a( interp( ( mirror:k( lineto(abs(ksavage), 0.1) , 0.2, 0.999 ) * 1000)), 0.01, 1000)
+
+ adelayed = vdelay(aoutl + (adelayed * kfb), adel, 1500)
+ krel = linsegr:k(1, 1, 1, 1, 0)
+
+ ksav_mult = (isavage_mode > 0) ? 1 : 0
+ amix = (aoutl + (adelayed * ksav_mult)) * krel
+
+ ;outall aoutl
+ chnmix(amix, "out1")
+ chnmix(amix, "out2")
+endin
+
+opcode snare, 0, kkO
+ ktrig, kamp, ksav xin
+ ktrig = limit:k(ktrig, 0, 1)
+ kamp = limit:k(kamp ,0, 1)
+ if(check_trig(ktrig) == 1) then
+ ;i34 0.0 .5 30000 7.00 .5 .7 1 1 1 1 1.5 .1
+ idur random 1/12, 1/8 ; Duration
+ kdyn = kamp ; random 1/9, 1/2 ; Amplitude
+ kfqc random 500, 400 ; Pitch to frequency
+ krez random 1/2, .95 ; Tone
+ kspdec random 1, 2 ; Spring decay
+ kspton random 1, 2 ; Spring tone
+ kspmix random 1/9, 1 ; Spring mix
+ kspq random 1/4, 2 ; Spring Q
+ kpbnd random 1, 2 ; Pitch bend
+ kpbtm random 1/32, 1/8 ; Pitch bend time
+ schedulek "snare_impl", 0, idur, kdyn, kfqc, krez, kspdec, kspton, kspmix, kspq, kpbnd, kpbtm, ksav
+ endif
+endop
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+gawater[] init 2
+instr water_verb
+ a1 = gawater[0]
+ a2 = gawater[1]
+
+ aL, aR freeverb a1, a2, 0.8, 0.8, 48000
+ aenv = linsegr:a(0, 1, 1, 1, 0)
+ aL *= aenv
+ aR *= aenv
+ aL = dcblock2(aL)
+ aR = dcblock2(aR)
+ outs aL*0.4, aR*0.4
+
+ gawater[0] = 0
+ gawater[1] = 1
+endin
+maxalloc("water_verb", 1)
+schedule("water_verb", 0, -1)
+
+instr water_impl
+
+ imaxshake = p4
+ ifreq = p5
+ ifreq1 = p6
+ ifreq2 = p7
+
+ iamp init p8
+ ipos init p9
+ ;low amplitude
+ adrp dripwater .1, 0.09, 15, .9, imaxshake, ifreq, ifreq1, ifreq2
+ asig clip adrp, 2, 0.9 ; avoid drips that drip too loud
+ ;asig = mirror(adrp, -0.9, 0.9)
+ asig *= (0.3 * iamp)
+
+ a1, a2 pan2 asig, ipos
+ gawater[0] = gawater[0] + a1
+ gawater[1] = gawater[1] + a2
+ outs a1, a2
+
+endin
+
+opcode water_drop, 0, kkk
+ kamp, kspeed, kshake xin
+
+ kshake = limit:k(kshake, 0, 1)
+ ipos = random:i(0, 1)
+ kamp = limit:k(kamp, 0, 1)
+ kspeed = limit:k(kspeed, 0.001, 1)*15
+
+ kmet = drunk(kspeed, 0.7)
+ if(kmet == 1) then
+ kfq1 = random:k(380, 500) ;430
+ kfq2 = random:k(900, 1200) ; 1000
+ kfq3 = random:k(700, 880) ;800
+ schedulek("water_impl", 0, 0.5, kshake, kfq1, kfq2, kfq3, kamp, ipos)
+ endif
+endop
+
+instr ks_impl
+ ;ares pluck kamp, kcps, icps, ifn, imeth [, iparm1] [, iparm2]
+ inote init p4
+ ;iamp init p5
+ kamp init p5
+ icps = mtof:i(inote)
+ kcps = icps
+ ifn init 0
+ imeth init 1
+ iparm1 = .001
+ iparm2 = 10
+ asig = pluck(kamp, kcps, icps, ifn, imeth, iparm1)
+ imod_div = rint:i(1, 4) * 2
+ amod = pluck(1, kcps/imod_div, icps/imod_div, ifn, imeth, iparm1)
+ ares = asig * (a(0.5) - amod)
+
+ kpregain = 2
+ kpostgain = 0.25
+ kshape1 = 0
+ kshape2 = 0
+ imode = 3
+ ;adist distort1 ares, kpregain, kpostgain, kshape1, kshape2, imode
+ adist = pdclip(ares*10, .5, 0.6)
+ ablock = dcblock2(adist)
+ adist = balance(adist, ares) * kamp
+
+
+ ipan = random:i(0, 1)
+ al, ar pan2 ablock, ipan
+ chnmix(al, "out1")
+ chnmix(ar, "out2")
+endin
+
+opcode strike, 0, kkkk
+ ktrig, kamp, knote, kdur xin
+ ktrig = limit:k(ktrig, 0, 1)
+ kamp = limit:k(kamp ,0, 1)
+ knote = limit:k(knote, 0, 100) + 20
+ kdur = to_tempo_dur(limit:k(kdur, 0.001, 1000))
+ if(check_trig(ktrig) == 1) then
+ schedulek("ks_impl", 0, kdur, knote, kamp)
+ endif
+endop
+
+
+instr vibish_impl
+ inote init p4
+ iamp init p5
+
+ kadd1 = rspline:k(-0.45, 0.28, 0.2, 1)
+ kfq1 = mtof:k(inote+kadd1)
+ kadd2 = rspline:k(-0.45, 0.35, 0.3, 1)
+ kfq2 = mtof:k(inote+kadd2)
+
+ iadd1 = random:i(.1, 6)
+ iadd2 = random:i(.1, 8)
+
+ iprop1 = random:i(0.1, 0.9)
+ iprop1_inv = 1 - iprop1
+ idest1 = random:i(0.3, 0.75)
+ kclipenv1 = cosseg:k(0, iprop1 * p3, idest1, iprop1_inv * p3, 0)
+
+ iprop2 = random:i(0.1, 0.9)
+ iprop2_inv = 1 - iprop1
+ idest2 = random:i(0.3, 0.75)
+ kclipenv2 = cosseg:k(0, iprop2 * p3, idest2, iprop2_inv * p3, 0)
+
+ ao1 = pdclip(oscili(iamp, kfq2) + oscili(iamp, kfq1 + iadd1), kclipenv1, -0.5)
+ ao2 = pdclip(oscili(iamp, kfq2) + oscili(iamp, kfq2 + iadd2), kclipenv2, -0.5)
+ aenv = cossegr:a(0, p3/2, 1, p3/2, 0.05, p3/4, 0)
+
+ ao1 *= aenv * iamp
+ ao2 *= aenv * iamp
+ chnmix(ao1, "out1")
+ chnmix(ao2, "out2")
+endin
+
+opcode smooth, 0, kkkk
+ ktrig, kamp, knote, kdur xin
+ ktrig = limit:k(ktrig, 0, 1)
+ kamp = limit:k(kamp ,0, 1)
+ knote = limit:k(knote, 0, 100) + 20
+ kdur = to_tempo_dur(limit:k(kdur, 0.001, 1000))
+ if(check_trig(ktrig) == 1) then
+ schedulek("vibish_impl", 0, kdur, knote, kamp)
+ endif
+endop
+
+
+instr bounce_impl
+ inote init p4
+ iamp init p5
+
+ ifq1 = mtof:i(inote) + random:i(-3, 2)
+ ifq2 = mtof:i(inote) + random:i(-3, 2)
+ ao1= vco2(iamp, ifq1)
+ ao2= vco2(iamp, ifq2)
+
+ ao1 *= ao2
+ ao2 *= ao1
+
+ kramp1 = expseg:k(random:i(0.1, 10), p3, random:i(0.1, 10))
+ kramp2 = expseg:k(random:i(0.1, 10), p3, random:i(0.1, 10))
+ kmod1 = pow(abs(lfo(0.3, kramp1, 5)), 5)
+ kmod2 = pow(abs(lfo(0.3, kramp2, 5)), 5)
+
+ ao1 *= 1 - kmod1
+ ao2 *= 1 - kmod2
+
+ aenv = cosseg:a(1, p3, 0)
+
+ ao1 *= aenv
+ ao2 *= aenv
+ kphfq1 = rspline:k(100, 2000, .5, 3)
+ kphfq2 = rspline:k(200, 1800, .6, 3.3)
+ kphq = random:i(0.5, 0.9)
+ kmode init 1
+ kord init 4
+ ksep init 2
+ kfb = 0.7
+
+ aph1 = phaser2(ao1, kphfq1, kphq, kord, kmode, ksep, kfb) * 0.4
+ aph2 = phaser2(ao1, kphfq2, kphq, kord, kmode, ksep, kfb) * 0.4
+
+ chnmix(aph1*iamp, "out1")
+ chnmix(aph2*iamp, "out2")
+endin
+
+opcode bounce, 0, kkkk
+ ktrig, kamp, knote, kdur xin
+ ktrig = limit:k(ktrig, 0, 1)
+ kamp = limit:k(kamp ,0, 1)
+ knote = limit:k(knote, 0, 100) + 20
+ kdur = to_tempo_dur(limit:k(kdur, 0.001, 1000))
+ if(check_trig(ktrig) == 1) then
+ schedulek("bounce_impl", 0, kdur, knote, kamp)
+ endif
+endop
+
diff --git a/src/App.svelte b/src/App.svelte
index be2db73..1b850ee 100644
--- a/src/App.svelte
+++ b/src/App.svelte
@@ -299,11 +299,11 @@
{/snippet}
diff --git a/src/lib/components/editor/EditorSettings.svelte b/src/lib/components/editor/EditorSettings.svelte
index dd19949..89d7a92 100644
--- a/src/lib/components/editor/EditorSettings.svelte
+++ b/src/lib/components/editor/EditorSettings.svelte
@@ -1,6 +1,7 @@
+
+
+
+