takomusic 1.2.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 (335) hide show
  1. package/LICENSE +661 -0
  2. package/README.md +230 -0
  3. package/dist/__tests__/checker.test.d.ts +2 -0
  4. package/dist/__tests__/checker.test.d.ts.map +1 -0
  5. package/dist/__tests__/checker.test.js +316 -0
  6. package/dist/__tests__/checker.test.js.map +1 -0
  7. package/dist/__tests__/compiler.test.d.ts +2 -0
  8. package/dist/__tests__/compiler.test.d.ts.map +1 -0
  9. package/dist/__tests__/compiler.test.js +260 -0
  10. package/dist/__tests__/compiler.test.js.map +1 -0
  11. package/dist/__tests__/generators.test.d.ts +2 -0
  12. package/dist/__tests__/generators.test.d.ts.map +1 -0
  13. package/dist/__tests__/generators.test.js +283 -0
  14. package/dist/__tests__/generators.test.js.map +1 -0
  15. package/dist/__tests__/interpreter.test.d.ts +2 -0
  16. package/dist/__tests__/interpreter.test.d.ts.map +1 -0
  17. package/dist/__tests__/interpreter.test.js +298 -0
  18. package/dist/__tests__/interpreter.test.js.map +1 -0
  19. package/dist/__tests__/lexer.test.d.ts +2 -0
  20. package/dist/__tests__/lexer.test.d.ts.map +1 -0
  21. package/dist/__tests__/lexer.test.js +89 -0
  22. package/dist/__tests__/lexer.test.js.map +1 -0
  23. package/dist/__tests__/parser.test.d.ts +2 -0
  24. package/dist/__tests__/parser.test.d.ts.map +1 -0
  25. package/dist/__tests__/parser.test.js +116 -0
  26. package/dist/__tests__/parser.test.js.map +1 -0
  27. package/dist/checker/checker.d.ts +37 -0
  28. package/dist/checker/checker.d.ts.map +1 -0
  29. package/dist/checker/checker.js +428 -0
  30. package/dist/checker/checker.js.map +1 -0
  31. package/dist/checker/index.d.ts +3 -0
  32. package/dist/checker/index.d.ts.map +1 -0
  33. package/dist/checker/index.js +2 -0
  34. package/dist/checker/index.js.map +1 -0
  35. package/dist/cli/commands/build.d.ts +2 -0
  36. package/dist/cli/commands/build.d.ts.map +1 -0
  37. package/dist/cli/commands/build.js +173 -0
  38. package/dist/cli/commands/build.js.map +1 -0
  39. package/dist/cli/commands/check.d.ts +2 -0
  40. package/dist/cli/commands/check.d.ts.map +1 -0
  41. package/dist/cli/commands/check.js +79 -0
  42. package/dist/cli/commands/check.js.map +1 -0
  43. package/dist/cli/commands/doctor.d.ts +2 -0
  44. package/dist/cli/commands/doctor.d.ts.map +1 -0
  45. package/dist/cli/commands/doctor.js +187 -0
  46. package/dist/cli/commands/doctor.js.map +1 -0
  47. package/dist/cli/commands/fmt.d.ts +2 -0
  48. package/dist/cli/commands/fmt.d.ts.map +1 -0
  49. package/dist/cli/commands/fmt.js +73 -0
  50. package/dist/cli/commands/fmt.js.map +1 -0
  51. package/dist/cli/commands/import.d.ts +2 -0
  52. package/dist/cli/commands/import.d.ts.map +1 -0
  53. package/dist/cli/commands/import.js +99 -0
  54. package/dist/cli/commands/import.js.map +1 -0
  55. package/dist/cli/commands/init.d.ts +2 -0
  56. package/dist/cli/commands/init.d.ts.map +1 -0
  57. package/dist/cli/commands/init.js +514 -0
  58. package/dist/cli/commands/init.js.map +1 -0
  59. package/dist/cli/commands/play.d.ts +2 -0
  60. package/dist/cli/commands/play.d.ts.map +1 -0
  61. package/dist/cli/commands/play.js +216 -0
  62. package/dist/cli/commands/play.js.map +1 -0
  63. package/dist/cli/commands/record.d.ts +2 -0
  64. package/dist/cli/commands/record.d.ts.map +1 -0
  65. package/dist/cli/commands/record.js +393 -0
  66. package/dist/cli/commands/record.js.map +1 -0
  67. package/dist/cli/commands/render.d.ts +2 -0
  68. package/dist/cli/commands/render.d.ts.map +1 -0
  69. package/dist/cli/commands/render.js +278 -0
  70. package/dist/cli/commands/render.js.map +1 -0
  71. package/dist/cli/index.d.ts +3 -0
  72. package/dist/cli/index.d.ts.map +1 -0
  73. package/dist/cli/index.js +93 -0
  74. package/dist/cli/index.js.map +1 -0
  75. package/dist/compiler/compiler.d.ts +12 -0
  76. package/dist/compiler/compiler.d.ts.map +1 -0
  77. package/dist/compiler/compiler.js +146 -0
  78. package/dist/compiler/compiler.js.map +1 -0
  79. package/dist/compiler/index.d.ts +2 -0
  80. package/dist/compiler/index.d.ts.map +1 -0
  81. package/dist/compiler/index.js +2 -0
  82. package/dist/compiler/index.js.map +1 -0
  83. package/dist/config/config.d.ts +43 -0
  84. package/dist/config/config.d.ts.map +1 -0
  85. package/dist/config/config.js +200 -0
  86. package/dist/config/config.js.map +1 -0
  87. package/dist/config/index.d.ts +2 -0
  88. package/dist/config/index.d.ts.map +1 -0
  89. package/dist/config/index.js +2 -0
  90. package/dist/config/index.js.map +1 -0
  91. package/dist/errors.d.ts +49 -0
  92. package/dist/errors.d.ts.map +1 -0
  93. package/dist/errors.js +168 -0
  94. package/dist/errors.js.map +1 -0
  95. package/dist/formatter/formatter.d.ts +13 -0
  96. package/dist/formatter/formatter.d.ts.map +1 -0
  97. package/dist/formatter/formatter.js +242 -0
  98. package/dist/formatter/formatter.js.map +1 -0
  99. package/dist/formatter/index.d.ts +2 -0
  100. package/dist/formatter/index.d.ts.map +1 -0
  101. package/dist/formatter/index.js +2 -0
  102. package/dist/formatter/index.js.map +1 -0
  103. package/dist/generators/index.d.ts +5 -0
  104. package/dist/generators/index.d.ts.map +1 -0
  105. package/dist/generators/index.js +5 -0
  106. package/dist/generators/index.js.map +1 -0
  107. package/dist/generators/midi.d.ts +3 -0
  108. package/dist/generators/midi.d.ts.map +1 -0
  109. package/dist/generators/midi.js +360 -0
  110. package/dist/generators/midi.js.map +1 -0
  111. package/dist/generators/musicxml.d.ts +3 -0
  112. package/dist/generators/musicxml.d.ts.map +1 -0
  113. package/dist/generators/musicxml.js +332 -0
  114. package/dist/generators/musicxml.js.map +1 -0
  115. package/dist/generators/tempo-midi.d.ts +3 -0
  116. package/dist/generators/tempo-midi.d.ts.map +1 -0
  117. package/dist/generators/tempo-midi.js +123 -0
  118. package/dist/generators/tempo-midi.js.map +1 -0
  119. package/dist/generators/vsqx.d.ts +3 -0
  120. package/dist/generators/vsqx.d.ts.map +1 -0
  121. package/dist/generators/vsqx.js +354 -0
  122. package/dist/generators/vsqx.js.map +1 -0
  123. package/dist/importers/index.d.ts +2 -0
  124. package/dist/importers/index.d.ts.map +1 -0
  125. package/dist/importers/index.js +3 -0
  126. package/dist/importers/index.js.map +1 -0
  127. package/dist/importers/musicxml.d.ts +4 -0
  128. package/dist/importers/musicxml.d.ts.map +1 -0
  129. package/dist/importers/musicxml.js +392 -0
  130. package/dist/importers/musicxml.js.map +1 -0
  131. package/dist/index.d.ts +11 -0
  132. package/dist/index.d.ts.map +1 -0
  133. package/dist/index.js +12 -0
  134. package/dist/index.js.map +1 -0
  135. package/dist/interpreter/builtins/algorithmic.d.ts +12 -0
  136. package/dist/interpreter/builtins/algorithmic.d.ts.map +1 -0
  137. package/dist/interpreter/builtins/algorithmic.js +244 -0
  138. package/dist/interpreter/builtins/algorithmic.js.map +1 -0
  139. package/dist/interpreter/builtins/audio.d.ts +10 -0
  140. package/dist/interpreter/builtins/audio.d.ts.map +1 -0
  141. package/dist/interpreter/builtins/audio.js +169 -0
  142. package/dist/interpreter/builtins/audio.js.map +1 -0
  143. package/dist/interpreter/builtins/core.d.ts +15 -0
  144. package/dist/interpreter/builtins/core.d.ts.map +1 -0
  145. package/dist/interpreter/builtins/core.js +265 -0
  146. package/dist/interpreter/builtins/core.js.map +1 -0
  147. package/dist/interpreter/builtins/dynamics.d.ts +8 -0
  148. package/dist/interpreter/builtins/dynamics.d.ts.map +1 -0
  149. package/dist/interpreter/builtins/dynamics.js +86 -0
  150. package/dist/interpreter/builtins/dynamics.js.map +1 -0
  151. package/dist/interpreter/builtins/effects.d.ts +16 -0
  152. package/dist/interpreter/builtins/effects.d.ts.map +1 -0
  153. package/dist/interpreter/builtins/effects.js +220 -0
  154. package/dist/interpreter/builtins/effects.js.map +1 -0
  155. package/dist/interpreter/builtins/index.d.ts +16 -0
  156. package/dist/interpreter/builtins/index.d.ts.map +1 -0
  157. package/dist/interpreter/builtins/index.js +17 -0
  158. package/dist/interpreter/builtins/index.js.map +1 -0
  159. package/dist/interpreter/builtins/layout.d.ts +12 -0
  160. package/dist/interpreter/builtins/layout.d.ts.map +1 -0
  161. package/dist/interpreter/builtins/layout.js +175 -0
  162. package/dist/interpreter/builtins/layout.js.map +1 -0
  163. package/dist/interpreter/builtins/live.d.ts +11 -0
  164. package/dist/interpreter/builtins/live.d.ts.map +1 -0
  165. package/dist/interpreter/builtins/live.js +125 -0
  166. package/dist/interpreter/builtins/live.js.map +1 -0
  167. package/dist/interpreter/builtins/midi.d.ts +16 -0
  168. package/dist/interpreter/builtins/midi.d.ts.map +1 -0
  169. package/dist/interpreter/builtins/midi.js +320 -0
  170. package/dist/interpreter/builtins/midi.js.map +1 -0
  171. package/dist/interpreter/builtins/mixing.d.ts +6 -0
  172. package/dist/interpreter/builtins/mixing.d.ts.map +1 -0
  173. package/dist/interpreter/builtins/mixing.js +62 -0
  174. package/dist/interpreter/builtins/mixing.js.map +1 -0
  175. package/dist/interpreter/builtins/notation.d.ts +24 -0
  176. package/dist/interpreter/builtins/notation.d.ts.map +1 -0
  177. package/dist/interpreter/builtins/notation.js +251 -0
  178. package/dist/interpreter/builtins/notation.js.map +1 -0
  179. package/dist/interpreter/builtins/ornaments.d.ts +8 -0
  180. package/dist/interpreter/builtins/ornaments.d.ts.map +1 -0
  181. package/dist/interpreter/builtins/ornaments.js +155 -0
  182. package/dist/interpreter/builtins/ornaments.js.map +1 -0
  183. package/dist/interpreter/builtins/techniques.d.ts +11 -0
  184. package/dist/interpreter/builtins/techniques.d.ts.map +1 -0
  185. package/dist/interpreter/builtins/techniques.js +234 -0
  186. package/dist/interpreter/builtins/techniques.js.map +1 -0
  187. package/dist/interpreter/builtins/tuning.d.ts +7 -0
  188. package/dist/interpreter/builtins/tuning.d.ts.map +1 -0
  189. package/dist/interpreter/builtins/tuning.js +52 -0
  190. package/dist/interpreter/builtins/tuning.js.map +1 -0
  191. package/dist/interpreter/builtins/types.d.ts +27 -0
  192. package/dist/interpreter/builtins/types.d.ts.map +1 -0
  193. package/dist/interpreter/builtins/types.js +3 -0
  194. package/dist/interpreter/builtins/types.js.map +1 -0
  195. package/dist/interpreter/builtins/vocaloid.d.ts +10 -0
  196. package/dist/interpreter/builtins/vocaloid.d.ts.map +1 -0
  197. package/dist/interpreter/builtins/vocaloid.js +165 -0
  198. package/dist/interpreter/builtins/vocaloid.js.map +1 -0
  199. package/dist/interpreter/index.d.ts +4 -0
  200. package/dist/interpreter/index.d.ts.map +1 -0
  201. package/dist/interpreter/index.js +4 -0
  202. package/dist/interpreter/index.js.map +1 -0
  203. package/dist/interpreter/interpreter.d.ts +305 -0
  204. package/dist/interpreter/interpreter.d.ts.map +1 -0
  205. package/dist/interpreter/interpreter.js +8463 -0
  206. package/dist/interpreter/interpreter.js.map +1 -0
  207. package/dist/interpreter/runtime.d.ts +67 -0
  208. package/dist/interpreter/runtime.d.ts.map +1 -0
  209. package/dist/interpreter/runtime.js +88 -0
  210. package/dist/interpreter/runtime.js.map +1 -0
  211. package/dist/interpreter/scope.d.ts +21 -0
  212. package/dist/interpreter/scope.d.ts.map +1 -0
  213. package/dist/interpreter/scope.js +60 -0
  214. package/dist/interpreter/scope.js.map +1 -0
  215. package/dist/interpreter/trackState.d.ts +205 -0
  216. package/dist/interpreter/trackState.d.ts.map +1 -0
  217. package/dist/interpreter/trackState.js +12 -0
  218. package/dist/interpreter/trackState.js.map +1 -0
  219. package/dist/lexer/index.d.ts +2 -0
  220. package/dist/lexer/index.d.ts.map +1 -0
  221. package/dist/lexer/index.js +2 -0
  222. package/dist/lexer/index.js.map +1 -0
  223. package/dist/lexer/lexer.d.ts +30 -0
  224. package/dist/lexer/lexer.d.ts.map +1 -0
  225. package/dist/lexer/lexer.js +385 -0
  226. package/dist/lexer/lexer.js.map +1 -0
  227. package/dist/parser/index.d.ts +2 -0
  228. package/dist/parser/index.d.ts.map +1 -0
  229. package/dist/parser/index.js +2 -0
  230. package/dist/parser/index.js.map +1 -0
  231. package/dist/parser/parser.d.ts +55 -0
  232. package/dist/parser/parser.d.ts.map +1 -0
  233. package/dist/parser/parser.js +896 -0
  234. package/dist/parser/parser.js.map +1 -0
  235. package/dist/types/ast.d.ts +220 -0
  236. package/dist/types/ast.d.ts.map +1 -0
  237. package/dist/types/ast.js +3 -0
  238. package/dist/types/ast.js.map +1 -0
  239. package/dist/types/index.d.ts +4 -0
  240. package/dist/types/index.d.ts.map +1 -0
  241. package/dist/types/index.js +4 -0
  242. package/dist/types/index.js.map +1 -0
  243. package/dist/types/ir/advanced.d.ts +491 -0
  244. package/dist/types/ir/advanced.d.ts.map +1 -0
  245. package/dist/types/ir/advanced.js +3 -0
  246. package/dist/types/ir/advanced.js.map +1 -0
  247. package/dist/types/ir/algorithmic.d.ts +48 -0
  248. package/dist/types/ir/algorithmic.d.ts.map +1 -0
  249. package/dist/types/ir/algorithmic.js +3 -0
  250. package/dist/types/ir/algorithmic.js.map +1 -0
  251. package/dist/types/ir/analysis.d.ts +34 -0
  252. package/dist/types/ir/analysis.d.ts.map +1 -0
  253. package/dist/types/ir/analysis.js +3 -0
  254. package/dist/types/ir/analysis.js.map +1 -0
  255. package/dist/types/ir/audio.d.ts +249 -0
  256. package/dist/types/ir/audio.d.ts.map +1 -0
  257. package/dist/types/ir/audio.js +3 -0
  258. package/dist/types/ir/audio.js.map +1 -0
  259. package/dist/types/ir/automation.d.ts +46 -0
  260. package/dist/types/ir/automation.d.ts.map +1 -0
  261. package/dist/types/ir/automation.js +3 -0
  262. package/dist/types/ir/automation.js.map +1 -0
  263. package/dist/types/ir/collaboration.d.ts +20 -0
  264. package/dist/types/ir/collaboration.d.ts.map +1 -0
  265. package/dist/types/ir/collaboration.js +3 -0
  266. package/dist/types/ir/collaboration.js.map +1 -0
  267. package/dist/types/ir/core.d.ts +153 -0
  268. package/dist/types/ir/core.d.ts.map +1 -0
  269. package/dist/types/ir/core.js +3 -0
  270. package/dist/types/ir/core.js.map +1 -0
  271. package/dist/types/ir/effects.d.ts +169 -0
  272. package/dist/types/ir/effects.d.ts.map +1 -0
  273. package/dist/types/ir/effects.js +3 -0
  274. package/dist/types/ir/effects.js.map +1 -0
  275. package/dist/types/ir/extended.d.ts +104 -0
  276. package/dist/types/ir/extended.d.ts.map +1 -0
  277. package/dist/types/ir/extended.js +3 -0
  278. package/dist/types/ir/extended.js.map +1 -0
  279. package/dist/types/ir/index.d.ts +16 -0
  280. package/dist/types/ir/index.d.ts.map +1 -0
  281. package/dist/types/ir/index.js +17 -0
  282. package/dist/types/ir/index.js.map +1 -0
  283. package/dist/types/ir/mastering.d.ts +86 -0
  284. package/dist/types/ir/mastering.d.ts.map +1 -0
  285. package/dist/types/ir/mastering.js +3 -0
  286. package/dist/types/ir/mastering.js.map +1 -0
  287. package/dist/types/ir/midi.d.ts +79 -0
  288. package/dist/types/ir/midi.d.ts.map +1 -0
  289. package/dist/types/ir/midi.js +3 -0
  290. package/dist/types/ir/midi.js.map +1 -0
  291. package/dist/types/ir/notation.d.ts +963 -0
  292. package/dist/types/ir/notation.d.ts.map +1 -0
  293. package/dist/types/ir/notation.js +3 -0
  294. package/dist/types/ir/notation.js.map +1 -0
  295. package/dist/types/ir/recording.d.ts +48 -0
  296. package/dist/types/ir/recording.d.ts.map +1 -0
  297. package/dist/types/ir/recording.js +3 -0
  298. package/dist/types/ir/recording.js.map +1 -0
  299. package/dist/types/ir/sampling.d.ts +59 -0
  300. package/dist/types/ir/sampling.d.ts.map +1 -0
  301. package/dist/types/ir/sampling.js +3 -0
  302. package/dist/types/ir/sampling.js.map +1 -0
  303. package/dist/types/ir/sequencing.d.ts +118 -0
  304. package/dist/types/ir/sequencing.d.ts.map +1 -0
  305. package/dist/types/ir/sequencing.js +3 -0
  306. package/dist/types/ir/sequencing.js.map +1 -0
  307. package/dist/types/ir/sync.d.ts +39 -0
  308. package/dist/types/ir/sync.d.ts.map +1 -0
  309. package/dist/types/ir/sync.js +3 -0
  310. package/dist/types/ir/sync.js.map +1 -0
  311. package/dist/types/ir.d.ts +2 -0
  312. package/dist/types/ir.d.ts.map +1 -0
  313. package/dist/types/ir.js +3 -0
  314. package/dist/types/ir.js.map +1 -0
  315. package/dist/types/token.d.ts +72 -0
  316. package/dist/types/token.d.ts.map +1 -0
  317. package/dist/types/token.js +90 -0
  318. package/dist/types/token.js.map +1 -0
  319. package/dist/utils/stdlib.d.ts +18 -0
  320. package/dist/utils/stdlib.d.ts.map +1 -0
  321. package/dist/utils/stdlib.js +51 -0
  322. package/dist/utils/stdlib.js.map +1 -0
  323. package/lib/articulation.mf +46 -0
  324. package/lib/composition.mf +299 -0
  325. package/lib/curves.mf +183 -0
  326. package/lib/dynamics.mf +141 -0
  327. package/lib/expression.mf +221 -0
  328. package/lib/genres.mf +348 -0
  329. package/lib/notation.mf +224 -0
  330. package/lib/ornaments.mf +98 -0
  331. package/lib/patterns.mf +170 -0
  332. package/lib/rhythm.mf +269 -0
  333. package/lib/theory.mf +257 -0
  334. package/lib/utils.mf +140 -0
  335. package/package.json +49 -0
