tutticode 0.0.0-stage → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. package/LICENSE +56 -0
  2. package/README.md +159 -2
  3. package/README.zh-CN.md +138 -0
  4. package/dist/skills/tutticode/SKILL.md +140 -0
  5. package/dist/skills/tutticode/references/agent-loop.md +103 -0
  6. package/dist/skills/tutticode/references/devices/aligndelay.md +28 -0
  7. package/dist/skills/tutticode/references/devices/amp.md +25 -0
  8. package/dist/skills/tutticode/references/devices/analog.md +180 -0
  9. package/dist/skills/tutticode/references/devices/arpeggiator.md +37 -0
  10. package/dist/skills/tutticode/references/devices/autopan.md +37 -0
  11. package/dist/skills/tutticode/references/devices/autoshift.md +66 -0
  12. package/dist/skills/tutticode/references/devices/beatrepeat.md +35 -0
  13. package/dist/skills/tutticode/references/devices/cabinet.md +19 -0
  14. package/dist/skills/tutticode/references/devices/channeleq.md +23 -0
  15. package/dist/skills/tutticode/references/devices/chorus.md +31 -0
  16. package/dist/skills/tutticode/references/devices/collision.md +129 -0
  17. package/dist/skills/tutticode/references/devices/compressor.md +40 -0
  18. package/dist/skills/tutticode/references/devices/corpus.md +51 -0
  19. package/dist/skills/tutticode/references/devices/delay.md +37 -0
  20. package/dist/skills/tutticode/references/devices/denoise.md +19 -0
  21. package/dist/skills/tutticode/references/devices/drift.md +82 -0
  22. package/dist/skills/tutticode/references/devices/drumbuss.md +29 -0
  23. package/dist/skills/tutticode/references/devices/drumrack.md +225 -0
  24. package/dist/skills/tutticode/references/devices/dsclang.md +26 -0
  25. package/dist/skills/tutticode/references/devices/dsclap.md +25 -0
  26. package/dist/skills/tutticode/references/devices/dscymbal.md +22 -0
  27. package/dist/skills/tutticode/references/devices/dsfm.md +25 -0
  28. package/dist/skills/tutticode/references/devices/dshh.md +23 -0
  29. package/dist/skills/tutticode/references/devices/dskick.md +25 -0
  30. package/dist/skills/tutticode/references/devices/dssnare.md +23 -0
  31. package/dist/skills/tutticode/references/devices/dstom.md +24 -0
  32. package/dist/skills/tutticode/references/devices/dynamic-tube.md +26 -0
  33. package/dist/skills/tutticode/references/devices/echo.md +56 -0
  34. package/dist/skills/tutticode/references/devices/electric.md +50 -0
  35. package/dist/skills/tutticode/references/devices/ensemble.md +129 -0
  36. package/dist/skills/tutticode/references/devices/eqeight.md +69 -0
  37. package/dist/skills/tutticode/references/devices/eqthree.md +27 -0
  38. package/dist/skills/tutticode/references/devices/erosion.md +22 -0
  39. package/dist/skills/tutticode/references/devices/filter.md +55 -0
  40. package/dist/skills/tutticode/references/devices/filterdelay.md +37 -0
  41. package/dist/skills/tutticode/references/devices/gate.md +36 -0
  42. package/dist/skills/tutticode/references/devices/glue.md +36 -0
  43. package/dist/skills/tutticode/references/devices/graindelay.md +26 -0
  44. package/dist/skills/tutticode/references/devices/hybrid-reverb.md +22 -0
  45. package/dist/skills/tutticode/references/devices/impulse.md +157 -0
  46. package/dist/skills/tutticode/references/devices/leveler.md +23 -0
  47. package/dist/skills/tutticode/references/devices/limiter.md +26 -0
  48. package/dist/skills/tutticode/references/devices/meld.md +239 -0
  49. package/dist/skills/tutticode/references/devices/midichord.md +46 -0
  50. package/dist/skills/tutticode/references/devices/midifmarp.md +26 -0
  51. package/dist/skills/tutticode/references/devices/midinoteecho.md +30 -0
  52. package/dist/skills/tutticode/references/devices/midinotelength.md +27 -0
  53. package/dist/skills/tutticode/references/devices/midipitch.md +26 -0
  54. package/dist/skills/tutticode/references/devices/midirandom.md +24 -0
  55. package/dist/skills/tutticode/references/devices/midiscale.md +25 -0
  56. package/dist/skills/tutticode/references/devices/midivelocity.md +27 -0
  57. package/dist/skills/tutticode/references/devices/multibanddynamics.md +62 -0
  58. package/dist/skills/tutticode/references/devices/operator.md +163 -0
  59. package/dist/skills/tutticode/references/devices/overdrive.md +24 -0
  60. package/dist/skills/tutticode/references/devices/pedal.md +26 -0
  61. package/dist/skills/tutticode/references/devices/phaserflanger.md +42 -0
  62. package/dist/skills/tutticode/references/devices/pitchshifter.md +56 -0
  63. package/dist/skills/tutticode/references/devices/redux.md +27 -0
  64. package/dist/skills/tutticode/references/devices/resonator.md +49 -0
  65. package/dist/skills/tutticode/references/devices/reverb.md +43 -0
  66. package/dist/skills/tutticode/references/devices/roar.md +70 -0
  67. package/dist/skills/tutticode/references/devices/sampler.md +228 -0
  68. package/dist/skills/tutticode/references/devices/saturator.md +24 -0
  69. package/dist/skills/tutticode/references/devices/simpler.md +230 -0
  70. package/dist/skills/tutticode/references/devices/sixop.md +190 -0
  71. package/dist/skills/tutticode/references/devices/spectralresonator.md +42 -0
  72. package/dist/skills/tutticode/references/devices/spectraltime.md +45 -0
  73. package/dist/skills/tutticode/references/devices/synth.md +28 -0
  74. package/dist/skills/tutticode/references/devices/tension.md +117 -0
  75. package/dist/skills/tutticode/references/devices/utility.md +29 -0
  76. package/dist/skills/tutticode/references/devices/vinyl.md +31 -0
  77. package/dist/skills/tutticode/references/devices/vocoder.md +41 -0
  78. package/dist/skills/tutticode/references/devices/wavetable.md +128 -0
  79. package/dist/skills/tutticode/references/devices.md +114 -0
  80. package/dist/skills/tutticode/references/effect-controls.md +145 -0
  81. package/dist/skills/tutticode/references/first-sounds.md +89 -0
  82. package/dist/skills/tutticode/references/for-agents.md +119 -0
  83. package/dist/skills/tutticode/references/functions.md +1848 -0
  84. package/dist/skills/tutticode/references/getting-started.md +79 -0
  85. package/dist/skills/tutticode/references/harmony-and-scales.md +105 -0
  86. package/dist/skills/tutticode/references/javascript.md +90 -0
  87. package/dist/skills/tutticode/references/mini-notation.md +120 -0
  88. package/dist/skills/tutticode/references/mixing.md +101 -0
  89. package/dist/skills/tutticode/references/muse.md +67 -0
  90. package/dist/skills/tutticode/references/sample-operations.md +102 -0
  91. package/dist/skills/tutticode/references/sounds.md +109 -0
  92. package/dist/skills/tutticode/references/time-and-structure.md +161 -0
  93. package/dist/skills/tutticode/references/tuttidaw-extensions.md +131 -0
  94. package/dist/skills/tutticode-sound-for-media/SKILL.md +97 -0
  95. package/dist/skills/tutticode-sound-for-media/references/music-recipes.md +86 -0
  96. package/dist/skills/tutticode-sound-for-media/references/sfx-recipes.md +129 -0
  97. package/dist/tutticode.cjs +18694 -0
  98. package/package.json +39 -4
