tutticode 0.2.2 → 0.3.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 (27) hide show
  1. package/README.md +11 -0
  2. package/README.zh-CN.md +10 -0
  3. package/dist/skills/tutticode/SKILL.md +11 -10
  4. package/dist/skills/tutticode/references/agent-loop.md +15 -0
  5. package/dist/skills/tutticode/references/automation.md +168 -0
  6. package/dist/skills/tutticode/references/devices/compressor.md +2 -0
  7. package/dist/skills/tutticode/references/devices/filter.md +2 -0
  8. package/dist/skills/tutticode/references/devices/gate.md +2 -0
  9. package/dist/skills/tutticode/references/devices/glue.md +2 -0
  10. package/dist/skills/tutticode/references/devices/multibanddynamics.md +2 -0
  11. package/dist/skills/tutticode/references/devices.md +2 -2
  12. package/dist/skills/tutticode/references/effect-controls.md +8 -0
  13. package/dist/skills/tutticode/references/first-sounds.md +2 -0
  14. package/dist/skills/tutticode/references/for-agents.md +26 -0
  15. package/dist/skills/tutticode/references/functions.md +67 -5
  16. package/dist/skills/tutticode/references/harmony-and-scales.md +3 -0
  17. package/dist/skills/tutticode/references/language-reference.md +362 -0
  18. package/dist/skills/tutticode/references/melodies-with-do-re-mi.md +41 -5
  19. package/dist/skills/tutticode/references/mixing-groups.md +7 -4
  20. package/dist/skills/tutticode/references/mixing.md +48 -6
  21. package/dist/skills/tutticode/references/muse.md +7 -0
  22. package/dist/skills/tutticode/references/sounds.md +26 -0
  23. package/dist/skills/tutticode/references/tuttidaw-extensions.md +13 -6
  24. package/dist/skills/tutticode-sound-for-media/SKILL.md +11 -1
  25. package/dist/skills/tutticode-sound-for-media/references/music-recipes.md +30 -6
  26. package/dist/tutticode.cjs +2 -2
  27. package/package.json +1 -1
@@ -46,14 +46,16 @@ Trailers, reveals, suspense, game menus: a low drone, slow minor strings and a t
46
46
 
47
47
  ```js
48
48
  setcpm(15) // 60 BPM
49
- drone: note("c2").s("sawtooth").lpf(300).attack(1).release(1).gain(0.5)
50
- strings: chord("<Cm Ab>").voicing().s("supersaw").attack(2).release(2).lpf(1200).gain(0.3).room(0.7)
51
- pulse: note("c6*8").s("sine").decay(0.1).sustain(0).gain(0.4)
49
+ bus("verb").fx("Reverb", {dryWetBalance: 1, decayTime: "4s"}) // one room for every voice
50
+ master.fx("Limiter", {gainDb: 3, ceiling: -3})
51
+ drone: note("c2").s("sawtooth").lpf(300).attack(1).release(1).mix({vol: -6}).send("verb", -18)
52
+ strings: chord("<Cm Ab>").voicing().s("supersaw").attack(2).release(2).lpf(1200).mix({vol: -10}).send("verb", -4)
53
+ pulse: note("c6*8").s("sine").decay(0.1).sustain(0).mix({vol: -8}).send("verb", -14)
52
54
  ```
53
55
 
54
56
  Render: `tutticode render cinematic-tension.tc -o cinematic-tension.wav --loops 3 --tail 3 --fade-out 4 --lufs -18`, or `code_render` with `{"loops":3,"tail":3,"fadeOut":4,"lufs":-18}`.
55
57
 
56
- Vary: Rising tension: double the pulse (c6*16) for the last loop, or render the riser over the end.
58
+ Vary: Rising tension: double the pulse (c6*16) for the last loop, or render the riser over the end. Bigger space: raise the sends, not the voices.
57
59
 
58
60
  ## Ambient bed (`ambient-bed`)
59
61
 
@@ -61,8 +63,11 @@ Meditation, wellness, slow product shots: a wide pad and sparse echoing bells at
61
63
 