@@ -0,0 +1,320 @@
1
+ // MIDI builtin functions: cc, expression, modulation, pan, volume, sustain, pitchBend, aftertouch, nrpn, sysex
2
+ import { makeNull, makeInt, toNumber } from '../runtime.js';
3
+ import { MFError, createError } from '../../errors.js';
4
+ // Using 'any' for 'this' to avoid circular dependency and private member issues
5
+ export function builtinCC(args, position) {
6
+ this.checkTrackPhase(position);
7
+ const track = this.currentTrack;
8
+ if (track.kind !== 'midi') {
9
+ throw new MFError('TYPE', 'cc() only valid in MIDI tracks', position, this.filePath);
10
+ }
11
+ const controller = this.evaluate(args[0]);
12
+ const value = this.evaluate(args[1]);
13
+ if (controller.type !== 'int') {
14
+ throw new MFError('TYPE', 'cc() controller must be int', position, this.filePath);
15
+ }
16
+ if (value.type !== 'int') {
17
+ throw new MFError('TYPE', 'cc() value must be int', position, this.filePath);
18
+ }
19
+ if (controller.value < 0 || controller.value > 127) {
20
+ throw createError('E120', `CC controller ${controller.value} out of range 0..127`, position, this.filePath);
21
+ }
22
+ if (value.value < 0 || value.value > 127) {
23
+ throw createError('E121', `CC value ${value.value} out of range 0..127`, position, this.filePath);
24
+ }
25
+ const event = {
26
+ type: 'cc',
27
+ tick: track.cursor,
28
+ controller: controller.value,
29
+ value: value.value,
30
+ };
31
+ track.events.push(event);
32
+ return makeNull();
33
+ }
34
+ export function builtinExpression(args, position) {
35
+ this.checkTrackPhase(position);
36
+ const track = this.currentTrack;
37
+ if (track.kind !== 'midi') {
38
+ throw new MFError('TYPE', 'expression() only valid in MIDI tracks', position, this.filePath);
39
+ }
40
+ const value = this.evaluate(args[0]);
41
+ if (value.type !== 'int') {
42
+ throw new MFError('TYPE', 'expression() value must be int', position, this.filePath);
43
+ }
44
+ if (value.value < 0 || value.value > 127) {
45
+ throw createError('E121', `expression value ${value.value} out of range 0..127`, position, this.filePath);
46
+ }
47
+ const event = {
48
+ type: 'cc',
49
+ tick: track.cursor,
50
+ controller: 11, // CC11 = Expression
51
+ value: value.value,
52
+ };
53
+ track.events.push(event);
54
+ return makeNull();
55
+ }
56
+ export function builtinModulation(args, position) {
57
+ this.checkTrackPhase(position);
58
+ const track = this.currentTrack;
59
+ if (track.kind !== 'midi') {
60
+ throw new MFError('TYPE', 'modulation() only valid in MIDI tracks', position, this.filePath);
61
+ }
62
+ const value = this.evaluate(args[0]);
63
+ if (value.type !== 'int') {
64
+ throw new MFError('TYPE', 'modulation() value must be int', position, this.filePath);
65
+ }
66
+ if (value.value < 0 || value.value > 127) {
67
+ throw createError('E121', `modulation value ${value.value} out of range 0..127`, position, this.filePath);
68
+ }
69
+ const event = {
70
+ type: 'cc',
71
+ tick: track.cursor,
72
+ controller: 1, // CC1 = Modulation
73
+ value: value.value,
74
+ };
75
+ track.events.push(event);
76
+ return makeNull();
77
+ }
78
+ export function builtinPan(args, position) {
79
+ this.checkTrackPhase(position);
80
+ const track = this.currentTrack;
81
+ if (track.kind !== 'midi') {
82
+ throw new MFError('TYPE', 'pan() only valid in MIDI tracks', position, this.filePath);
83
+ }
84
+ const value = this.evaluate(args[0]);
85
+ if (value.type !== 'int') {
86
+ throw new MFError('TYPE', 'pan() value must be int', position, this.filePath);
87
+ }
88
+ if (value.value < 0 || value.value > 127) {
89
+ throw createError('E121', `pan value ${value.value} out of range 0..127 (64=center)`, position, this.filePath);
90
+ }
91
+ const event = {
92
+ type: 'cc',
93
+ tick: track.cursor,
94
+ controller: 10, // CC10 = Pan
95
+ value: value.value,
96
+ };
97
+ track.events.push(event);
98
+ return makeNull();
99
+ }
100
+ export function builtinVolume(args, position) {
101
+ this.checkTrackPhase(position);
102
+ const track = this.currentTrack;
103
+ if (track.kind !== 'midi') {
104
+ throw new MFError('TYPE', 'volume() only valid in MIDI tracks', position, this.filePath);
105
+ }
106
+ const value = this.evaluate(args[0]);
107
+ if (value.type !== 'int') {
108
+ throw new MFError('TYPE', 'volume() value must be int', position, this.filePath);
109
+ }
110
+ if (value.value < 0 || value.value > 127) {
111
+ throw createError('E121', `volume value ${value.value} out of range 0..127`, position, this.filePath);
112
+ }
113
+ const event = {
114
+ type: 'cc',
115
+ tick: track.cursor,
116
+ controller: 7, // CC7 = Volume
117
+ value: value.value,
118
+ };
119
+ track.events.push(event);
120
+ return makeNull();
121
+ }
122
+ export function builtinSustain(args, position) {
123
+ this.checkTrackPhase(position);
124
+ const track = this.currentTrack;
125
+ if (track.kind !== 'midi') {
126
+ throw new MFError('TYPE', 'sustain() only valid in MIDI tracks', position, this.filePath);
127
+ }
128
+ const value = this.evaluate(args[0]);
129
+ if (value.type !== 'bool') {
130
+ throw new MFError('TYPE', 'sustain() expects bool (true/false)', position, this.filePath);
131
+ }
132
+ const event = {
133
+ type: 'cc',
134
+ tick: track.cursor,
135
+ controller: 64, // CC64 = Sustain Pedal
136
+ value: value.value ? 127 : 0,
137
+ };
138
+ track.events.push(event);
139
+ return makeNull();
140
+ }
141
+ export function builtinPitchBend(args, position) {
142
+ this.checkTrackPhase(position);
143
+ const track = this.currentTrack;
144
+ if (track.kind !== 'midi') {
145
+ throw new MFError('TYPE', 'pitchBend() only valid in MIDI tracks', position, this.filePath);
146
+ }
147
+ const value = this.evaluate(args[0]);
148
+ if (value.type !== 'int') {
149
+ throw new MFError('TYPE', 'pitchBend() value must be int', position, this.filePath);
150
+ }
151
+ if (value.value < -8192 || value.value > 8191) {
152
+ throw createError('E122', `pitchBend value ${value.value} out of range -8192..8191`, position, this.filePath);
153
+ }
154
+ const event = {
155
+ type: 'pitchBend',
156
+ tick: track.cursor,
157
+ value: value.value,
158
+ };
159
+ track.events.push(event);
160
+ return makeNull();
161
+ }
162
+ export function builtinAftertouch(args, position) {
163
+ this.checkTrackPhase(position);
164
+ const track = this.currentTrack;
165
+ if (track.kind !== 'midi') {
166
+ throw new MFError('TYPE', 'aftertouch() only valid in MIDI tracks', position, this.filePath);
167
+ }
168
+ const value = this.evaluate(args[0]);
169
+ if (value.type !== 'int') {
170
+ throw new MFError('TYPE', 'aftertouch() value must be int', position, this.filePath);
171
+ }
172
+ if (value.value < 0 || value.value > 127) {
173
+ throw createError('E121', `aftertouch value ${value.value} out of range 0..127`, position, this.filePath);
174
+ }
175
+ const event = {
176
+ type: 'aftertouch',
177
+ tick: track.cursor,
178
+ value: value.value,
179
+ };
180
+ track.events.push(event);
181
+ return makeNull();
182
+ }
183
+ export function builtinPolyAftertouch(args, position) {
184
+ this.checkTrackPhase(position);
185
+ const track = this.currentTrack;
186
+ if (track.kind !== 'midi') {
187
+ throw new MFError('TYPE', 'polyAftertouch() only valid in MIDI tracks', position, this.filePath);
188
+ }
189
+ const key = this.evaluate(args[0]);
190
+ const value = this.evaluate(args[1]);
191
+ if (key.type !== 'int' && key.type !== 'pitch') {
192
+ throw new MFError('TYPE', 'polyAftertouch() key must be int or Pitch', position, this.filePath);
193
+ }
194
+ if (value.type !== 'int') {
195
+ throw new MFError('TYPE', 'polyAftertouch() value must be int', position, this.filePath);
196
+ }
197
+ const keyVal = key.type === 'pitch' ? key.midi : key.value;
198
+ if (keyVal < 0 || keyVal > 127) {
199
+ throw createError('E110', `polyAftertouch key ${keyVal} out of range 0..127`, position, this.filePath);
200
+ }
201
+ if (value.value < 0 || value.value > 127) {
202
+ throw createError('E121', `polyAftertouch value ${value.value} out of range 0..127`, position, this.filePath);
203
+ }
204
+ const event = {
205
+ type: 'polyAftertouch',
206
+ tick: track.cursor,
207
+ key: keyVal,
208
+ value: value.value,
209
+ };
210
+ track.events.push(event);
211
+ return makeNull();
212
+ }
213
+ export function builtinNRPN(args, position) {
214
+ this.checkTrackPhase(position);
215
+ const track = this.currentTrack;
216
+ if (track.kind !== 'midi') {
217
+ throw new MFError('TYPE', 'nrpn() only valid in MIDI tracks', position, this.filePath);
218
+ }
219
+ const paramMSB = this.evaluate(args[0]);
220
+ const paramLSB = this.evaluate(args[1]);
221
+ const valueMSB = this.evaluate(args[2]);
222
+ const valueLSB = args.length >= 4 ? this.evaluate(args[3]) : null;
223
+ if (paramMSB.type !== 'int' || paramLSB.type !== 'int' || valueMSB.type !== 'int') {
224
+ throw new MFError('TYPE', 'nrpn() parameters must be int', position, this.filePath);
225
+ }
226
+ const event = {
227
+ type: 'nrpn',
228
+ tick: track.cursor,
229
+ paramMSB: paramMSB.value,
230
+ paramLSB: paramLSB.value,
231
+ valueMSB: valueMSB.value,
232
+ valueLSB: valueLSB && valueLSB.type === 'int' ? valueLSB.value : undefined,
233
+ };
234
+ track.events.push(event);
235
+ return makeNull();
236
+ }
237
+ export function builtinRPN(args, position) {
238
+ this.checkTrackPhase(position);
239
+ const track = this.currentTrack;
240
+ if (track.kind !== 'midi') {
241
+ throw new MFError('TYPE', 'rpn() only valid in MIDI tracks', position, this.filePath);
242
+ }
243
+ const paramMSB = this.evaluate(args[0]);
244
+ const paramLSB = this.evaluate(args[1]);
245
+ const valueMSB = this.evaluate(args[2]);
246
+ if (paramMSB.type !== 'int' || paramLSB.type !== 'int' || valueMSB.type !== 'int') {
247
+ throw new MFError('TYPE', 'rpn() parameters must be int', position, this.filePath);
248
+ }
249
+ // RPN uses CC 101 (MSB), 100 (LSB), 6 (Data Entry)
250
+ const ccEvents = [
251
+ { type: 'cc', tick: track.cursor, controller: 101, value: paramMSB.value },
252
+ { type: 'cc', tick: track.cursor, controller: 100, value: paramLSB.value },
253
+ { type: 'cc', tick: track.cursor, controller: 6, value: valueMSB.value },
254
+ ];
255
+ track.events.push(...ccEvents);
256
+ return makeNull();
257
+ }
258
+ export function builtinSysEx(args, position) {
259
+ this.checkTrackPhase(position);
260
+ const track = this.currentTrack;
261
+ if (track.kind !== 'midi') {
262
+ throw new MFError('TYPE', 'sysex() only valid in MIDI tracks', position, this.filePath);
263
+ }
264
+ const data = this.evaluate(args[0]);
265
+ if (data.type !== 'array') {
266
+ throw new MFError('TYPE', 'sysex() expects array of int bytes', position, this.filePath);
267
+ }
268
+ const bytes = [];
269
+ for (const el of data.elements) {
270
+ if (el.type !== 'int') {
271
+ throw new MFError('TYPE', 'sysex() array must contain only int', position, this.filePath);
272
+ }
273
+ if (el.value < 0 || el.value > 127) {
274
+ throw createError('E121', `sysex byte ${el.value} out of range 0..127`, position, this.filePath);
275
+ }
276
+ bytes.push(el.value);
277
+ }
278
+ const event = {
279
+ type: 'sysex',
280
+ tick: track.cursor,
281
+ data: bytes,
282
+ };
283
+ track.events.push(event);
284
+ return makeNull();
285
+ }
286
+ export function builtinTempoCurve(args, position) {
287
+ this.checkGlobalPhase(position);
288
+ const startTime = this.evaluate(args[0]);
289
+ const endTime = this.evaluate(args[1]);
290
+ const startBpm = this.evaluate(args[2]);
291
+ const endBpm = this.evaluate(args[3]);
292
+ const steps = args.length >= 5 ? this.evaluate(args[4]) : makeInt(16);
293
+ if (startTime.type !== 'time') {
294
+ throw new MFError('TYPE', 'tempoCurve() startTime must be Time', position, this.filePath);
295
+ }
296
+ if (endTime.type !== 'time') {
297
+ throw new MFError('TYPE', 'tempoCurve() endTime must be Time', position, this.filePath);
298
+ }
299
+ if (steps.type !== 'int') {
300
+ throw new MFError('TYPE', 'tempoCurve() steps must be int', position, this.filePath);
301
+ }
302
+ const startTick = this.timeToTick(startTime, position);
303
+ const endTick = this.timeToTick(endTime, position);
304
+ const startBpmVal = toNumber(startBpm);
305
+ const endBpmVal = toNumber(endBpm);
306
+ const numSteps = steps.value;
307
+ if (numSteps < 2) {
308
+ throw createError('E123', 'tempoCurve() steps must be at least 2', position, this.filePath);
309
+ }
310
+ // Generate tempo points with linear interpolation
311
+ const tickStep = (endTick - startTick) / (numSteps - 1);
312
+ const bpmStep = (endBpmVal - startBpmVal) / (numSteps - 1);
313
+ for (let i = 0; i < numSteps; i++) {
314
+ const tick = Math.round(startTick + tickStep * i);
315
+ const bpm = startBpmVal + bpmStep * i;
316
+ this.ir.tempos.push({ tick, bpm });
317
+ }
318
+ return makeNull();
319
+ }
320
+ //# sourceMappingURL=midi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"midi.js","sourceRoot":"","sources":["../../../src/interpreter/builtins/midi.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { Expression } from '../../types/ast.js';
2
+ import { RuntimeValue } from '../runtime.js';
3
+ export declare function builtinBus(this: any, args: Expression[], position: any): RuntimeValue;
4
+ export declare function builtinSend(this: any, args: Expression[], position: any): RuntimeValue;
5
+ export declare function builtinStereoWidth(this: any, args: Expression[], position: any): RuntimeValue;
6
+ //# sourceMappingURL=mixing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mixing.d.ts","sourceRoot":"","sources":["../../../src/interpreter/builtins/mixing.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAgC,MAAM,eAAe,CAAC;AAG3E,wBAAgB,UAAU,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,QAAQ,EAAE,GAAG,GAAG,YAAY,CA0BrF;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,QAAQ,EAAE,GAAG,GAAG,YAAY,CA0BtF;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,QAAQ,EAAE,GAAG,GAAG,YAAY,CAiB7F"}
@@ -0,0 +1,62 @@
1
+ // Mixing builtin functions: bus, send, stereoWidth
2
+ import { makeNull, toNumber, isTruthy } from '../runtime.js';
3
+ import { MFError } from '../../errors.js';
4
+ export function builtinBus(args, position) {
5
+ this.checkTrackPhase(position);
6
+ const track = this.currentTrack;
7
+ const name = this.evaluate(args[0]);
8
+ const busType = args.length > 1 ? this.evaluate(args[1]) : { type: 'string', value: 'bus' };
9
+ if (name.type !== 'string') {
10
+ throw new MFError('TYPE', 'bus() name must be string', position, this.filePath);
11
+ }
12
+ if (!track.buses) {
13
+ track.buses = [];
14
+ }
15
+ track.buses.push({
16
+ id: name.value,
17
+ name: name.value,
18
+ type: busType.value || 'bus',
19
+ inputTracks: [],
20
+ effects: [],
21
+ volume: 1,
22
+ pan: 0,
23
+ });
24
+ return makeNull();
25
+ }
26
+ export function builtinSend(args, position) {
27
+ this.checkTrackPhase(position);
28
+ const track = this.currentTrack;
29
+ const toBus = this.evaluate(args[0]);
30
+ const amount = toNumber(this.evaluate(args[1]));
31
+ const preFader = args.length > 2 ? isTruthy(this.evaluate(args[2])) : false;
32
+ if (toBus.type !== 'string') {
33
+ throw new MFError('TYPE', 'send() toBus must be string', position, this.filePath);
34
+ }
35
+ if (!track.sends) {
36
+ track.sends = [];
37
+ }
38
+ track.sends.push({
39
+ type: 'send',
40
+ tick: track.cursor,
41
+ fromTrack: track.id,
42
+ toBus: toBus.value,
43
+ amount,
44
+ preFader,
45
+ });
46
+ return makeNull();
47
+ }
48
+ export function builtinStereoWidth(args, position) {
49
+ this.checkTrackPhase(position);
50
+ const track = this.currentTrack;
51
+ const width = toNumber(this.evaluate(args[0]));
52
+ if (!track.stereoWidthEvents) {
53
+ track.stereoWidthEvents = [];
54
+ }
55
+ track.stereoWidthEvents.push({
56
+ type: 'stereoWidth',
57
+ tick: track.cursor,
58
+ width,
59
+ });
60
+ return makeNull();
61
+ }
62
+ //# sourceMappingURL=mixing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mixing.js","sourceRoot":"","sources":["../../../src/interpreter/builtins/mixing.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { Expression } from '../../types/ast.js';
2
+ import { RuntimeValue } from '../runtime.js';
3
+ export declare function builtinTuplet(this: any, args: Expression[], position: any): RuntimeValue;
4
+ export declare function builtinTupletEnd(this: any, args: Expression[], position: any): RuntimeValue;
5
+ export declare function builtinTriplet(this: any, args: Expression[], position: any): RuntimeValue;
6
+ export declare function builtinGrace(this: any, args: Expression[], position: any): RuntimeValue;
7
+ export declare function builtinAcciaccatura(this: any, args: Expression[], position: any): RuntimeValue;
8
+ export declare function builtinAppoggiatura(this: any, args: Expression[], position: any): RuntimeValue;
9
+ export declare function builtinFermata(this: any, args: Expression[], position: any): RuntimeValue;
10
+ export declare function builtinRepeatStart(this: any, args: Expression[], position: any): RuntimeValue;
11
+ export declare function builtinRepeatEnd(this: any, args: Expression[], position: any): RuntimeValue;
12
+ export declare function builtinDC(this: any, args: Expression[], position: any): RuntimeValue;
13
+ export declare function builtinDS(this: any, args: Expression[], position: any): RuntimeValue;
14
+ export declare function builtinFine(this: any, args: Expression[], position: any): RuntimeValue;
15
+ export declare function builtinCoda(this: any, args: Expression[], position: any): RuntimeValue;
16
+ export declare function builtinSegno(this: any, args: Expression[], position: any): RuntimeValue;
17
+ export declare function builtinToCoda(this: any, args: Expression[], position: any): RuntimeValue;
18
+ export declare function builtinOttava(this: any, args: Expression[], position: any): RuntimeValue;
19
+ export declare function builtinOttavaEnd(this: any, args: Expression[], position: any): RuntimeValue;
20
+ export declare function builtinVoice(this: any, args: Expression[], position: any): RuntimeValue;
21
+ export declare function builtinSlurStart(this: any, args: Expression[], position: any): RuntimeValue;
22
+ export declare function builtinSlurEnd(this: any, args: Expression[], position: any): RuntimeValue;
23
+ export declare function builtinTie(this: any, args: Expression[], position: any): RuntimeValue;
24
+ //# sourceMappingURL=notation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notation.d.ts","sourceRoot":"","sources":["../../../src/interpreter/builtins/notation.ts"],"names":[],"mappings":"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"}