package/LICENSE ADDED
@@ -0,0 +1,56 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 TuttiDAW
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
22
+
23
+ -------------------------------------------------------------------------------
24
+ Notices
25
+
26
+ - This package is a local client. Sound is rendered by the TuttiCode engine on
27
+ https://tuttidaw.com, loaded in your own browser; its use is governed by the
28
+ TuttiDAW terms of use (https://tuttidaw.com/page/terms-of-use). You own the audio you render.
29
+ - The skills and references in dist/skills are TuttiDAW documentation,
30
+ included for use with your AI agents.
31
+ - TuttiCode is a superset of the Strudel pattern language; this package
32
+ contains no Strudel code.
33
+
34
+ Third-party software bundled in dist/tutticode.cjs:
35
+
36
+ ws (https://github.com/websockets/ws), MIT License
37
+ Copyright (c) 2011 Einar Otto Stangvik <einaros@gmail.com>
38
+ Copyright (c) 2013 Arnout Kazemier and contributors
39
+ Copyright (c) 2016 Luigi Pinca and contributors
40
+
41
+ Permission is hereby granted, free of charge, to any person obtaining a copy of
42
+ this software and associated documentation files (the "Software"), to deal in
43
+ the Software without restriction, including without limitation the rights to
44
+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
45
+ the Software, and to permit persons to whom the Software is furnished to do so,
46
+ subject to the following conditions:
47
+
48
+ The above copyright notice and this permission notice shall be included in all
49
+ copies or substantial portions of the Software.
50
+
51
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
52
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
53
+ FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
54
+ COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
55
+ IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
56
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
package/README.md CHANGED
@@ -1,3 +1,160 @@
1
- # Temporary Holding Version
1
+ # tutticode
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ [中文说明](README.zh-CN.md)
4
+
5
+ Turn **TuttiCode** - the [tuttidaw.com/code](https://tuttidaw.com/code)
6
+ pattern language, a superset of Strudel - into audio files from any agent or
7
+ script. A CLI and an MCP server for Claude Code, Copilot CLI, Codex, Cursor,
8
+ Claude Desktop and friends.
9
+
10
+ Rendering happens **in your own browser**, on the same engine as
11
+ tuttidaw.com/code, so a file sounds exactly like the editor. Nothing is
12
+ rendered on a server, there is no account, and it costs nothing. Every result
13
+ carries an `editUrl` that opens the program in TuttiDAW to keep editing.
14
+
15
+ ## Install
16
+
17
+ ```sh
18
+ npm i -g tutticode # or: npx tutticode ...
19
+ tutticode skills install # skills for Claude Code / Copilot / Codex
20
+ claude mcp add tutticode -- tutticode mcp # MCP clients
21
+ tutticode doctor # check that everything is in place
22
+ ```
23
+
24
+ Needs Node 20+ and Google Chrome or Microsoft Edge (Chromium works too).
25
+
26
+ Guide: [TuttiCode for agents](https://tuttidaw.com/code/learn/for-agents)
27
+ (install, the two backends, privacy, the browser permission,
28
+ troubleshooting).
29
+
30
+ ## Skills
31
+
32
+ `tutticode skills install` installs two skills (also readable online):
33
+
34
+ - [`tutticode`](https://tuttidaw.com/skills/tutticode/SKILL.md) - the
35
+ language: syntax, top mistakes, the `code_check` / `code_render` /
36
+ `code_compare` loop on both backends (this package, or TuttiDAW's web
37
+ MCP), and references for every function, sound and device.
38
+ - [`tutticode-sound-for-media`](https://tuttidaw.com/skills/tutticode-sound-for-media/SKILL.md)
39
+ - music beds, loops, stems and sound effects for videos, apps and games:
40
+ brief -> recipe -> check -> render at an exact length and a platform
41
+ loudness (-14 LUFS web/social, -16 podcasts, -23 broadcast) -> read the
42
+ stats -> revise, with tested recipes (riser, impact, whoosh, UI click /
43
+ confirm / error, notification, transition, ambience bed, music beds).
44
+
45
+ Claude Code, Copilot CLI and Codex read them from `~/.claude/skills`,
46
+ `~/.copilot/skills` and `~/.codex/skills`; `--dir <path>` installs them
47
+ anywhere else (for example a project's `.claude/skills`).
48
+
49
+ ## Use
50
+
51
+ ```sh
52
+ tutticode check song.tc # diagnostics, no audio
53
+ tutticode render song.tc -o bed.wav --seconds 12 --fade-out 1.5 --lufs -16 --json
54
+ tutticode render song.tc -o loop.flac --loops 4 --stems stems/
55
+ tutticode open song.tc # open it in TuttiCode for a human
56
+ cat song.tc | tutticode check - # read the program from stdin
57
+ ```
58
+
59
+ `render` flags: `--seconds|--bars|--loops N`, `--bpm N`,
60
+ `--format wav|flac|mp3` (default from the `-o` extension),
61
+ `--sample-rate 44100|48000`, `--bit-depth 16|24`, `--stems <dir>`,
62
+ `--fade-in s`, `--fade-out s`, `--tail s`, `--lufs N`, `--true-peak N`,
63
+ `--json`, `--timeout s`. `--lufs` applies one static gain; when the true-peak
64
+ ceiling cannot be met the render fails with `clip` instead of being limited.
65
+
66
+ `--json` prints the render report: length, bars, tempo, loudness and true
67
+ peak, the gain applied, per-voice levels, the bar and beat grid (seconds, for
68
+ syncing cuts), the check report, the analysis, the `editUrl` and the written
69
+ files. Audio is never printed.
70
+
71
+ Exit codes: `0` ok, `1` errors in the code (or a loudness target that would
72
+ clip), `2` bridge or browser problem, `3` usage.
73
+
74
+ ### MCP tools
75
+
76
+ `tutticode mcp` serves the same tools as TuttiDAW's web agent loop, so one
77
+ skill teaches both:
78
+
79
+ | tool | what it does |
80
+ | --- | --- |
81
+ | `code_check` | compile and plan, no audio: diagnostics, voices, mix warnings |
82
+ | `code_render` | render to a file (`out`), returns paths + statistics + `editUrl` |
83
+ | `code_compare` | compare a render with goals (or a Muse style), or two renders |
84
+ | `code_open` | open a program in a visible TuttiCode tab (`tutticode mcp --headless`: no window, returns the link) |
85
+ | `code_reference` | search the TuttiCode reference shipped in the package |
86
+
87
+ The reference documents are also MCP resources (`tutticode://skills/...`).
88
+
89
+ ## How it works
90
+
91
+ ```
92
+ agent --CLI/MCP--> tutticode (Node) --WebSocket 127.0.0.1--> tuttidaw.com/code/bridge (your browser)
93
+ ```
94
+
95
+ 1. The first call starts a local server on `127.0.0.1` with a random port
96
+ and a fresh 128-bit token, and opens
97
+ `https://tuttidaw.com/<locale>/code/bridge#p=<port>&t=<token>`. The port and
98
+ token sit in the URL fragment, which browsers never send to the server.
99
+ 2. The page connects back, renders with the TuttiCode engine and streams the
100
+ audio to tutticode, which writes your files.
101
+ 3. The bridge stays warm for 10 minutes, so later calls skip the startup.
102
+
103
+ By default (MCP and non-interactive calls) tutticode starts a **headless**
104
+ Chrome or Edge from your install with its own profile in
105
+ `~/.tutticode/browser-profile` and grants that profile the Local Network
106
+ Access permission for tuttidaw.com. That profile is yours (you installed
107
+ tutticode), so tutticode also gives the bridge page's one-time consent
108
+ ("Allow this agent to render sound with TuttiCode") in it, for tuttidaw.com
109
+ only. `--show` uses a visible tab in your default browser instead (the
110
+ default when you type a command in a terminal); there tutticode grants
111
+ nothing: the first time, the page asks for your consent and the browser asks
112
+ whether tuttidaw.com may access devices on your local network - allow both,
113
+ or run `tutticode setup` for the second.
114
+
115
+ Security: the server listens on 127.0.0.1 only, accepts one page at a time,
116
+ only from `https://tuttidaw.com` (or an origin you pass with `--origin` /
117
+ `--dev-origin`), only with the session token, and checks the Host header.
118
+ The CLI talks to its background bridge over a second token in
119
+ `~/.tutticode`, which web pages cannot reach. The headless browser is driven
120
+ over a private pipe (`--remote-debugging-pipe`), never a DevTools TCP port
121
+ other programs could connect to. Everything the page sends back is checked
122
+ before it touches your disk: the format, the numbers and the stem names are
123
+ validated, stem files are named from a safe character set and only ever
124
+ written inside the stems folder, and never through a symbolic link.
125
+
126
+ ## Commands
127
+
128
+ - `tutticode doctor` - Node, the browser, the page, the connection and the
129
+ engine version.
130
+ - `tutticode setup` - explains, asks, and then sets the browser policy
131
+ `LocalNetworkAccessAllowedForUrls = ["https://tuttidaw.com"]` for your
132
+ user (Windows: HKCU registry; macOS: `defaults`; Linux: a managed policy
133
+ file, needs sudo) so `--show` needs no click. `tutticode setup --undo`
134
+ removes exactly that entry. Also installs the skills (`--no-skills` to
135
+ skip).
136
+ - `tutticode skills install [--claude] [--copilot] [--codex] [--dir <path>]`
137
+ - copies both skills (`tutticode`, `tutticode-sound-for-media`) into `~/.claude/skills`, `~/.copilot/skills`,
138
+ `~/.codex/skills` (default: every agent folder that exists).
139
+
140
+ Bridge flags for every command: `--show` / `--headless`,
141
+ `--browser chrome|edge|<path>`, `--origin <url>` (staging / local dev),
142
+ `--dev-origin <url>`, `--locale <locale>`, `--no-daemon`, `--verbose`.
143
+ Environment: `TUTTICODE_BROWSER` (browser path), `TUTTICODE_HOME` (state
144
+ folder), `TUTTICODE_BROWSER_ARGS` (extra browser flags).
145
+
146
+ ## Privacy
147
+
148
+ tutticode sends no telemetry. Your program goes only to the TuttiCode page
149
+ in your own browser. Logs stay in `~/.tutticode/logs` and never contain your
150
+ program or audio.
151
+
152
+ ## Browsers
153
+
154
+ Chrome and Edge (desktop) are supported. Firefox and Safari may work with
155
+ `--show` but are not tested.
156
+
157
+ ## License
158
+
159
+ MIT for this package; see [LICENSE](LICENSE). Rendering uses the TuttiCode
160
+ engine on tuttidaw.com under the TuttiDAW terms of use.
@@ -0,0 +1,138 @@
1
+ # tutticode
2
+
3
+ [English](README.md)
4
+
5
+ 把 **TuttiCode**([tuttidaw.com/code](https://tuttidaw.com/code) 的 pattern 语言,
6
+ Strudel 的超集)变成音频文件,任何 agent 或脚本都能用。它是一个 CLI,也是一个
7
+ MCP server,适用于 Claude Code、Copilot CLI、Codex、Cursor、Claude Desktop 等。
8
+
9
+ 渲染**在你自己的浏览器里**进行,用的就是 tuttidaw.com/code 的同一个引擎,所以
10
+ 文件和编辑器里听到的一模一样。不经过服务器渲染,不需要账号,也不收费。每个结果
11
+ 都带一个 `editUrl`,可以在 TuttiDAW 里打开这段程序继续编辑。
12
+
13
+ ## 安装
14
+
15
+ ```sh
16
+ npm i -g tutticode # 或者: npx tutticode ...
17
+ tutticode skills install # 给 Claude Code / Copilot / Codex 装 skill
18
+ claude mcp add tutticode -- tutticode mcp # MCP 客户端
19
+ tutticode doctor # 检查环境是否就绪
20
+ ```
21
+
22
+ 需要 Node 20+,以及 Google Chrome 或 Microsoft Edge(Chromium 也可以)。
23
+
24
+ 使用指南:[给 agent 用的 TuttiCode](https://tuttidaw.com/zh-CN/code/learn/for-agents)
25
+ (安装、两个后端、隐私、浏览器权限、常见问题)。
26
+
27
+ ## Skill
28
+
29
+ `tutticode skills install` 会安装两个 skill(也可以在线阅读):
30
+
31
+ - [`tutticode`](https://tuttidaw.com/skills/tutticode/SKILL.md) —— 语言本身:
32
+ 语法、常见错误、在两个后端(本包,或 TuttiDAW 网页版 MCP)上的
33
+ `code_check` / `code_render` / `code_compare` 循环,以及每个函数、音色和设备的参考。
34
+ - [`tutticode-sound-for-media`](https://tuttidaw.com/skills/tutticode-sound-for-media/SKILL.md)
35
+ —— 为视频、应用和游戏做配乐、循环、分轨和音效:需求 -> 配方 -> 检查 -> 按精确时长和
36
+ 平台响度渲染(网页/社交 -14 LUFS、播客 -16、广播 -23)-> 读数据 -> 修改;配方都经过测试
37
+ (riser、impact、whoosh、UI 点击/确认/错误、通知、转场、环境音床、配乐)。
38
+
39
+ Claude Code、Copilot CLI 和 Codex 分别从 `~/.claude/skills`、`~/.copilot/skills`、
40
+ `~/.codex/skills` 读取;`--dir <路径>` 可以装到其他任何地方(比如项目里的 `.claude/skills`)。
41
+
42
+ ## 用法
43
+
44
+ ```sh
45
+ tutticode check song.tc # 只检查,不出声音
46
+ tutticode render song.tc -o bed.wav --seconds 12 --fade-out 1.5 --lufs -16 --json
47
+ tutticode render song.tc -o loop.flac --loops 4 --stems stems/
48
+ tutticode open song.tc # 在 TuttiCode 里打开给人看
49
+ cat song.tc | tutticode check - # 从 stdin 读程序
50
+ ```
51
+
52
+ `render` 参数: `--seconds|--bars|--loops N`、`--bpm N`、
53
+ `--format wav|flac|mp3`(默认按 `-o` 的扩展名)、`--sample-rate 44100|48000`、
54
+ `--bit-depth 16|24`、`--stems <目录>`、`--fade-in 秒`、`--fade-out 秒`、
55
+ `--tail 秒`、`--lufs N`、`--true-peak N`、`--json`、`--timeout 秒`。
56
+ `--lufs` 只做一次静态增益;如果达不到 true peak 上限,会以 `clip` 失败,而不是
57
+ 偷偷加限制器。
58
+
59
+ `--json` 输出渲染报告:时长、小节数、速度、响度和 true peak、施加的增益、每个
60
+ 声部的电平、小节和拍的时间点(秒,用来对齐剪辑点)、检查报告、分析结果、
61
+ `editUrl` 和写出的文件路径。永远不会把音频打印到终端。
62
+
63
+ 退出码: `0` 成功, `1` 代码有错(或响度目标会削波), `2` bridge / 浏览器问题,
64
+ `3` 用法错误。
65
+
66
+ ### MCP 工具
67
+
68
+ `tutticode mcp` 提供和 TuttiDAW 网页版 agent loop 相同的工具,一份 skill 两边通用:
69
+
70
+ | 工具 | 作用 |
71
+ | --- | --- |
72
+ | `code_check` | 编译并规划,不出声音:诊断、声部、混音提醒 |
73
+ | `code_render` | 渲染到文件(`out`),返回路径 + 统计 + `editUrl` |
74
+ | `code_compare` | 把一次渲染和目标(或 Muse 风格)比较,或比较两次渲染 |
75
+ | `code_open` | 在可见的 TuttiCode 标签页里打开程序(`tutticode mcp --headless` 时不开窗口,只返回链接) |
76
+ | `code_reference` | 搜索包里自带的 TuttiCode 参考文档 |
77
+
78
+ 参考文档同时作为 MCP resources 提供(`tutticode://skills/...`)。
79
+
80
+ ## 工作原理
81
+
82
+ ```
83
+ agent --CLI/MCP--> tutticode (Node) --WebSocket 127.0.0.1--> tuttidaw.com/code/bridge (你的浏览器)
84
+ ```
85
+
86
+ 1. 第一次调用时,在 `127.0.0.1` 的随机端口上启动本地服务,生成新的 128 位
87
+ token,然后打开 `https://tuttidaw.com/<locale>/code/bridge#p=<端口>&t=<token>`。
88
+ 端口和 token 放在 URL 的 fragment(`#` 后面),浏览器不会把它发给服务器。
89
+ 2. 页面连回本地服务,用 TuttiCode 引擎渲染,把音频传回 tutticode,由它写文件。
90
+ 3. bridge 会保持 10 分钟,后续调用不用重新启动。
91
+
92
+ 默认情况下(MCP 和非交互调用),tutticode 会用你已安装的 Chrome 或 Edge 启动一个
93
+ **无头(headless)**浏览器,使用独立的配置目录 `~/.tutticode/browser-profile`,并
94
+ 给这个配置授予 tuttidaw.com 的"本地网络访问"权限。这个配置是你自己的(tutticode 是
95
+ 你装的),所以 tutticode 也会在其中代你给出 bridge 页面的一次性同意("允许这个 agent
96
+ 用 TuttiCode 渲染声音"),只对 tuttidaw.com 生效。`--show` 改为在默认浏览器里打开
97
+ 可见标签页(在终端里手动敲命令时默认如此),这时 tutticode 不代授任何东西:第一次
98
+ 页面会请你同意,浏览器也会询问是否允许 tuttidaw.com 访问本地网络上的设备 —— 两者都
99
+ 选允许,后者也可以运行 `tutticode setup` 免去。
100
+
101
+ 安全:服务只监听 127.0.0.1,同一时间只接受一个页面,只接受来自
102
+ `https://tuttidaw.com`(或你用 `--origin` / `--dev-origin` 指定的来源)且带有本次
103
+ token 的连接,并检查 Host 头。CLI 和后台 bridge 之间用 `~/.tutticode` 里的另一个
104
+ token 通信,网页无法访问。无头浏览器通过私有管道(`--remote-debugging-pipe`)控制,
105
+ 从不开放其他程序能连上的 DevTools TCP 端口。页面传回的一切在写盘前都要校验:格式、
106
+ 数值和分轨名都会检查,分轨文件名只用安全字符,只写进分轨文件夹,也绝不经由符号链接写入。
107
+
108
+ ## 命令
109
+
110
+ - `tutticode doctor` —— 检查 Node、浏览器、页面、连接和引擎版本。
111
+ - `tutticode setup` —— 先说明、再询问,同意后为当前用户设置浏览器策略
112
+ `LocalNetworkAccessAllowedForUrls = ["https://tuttidaw.com"]`
113
+ (Windows:HKCU 注册表;macOS:`defaults`;Linux:托管策略文件,需要 sudo),
114
+ 这样 `--show` 不再需要点击确认。`tutticode setup --undo` 只删除这一条。
115
+ 同时安装 skill(`--no-skills` 跳过)。
116
+ - `tutticode skills install [--claude] [--copilot] [--codex] [--dir <路径>]`
117
+ —— 把两个 skill(`tutticode`、`tutticode-sound-for-media`)复制到 `~/.claude/skills`、`~/.copilot/skills`、
118
+ `~/.codex/skills`(默认:所有已存在的 agent 目录)。
119
+
120
+ 所有命令通用的 bridge 参数:`--show` / `--headless`、
121
+ `--browser chrome|edge|<路径>`、`--origin <url>`(预发 / 本地开发)、
122
+ `--dev-origin <url>`、`--locale <语言>`、`--no-daemon`、`--verbose`。
123
+ 环境变量:`TUTTICODE_BROWSER`(浏览器路径)、`TUTTICODE_HOME`(状态目录)、
124
+ `TUTTICODE_BROWSER_ARGS`(额外的浏览器参数)。
125
+
126
+ ## 隐私
127
+
128
+ tutticode 不发送任何遥测数据。你的程序只会交给你自己浏览器里的 TuttiCode 页面。
129
+ 日志保存在 `~/.tutticode/logs`,不包含程序内容和音频。
130
+
131
+ ## 浏览器
132
+
133
+ 支持桌面版 Chrome 和 Edge。Firefox 和 Safari 用 `--show` 可能可以用,但未测试。
134
+
135
+ ## 许可
136
+
137
+ 本包采用 MIT 许可,见 [LICENSE](LICENSE)。渲染使用 tuttidaw.com 上的 TuttiCode
138
+ 引擎,遵循 TuttiDAW 使用条款。
@@ -0,0 +1,140 @@
1
+ ---
2
+ name: tutticode
3
+ description: Write, fix, check and render TuttiCode (TuttiDAW Code): Strudel-compatible live-coding pattern programs (mini-notation, note/s/n, scales, chords, effects, samples) that play on TuttiDAW instruments and effects, plus TuttiCode-only .inst/.fx/.midifx devices. Covers the code_check / code_render / code_compare tools of the local tutticode CLI/MCP and the TuttiDAW web MCP. Use when asked for Strudel, TuttiCode or TuttiDAW code, a beat/melody/loop as code, a tuttidaw.com/code link, a Pattern Clip, rendering code to audio, or when a pattern program errors.
4
+ ---
5
+
6
+ # TuttiCode
7
+
8
+ TuttiCode (TuttiDAW Code) is a pattern language for music: a superset of
9
+ Strudel (strudel.cc) that plays on TuttiDAW's instruments and effects. A
10
+ program is JavaScript built from pattern functions; double-quoted strings are
11
+ mini-notation. It loops: one cycle = one bar.
12
+
13
+ ## Core syntax
14
+
15
+ ```js
16
+ setcpm(30) // cycles (bars) per minute: 30 = 120 BPM in 4/4
17
+ drums: s("bd [~ bd] sd ~, hh*8").bank("tr909") // a labelled voice = one track
18
+ bass: note("c2 [~ c2] eb2 g1").s("sawtooth").lpf(800)
19
+ chords: chord("<Cm7 Ab^7 Fm7 G7>").voicing().inst("Electric").fx("Reverb:Large Hall")
20
+ _lead: n("0 2 4 7").scale("C:minor") // a leading _ mutes a voice
21
+ ```
22
+
23
+ - Mini-notation: `a b c` steps share a cycle; `~` rest; `[a b]` one step;
24
+ `<a b>` one per cycle; `a,b` together; `*n` `/n` faster/slower; `@n`
25
+ longer; `!n` repeat; `x(3,8)` Euclidean; `?` maybe; `a|b` random choice;
26
+ `{a b c, d e}` polymeter; `bd:3` variant.
27
+ - Pitches: `note("c4")` = MIDI 60; no octave = octave 3. `n("0 2 4").scale("C:minor")`
28
+ plays scale degrees (root in octave 3). `chord("Am7").voicing()` voices
29
+ chord symbols.
30
+ - Time: `.fast` `.slow` `.early` `.late` `.rev` `.ply` `.iter` `.every(n, f)`
31
+ `.lastOf(n, f)` `.off(t, f)` `.superimpose(f)` `.struct("x ~ x")`
32
+ `.mask("1 0")` `.swingBy(1/3, 4)`; combine with `stack` `cat` `seq`
33
+ `arrange([4, a], [2, b])`. `f` is an arrow function: `x => x.fast(2)`.
34
+ - Sound: `s("bd sd hh cp oh")` drums (`.bank("tr808")`), waveforms
35
+ `sine triangle square sawtooth supersaw`, `piano`, `gm_*` names.
36
+ - Controls: `.gain` `.velocity` `.pan` `.lpf` `.hpf` `.lpq` `.room` `.size`
37
+ `.delay` `.delaytime` `.delayfeedback` `.shape` `.crush` `.attack`
38
+ `.decay` `.sustain` `.release`; signals `sine saw tri perlin rand` with
39
+ `.range(a, b)` `.slow(n)` `.segment(n)`.
40
+ - TuttiDAW only: `.inst("Device:Preset", {key: value})` instrument,
41
+ `.midifx(...)` before it, `.fx(...)` after it, in call order. Params use the
42
+ device's keys and units (`"4s"`, `"-6dB"`, `"1/16"`); constants only for now.
43
+ `toggle(1)` is an inline switch. These disable the strudel.cc link.
44
+
45
+ ## Top mistakes
46
+
47
+ 1. **Octaves**: code `c4` is MIDI 60, but TuttiDAW's piano roll (like
48
+ Ableton Live) labels MIDI 60 as C3. Write code names; a request for "C3"
49
+ from a Live user may mean MIDI 60.
50
+ 2. **Arithmetic on controls**: `note("c e").add(12)` does nothing (warning);
51
+ write `note("c e").add(note(12))` or `n("0 2".add(7))`.
52
+ 3. **Multi-word scales** need colons inside quotes: `"C:harmonic:minor"`,
53
+ `"A:minor:pentatonic"`. `"C:harmonic minor"` is two steps.
54
+ 4. **Device calls inside callbacks** fail: `every(2, x => x.fx(...))` is an
55
+ error; a voice has one chain. Put `.inst/.fx/.midifx` on the voice.
56
+ 5. **Patterned device params** (`{cutoff: "<300 900>"}`) are not applied
57
+ yet; use Strudel controls (`.lpf("<300 900>")`) for movement.
58
+ 6. **One `.inst` per voice**; a second is an error. Use another voice.
59
+ 7. **Single vs double quotes**: double quotes are mini-notation; single
60
+ quotes are plain strings (`register('name', ...)`, `.scale('C minor')`).
61
+ 8. **No browser APIs**: no `fetch`, `import`, timers or DOM; code runs in a
62
+ deterministic sandbox (seeded `Math.random`, fixed `Date`).
63
+ 9. **Unknown sound names** fall back with a warning; check
64
+ `references/sounds.md` and `references/devices.md`. Noise is
65
+ `s("white")`, `s("pink")` or `s("brown")` (hard to soft).
66
+ 10. **Voice labels** become track names: label every voice
67
+ (`kick:`, `bass:`) instead of `$:` when the program goes to the studio.
68
+
69
+ ## Tools: two backends, one API
70
+
71
+ The same tools, with the same names and report shapes, run on two backends.
72
+ Use whichever this agent has; prefer the local one.
73
+
74
+ - **Local `tutticode`** (default; free, no account): the `tutticode` CLI
75
+ and MCP server (`npm i -g tutticode`, `tutticode mcp`) render in the
76
+ user's own browser with the tuttidaw.com/code engine and write files to
77
+ disk, up to 300 s. Its tool descriptions say "Runs locally". Without MCP,
78
+ call the CLI: `tutticode check prog.tc`, `tutticode render prog.tc -o
79
+ out.wav --seconds 12 --lufs -16 --json`, `tutticode open prog.tc`.
80
+ Program code goes only to the user's browser, never to TuttiDAW's servers.
81
+ - **Web**: TuttiDAW's MCP server (`https://tuttidaw.com/api/mcp`, OAuth) or
82
+ HTTP (`POST https://tuttidaw.com/api/code/check|render|compare`). Renders
83
+ on TuttiDAW's servers (signed in, costs Muse points, 16 bars / 60 s) and
84
+ returns a `listenUrl` instead of files. Only this backend compares with a
85
+ reference recording.
86
+
87
+ | tool | what it does |
88
+ | --- | --- |
89
+ | `code_check` | compile and plan, no audio: diagnostics, voices, mix warnings. Free, deterministic |
90
+ | `code_render` | render and measure: loudness, true peak, bands, groove, per-voice levels |
91
+ | `code_compare` | a render against goals (or a Muse `style`), or two renders (A/B) |
92
+ | `code_open` | (local) open the program in a visible TuttiCode tab for the user |
93
+ | `code_reference` | (local) search these references |
94
+
95
+ ## Workflow: write -> check -> render -> revise
96
+
97
+ 1. **Write** the smallest program that does the job; label each voice.
98
+ 2. **`code_check`** after every edit; fix every `error` diagnostic (line,
99
+ column and a `fix` hint), then the mix `warnings`. Never render to find
100
+ syntax errors. Without tools, compare every name with
101
+ `references/functions.md` and `references/devices.md`.
102
+ 3. **`code_render`** once the check is clean, then read the numbers
103
+ (`references/agent-loop.md`): loudness, clipping, silent bars, which
104
+ voice dominates. Change one thing at a time; `code_compare` tells you
105
+ whether it moved what you meant.
106
+ 4. **Hand over** the `editUrl` (local) or `listenUrl` (web) with the
107
+ files: it opens the program in TuttiCode, where **Open in TuttiDAW**
108
+ saves it as a project with one track per voice. Without tools, link
109
+ `https://tuttidaw.com/code#<payload>`, the payload being the UTF-8 code
110
+ in base64, URI-encoded (`encodeURIComponent(btoa(utf8))`, as strudel.cc's
111
+ long links).
112
+
113
+ Pattern Clips in an open TuttiDAW project are edited with the web MCP's
114
+ `read_pattern` / `write_pattern` (notes only; devices apply on /code and in
115
+ group programs). Sound for videos, apps and games: the
116
+ `tutticode-sound-for-media` skill.
117
+
118
+ ## References
119
+
120
+ Read only what the task needs:
121
+
122
+ - `references/agent-loop.md`: reading the code_check / code_render / code_compare reports, loudness targets, lengths and the `clip` error, on both backends.
123
+ - `references/getting-started.md`: Getting started. What TuttiCode is, how a program loops, and how to play your first line.
124
+ - `references/first-sounds.md`: First sounds. Drums with s(), pitches with note(), and the difference between them.
125
+ - `references/mini-notation.md`: Mini-notation. The rhythm language inside the quotes - sequences, rests, groups, alternation, polymeter, Euclidean rhythms and chance.
126
+ - `references/time-and-structure.md`: Time and structure. Functions that speed up, shift, reverse, repeat and combine patterns, and arrange them into sections.
127
+ - `references/harmony-and-scales.md`: Harmony and scales. Note names and octaves, scale degrees, transposition, chord symbols, voicings and arpeggios.
128
+ - `references/sounds.md`: Sounds. Drum kits and banks, synth waveforms, General MIDI instrument names, Ensemble sounds and your own samples.
129
+ - `references/effect-controls.md`: Effect controls. Filters, reverb, delay, distortion, panning, envelopes and synth controls - and moving them with signals.
130
+ - `references/sample-operations.md`: Sample operations. Play part of a sample, change its speed, cut it into slices, fit it to the tempo and choke it.
131
+ - `references/tuttidaw-extensions.md`: TuttiDAW extensions. Load any TuttiDAW instrument, MIDI effect or audio effect with presets and parameters; voices, groups and Open in TuttiDAW.
132
+ - `references/mixing.md`: Mixing: buses and master. Shared reverbs and delays on buses, sends from the voices, each voice's fader and pan, and the program's master chain - the same tracks Open in TuttiDAW makes.
133
+ - `references/javascript.md`: JavaScript in code. Variables, functions, loops and register - and the sandbox, determinism and limits that keep shared code safe.
134
+ - `references/muse.md`: Muse on /TuttiCode. Ask TuttiDAW's AI assistant to write, explain, fix or restyle your program, from text, a Strudel tune, a screenshot or a reference track.
135
+ - `references/for-agents.md`: TuttiCode for agents. Let Claude Code, Copilot, Codex or any MCP client write TuttiCode and render it to audio files in your own browser, with the tutticode CLI, MCP server and skills.
136
+ - `references/functions.md`: every function, method and signal, with signature, description and example (generated from the engine).
137
+ - `references/devices.md`: every instrument and effect for `.inst/.fx/.midifx`, with `references/devices/<id>.md` per device: param keys, ranges, units, presets (generated from the device catalogue).
138
+
139
+ Language: PATTERN LANGUAGE 1.2.0, engine 15.
140
+ Human guide: https://tuttidaw.com/code/learn; agents: https://tuttidaw.com/code/learn/for-agents
@@ -0,0 +1,103 @@
1
+ # The agent loop: check, render, compare, revise
2
+
3
+ You cannot hear. `code_check`, `code_render` and `code_compare` give you
4
+ what a producer hears, as numbers. Both backends (local `tutticode`, web
5
+ MCP / `/api/code`) take the same requests and return the same fields;
6
+ differences are marked *local* or *web*.
7
+
8
+ ## When to call which
9
+
10
+ | Situation | Call |
11
+ | --- | --- |
12
+ | After every edit | `code_check`. Fix every `error` before anything else |
13
+ | The check is clean and you need to know how it sounds | `code_render` (one loop is enough while sketching) |
14
+ | You have a target ("streaming loudness", "like house") | `code_compare` with `goals` or `goals.style` |
15
+ | You changed one thing: did it help? | `code_compare` with `renderId` (new) and `againstRenderId` (old) |
16
+ | *web*: `status: "queued"` / `"rendering"` | `code_render { renderId }` to wait |
17
+
18
+ ## Reading `code_check`
19
+
20
+ - `diagnostics[]`: `severity`, `code`, `line`/`col` (1-based), `snippet`, a
21
+ `fix` hint. `error` blocks rendering; `warning` means something was
22
+ ignored or approximated; `info` is context.
23
+ - `tempo.bpm` (`setcpm(n)` = n x 4 BPM in 4/4); `loop.bars` / `loop.seconds`:
24
+ the program loop, what one loop of a render plays.
25
+ - `voices[]`: per labelled voice: notes per bar, polyphony, pitch range
26
+ (MIDI, `c4` = 60), instrument and effects, gain, pan.
27
+ - `warnings[]`, read off the notes:
28
+
29
+ | Code | Means | Usual fix |
30
+ | --- | --- | --- |
31
+ | `mix/pitch-clash` | Two voices a semitone apart | Put both on the same chord or scale there |
32
+ | `mix/register-overlap` | Two pitched voices share a range | Move one an octave, or thin one |
33
+ | `mix/low-end-crowded` | Two voices below `c3` together | Keep one bass part |
34
+ | `density/very-dense` | Over 32 notes per bar in a voice | Fewer steps or `.slow()` |
35
+ | `density/silent-voice` | An unmuted voice plays nothing | Check the mini-notation and masks |
36
+ | `level/hot-voice` | A voice's gain above 1.2 | Turn it to 1 or less; lower the others |
37
+ | `level/clip-risk` | Voices hitting together sum above 3 | Lower the busiest voices to 0.5-0.8 |
38
+
39
+ ## Reading `code_render`
40
+
41
+ *local* returns `files` (`audio`, `stems`: paths written on disk),
42
+ `editUrl`, `window` (`bars`, `seconds`, `bpm`), `loudness` (`lufs`,
43
+ `truePeak` of the delivered file, `gainDb` applied for a `lufs` target),
44
+ `voices[]` (each voice's solo `lufs` and `truePeak`), `barTimes` /
45
+ `beatTimes` (seconds of each bar and beat: sync video cuts to them),
46
+ `check` and `analysis`. *web* returns `analysis`, a `listenUrl` (24 h) and
47
+ signed audio links.
48
+ *web* renders at most 16 bars and 60 s, and at most 320 track-seconds
49
+ (the tracks it plays x seconds; `check` reports them as
50
+ `stats.renderTracks`: one per audible voice, one per waveform of a
51
+ multi-waveform voice, four per Ensemble Set): a larger render is refused with
52
+ `CODE_RENDER_TOO_LARGE`, which says how many bars fit. Render fewer bars,
53
+ or mute (`_`) the voices you are not listening to.
54
+
55
+ `analysis` (both):
56
+
57
+ | Field | How to read it |
58
+ | --- | --- |
59
+ | `loudness.integratedLufs` | Overall loudness; halving every gain is about -6 LU |
60
+ | `loudness.truePeakDbtp`, `clipping` | Keep the peak at -1 dBTP or below; `clipping` must be false |
61
+ | `loudness.crestDb` | Peak minus RMS: under ~8 dB sounds squashed, over ~18 dB is peaky (a loudness target may not fit) |
62
+ | `bands.low/mid/high` | Energy below 250 Hz / 250 Hz-4 kHz / above 4 kHz; high under 0.03 sounds dull |
63
+ | `stereo.width`, `correlation` | Width 0.2-0.6 is typical; correlation below 0 is phase trouble |
64
+ | `groove.swing`, `timingErrorMs` | 0.5 straight, 0.67 triplet swing; code is sample-accurate |
65
+ | `silence`, `barLufs` | Leading/trailing silence, silent bars: a silent bar you did not plan is a bug |
66
+ | `voices[]` | Each voice's `lufs` (null = silent: a dead voice) and `share` of the mix |
67
+
68
+ ## Loudness and length (*local* `code_render` / `tutticode render`)
69
+
70
+ - Length: `seconds` (exact, cut with a 10 ms fade), `bars`, or `loops`
71
+ (whole loops ring out past their end). `tail` adds seconds after the
72
+ length for reverbs and delays and makes the file exactly length + tail;
73
+ `fadeIn` / `fadeOut` are linear, in seconds.
74
+ - `lufs` applies one static gain to that integrated loudness, the same on
75
+ the stems. When the true peak would pass `truePeak` (default -1 dBTP)
76
+ the render fails with code `clip` instead of limiting: ask for a lower
77
+ `lufs`, or make the program less peaky (lower its loudest voice). Under
78
+ 0.4 s there is no integrated loudness and `lufs` is ignored.
79
+ - Exit codes (CLI): 0 ok, 1 errors in the code or `clip`, 2 bridge or
80
+ browser problem (run `tutticode doctor`), 3 usage.
81
+
82
+ ## Targets
83
+
84
+ | Goal | lufs |
85
+ | --- | --- |
86
+ | Sketch for the user | -16..-12, true peak -1 dBTP or below |
87
+ | Web, social, streaming | -14 |
88
+ | Podcasts, video beds under speech | -16 (beds under a voice -20..-24) |
89
+ | Broadcast (EBU R128) | -23 |
90
+ | A style's finished master | `goals.style` (house -9..-7, lofi-hip-hop -14..-11, ambient -20..-14) |
91
+
92
+ `goals.style` takes a Muse style id (`house`, `techno`, `trap`,
93
+ `modern-pop`, `lofi-hip-hop`, `ambient`, `cinematic`, `synthwave`,
94
+ `jazz-swing` and others); a render without a master chain sits a few LU
95
+ under a style's mastered loudness, so match its spectrum first.
96
+
97
+ ## Comparing
98
+
99
+ `code_compare` returns `deltas[]` (`metric`, `current`, `target`,
100
+ `verdict`: `ok` / `low` / `high`) and `suggestions[]`, most important
101
+ first, written as edits to the code. *local* compares renders of the same
102
+ session and goals; reference recordings (`referenceUrl`,
103
+ `referenceAudio`) need the *web* backend.
@@ -0,0 +1,28 @@
1
+ # Align Delay
2
+
3
+ An audio effect (`.fx`), available.
4
+
5
+ ```js
6
+ note("c3 e3 g3 b3").fx("Align Delay:A/V Sync 40ms")
7
+ ```
8
+
9
+ Accepted names: `aligndelay`.
10
+
11
+ ## Parameters
12
+
13
+ | Key | Live label | Values |
14
+ |---|---|---|
15
+ | `delayMsL` | Left ms | 0 .. 100 ms |
16
+ | `delayMsR` | Right ms | 0 .. 100 ms |
17
+ | `samplesL` | Left samples | 0 .. 200 smp |
18
+ | `samplesR` | Right samples | 0 .. 200 smp |
19
+ | `metersL` | Left meter | 0 .. 100 m |
20
+ | `metersR` | Right meter | 0 .. 100 m |
21
+ | `feetL` | Left Feet | 0 .. 328.08 ft |
22
+ | `feetR` | Right Feet | 0 .. 328.08 ft |
23
+ | `celsius` | Celsius | -20 .. 60 °C |
24
+ | `fahrenheit` | Fahrenheit | -4 .. 140 °F |
25
+
26
+ ## Factory presets
27
+
28
+ A/V Sync 40ms · Distance Trim · Haas Widener · Sample Compensate
@@ -0,0 +1,25 @@
1
+ # Amp
2
+
3
+ An audio effect (`.fx`), available.
4
+
5
+ ```js
6
+ note("c3 e3 g3 b3").fx("Amp:Bass Roundup")
7
+ ```
8
+
9
+ Accepted names: `amp`.
10
+
11
+ ## Parameters
12
+
13
+ | Key | Live label | Values |
14
+ |---|---|---|
15
+ | `drive` | Gain | 0 .. 10 |
16
+ | `bass` | Bass | 0 .. 10 |
17
+ | `middle` | Middle | 0 .. 10 |
18
+ | `treble` | Treble | 0 .. 10 |
19
+ | `presence` | Presence | 0 .. 10 |
20
+ | `volume` | Volume | 0 .. 10 |
21
+ | `dryWetBalance` | Dry/Wet | 0 .. 1 % |
22
+
23
+ ## Factory presets
24
+
25
+ Bass Roundup · Blues Drive · Boost and Crunch · Clean · Discrete · Heavy · Key Crunch · Marsh Mellows · Metalic · Rhythm Funk · Rock all 10 · Screamer