62
64
  ```js
63
65
  setcpm(12) // 48 BPM
64
- pad: chord("<Dm F>").voicing().s("supersaw").attack(2).release(3).lpf(1000).gain(0.3).room(0.8).size(0.9)
65
- bells: n("0 2 4 7 4 2").scale("D5:minor").s("sine").decay(0.8).sustain(0).delay(0.4).gain(0.4)
66
+ bus("verb").fx("Reverb", {dryWetBalance: 1, decayTime: "6s"})
67
+ bus("echo").fx("Delay", {feedback: 0.4}).mix({vol: -6})
68
+ master.fx("Limiter", {gainDb: 3, ceiling: -3})
69
+ pad: chord("<Dm F>").voicing().s("supersaw").attack(2).release(3).lpf(1000).mix({vol: -10}).send("verb", -3)
70
+ bells: n("0 2 4 7 4 2").scale("D5:minor").s("sine").decay(0.8).sustain(0).mix({vol: -8}).send("echo", -6).send("verb", -12)
66
71
  ```
67
72
 
68
73
  Render: `tutticode render ambient-bed.tc -o ambient-bed.wav --loops 3 --tail 4 --fade-in 3 --fade-out 5 --lufs -20`, or `code_render` with `{"loops":3,"tail":4,"fadeIn":3,"fadeOut":5,"lufs":-20}`.
@@ -84,3 +89,22 @@ master.fx("Limiter", {gainDb: 3, ceiling: -3})
84
89
  Render: `tutticode render chiptune-loop.tc -o chiptune-loop.wav --loops 2 --tail 0 --lufs -19`, or `code_render` with `{"loops":2,"tail":0,"lufs":-19}`.
85
90
 
86
91
  Vary: A game loop file has no fades and `tail: 0`: exactly N loops, so it repeats in time. A boss level: setcpm(45) and a minor scale.
92
+
93
+ ## Kick-ducked bed (`kick-ducked-bed`)
94
+
95
+ Fitness, sport, fashion and dance promos: a 120 BPM house pulse whose pad and bass duck under every kick (sidechain), so the kick punches through.
96
+
97
+ ```js
98
+ setcpm(30) // 120 BPM
99
+ kick: s("bd*4").bank("tr909").gain(0.8)
100
+ hats: s("~ hh ~ hh, hh*8").bank("tr909").gain(0.3)
101
+ pad: chord("<Am F C G>").voicing().s("supersaw").release(0.3).lpf(2500).gain(0.3)
102
+ .fx("Compressor", {threshold: -30, ratio: 8, attack: 1, release: 120, sidechain: "kick", sidechainFilter: "150Hz"})
103
+ bass: note("<a1 f1 c2 g1>").ply(8).s("sawtooth").lpf(500).gain(0.5)
104
+ .fx("Compressor", {threshold: -30, ratio: 6, attack: 1, release: 100, sidechain: "kick"})
105
+ master.fx("Limiter", {gainDb: 3, ceiling: -3})
106
+ ```
107
+
108
+ Render: `tutticode render kick-ducked-bed.tc -o kick-ducked-bed.wav --loops 4 --fade-out 2 --lufs -16`, or `code_render` with `{"loops":4,"fadeOut":2,"lufs":-16}`.
109
+
110
+ Vary: More or less pump: release (shorter = tighter) and ratio. Duck the whole bed at once: put pad and bass in group("bed") and key one Compressor on the group. Under speech: drop the hats and render at -20 LUFS.
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- /* tutticode v0.2.2 | https://tuttidaw.com */
2
+ /* tutticode v0.3.0 | https://tuttidaw.com */
3
3
  "use strict";
4
4
  var __create = Object.create;
5
5
  var __defProp = Object.defineProperty;
@@ -4903,7 +4903,7 @@ var import_node_path2 = require("node:path");
4903
4903
  var import_node_fs = require("node:fs");
4904
4904
  var import_node_os = require("node:os");
4905
4905
  var import_node_path = require("node:path");
4906
- var VERSION2 = true ? "0.2.2" : readPackageVersion();
4906
+ var VERSION2 = true ? "0.3.0" : readPackageVersion();
4907
4907
  function envBrowserArgs() {
4908
4908
  const args = process.env.TUTTICODE_BROWSER_ARGS?.split(" ").filter(Boolean);
4909
4909
  return args?.length ? args : void 0;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tutticode",
3
- "version": "0.2.2",
3
+ "version": "0.3.0",
4
4
  "private": false,
5
5
  "description": "Turn TuttiCode (tuttidaw.com/code pattern code) into audio files from any agent: a CLI and an MCP server that render in your own browser with the TuttiDAW engine.",
6
6
  "license": "MIT",