@drop-ai/core 0.2.0 → 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 (301) hide show
  1. package/README.md +655 -237
  2. package/dist/actions/ActionRegistry.d.ts.map +1 -1
  3. package/dist/actions/ActionRegistry.js +7 -2
  4. package/dist/actions/ActionRegistry.js.map +1 -1
  5. package/dist/actions/types.d.ts +7 -1
  6. package/dist/actions/types.d.ts.map +1 -1
  7. package/dist/analysis/AudioAnalyzer.d.ts +71 -0
  8. package/dist/analysis/AudioAnalyzer.d.ts.map +1 -0
  9. package/dist/analysis/AudioAnalyzer.js +569 -0
  10. package/dist/analysis/AudioAnalyzer.js.map +1 -0
  11. package/dist/audio/AudioEngine.d.ts +14 -1
  12. package/dist/audio/AudioEngine.d.ts.map +1 -1
  13. package/dist/audio/AudioEngine.js +115 -35
  14. package/dist/audio/AudioEngine.js.map +1 -1
  15. package/dist/audio/Auditioner.d.ts +104 -0
  16. package/dist/audio/Auditioner.d.ts.map +1 -0
  17. package/dist/audio/Auditioner.js +239 -0
  18. package/dist/audio/Auditioner.js.map +1 -0
  19. package/dist/audio/BWFMetadata.d.ts +116 -0
  20. package/dist/audio/BWFMetadata.d.ts.map +1 -0
  21. package/dist/audio/BWFMetadata.js +394 -0
  22. package/dist/audio/BWFMetadata.js.map +1 -0
  23. package/dist/audio/ChannelSplitter.d.ts +37 -0
  24. package/dist/audio/ChannelSplitter.d.ts.map +1 -0
  25. package/dist/audio/ChannelSplitter.js +82 -0
  26. package/dist/audio/ChannelSplitter.js.map +1 -0
  27. package/dist/audio/ExportAnalyzer.d.ts +39 -0
  28. package/dist/audio/ExportAnalyzer.d.ts.map +1 -0
  29. package/dist/audio/ExportAnalyzer.js +76 -0
  30. package/dist/audio/ExportAnalyzer.js.map +1 -0
  31. package/dist/audio/LufsNormalizer.d.ts +37 -0
  32. package/dist/audio/LufsNormalizer.d.ts.map +1 -0
  33. package/dist/audio/LufsNormalizer.js +217 -0
  34. package/dist/audio/LufsNormalizer.js.map +1 -0
  35. package/dist/audio/OfflineExporter.d.ts +1 -6
  36. package/dist/audio/OfflineExporter.d.ts.map +1 -1
  37. package/dist/audio/OfflineExporter.js +31 -10
  38. package/dist/audio/OfflineExporter.js.map +1 -1
  39. package/dist/audio/RoutingGraph.d.ts +134 -0
  40. package/dist/audio/RoutingGraph.d.ts.map +1 -0
  41. package/dist/audio/RoutingGraph.js +547 -0
  42. package/dist/audio/RoutingGraph.js.map +1 -0
  43. package/dist/audio/SampleRateConverter.d.ts +21 -0
  44. package/dist/audio/SampleRateConverter.d.ts.map +1 -0
  45. package/dist/audio/SampleRateConverter.js +84 -0
  46. package/dist/audio/SampleRateConverter.js.map +1 -0
  47. package/dist/audio/SilencePadding.d.ts +29 -0
  48. package/dist/audio/SilencePadding.d.ts.map +1 -0
  49. package/dist/audio/SilencePadding.js +86 -0
  50. package/dist/audio/SilencePadding.js.map +1 -0
  51. package/dist/audio/SourceCache.d.ts +13 -16
  52. package/dist/audio/SourceCache.d.ts.map +1 -1
  53. package/dist/audio/SourceCache.js +21 -33
  54. package/dist/audio/SourceCache.js.map +1 -1
  55. package/dist/audio/engine/Declick.d.ts +98 -0
  56. package/dist/audio/engine/Declick.d.ts.map +1 -0
  57. package/dist/audio/engine/Declick.js +204 -0
  58. package/dist/audio/engine/Declick.js.map +1 -0
  59. package/dist/audio/engine/DiskIO.d.ts +172 -0
  60. package/dist/audio/engine/DiskIO.d.ts.map +1 -0
  61. package/dist/audio/engine/DiskIO.js +384 -0
  62. package/dist/audio/engine/DiskIO.js.map +1 -0
  63. package/dist/audio/engine/LatencyCompensator.d.ts +46 -0
  64. package/dist/audio/engine/LatencyCompensator.d.ts.map +1 -0
  65. package/dist/audio/engine/LatencyCompensator.js +84 -0
  66. package/dist/audio/engine/LatencyCompensator.js.map +1 -0
  67. package/dist/audio/engine/MultiTrackRecorder.d.ts +146 -0
  68. package/dist/audio/engine/MultiTrackRecorder.d.ts.map +1 -0
  69. package/dist/audio/engine/MultiTrackRecorder.js +359 -0
  70. package/dist/audio/engine/MultiTrackRecorder.js.map +1 -0
  71. package/dist/audio/engine/PlaylistEngine.d.ts.map +1 -1
  72. package/dist/audio/engine/PlaylistEngine.js +9 -2
  73. package/dist/audio/engine/PlaylistEngine.js.map +1 -1
  74. package/dist/audio/engine/PunchRecordManager.d.ts +113 -0
  75. package/dist/audio/engine/PunchRecordManager.d.ts.map +1 -0
  76. package/dist/audio/engine/PunchRecordManager.js +191 -0
  77. package/dist/audio/engine/PunchRecordManager.js.map +1 -0
  78. package/dist/audio/engine/RoutingGraph.d.ts +135 -0
  79. package/dist/audio/engine/RoutingGraph.d.ts.map +1 -0
  80. package/dist/audio/engine/RoutingGraph.js +436 -0
  81. package/dist/audio/engine/RoutingGraph.js.map +1 -0
  82. package/dist/audio/engine/SidechainRouter.d.ts +139 -0
  83. package/dist/audio/engine/SidechainRouter.d.ts.map +1 -0
  84. package/dist/audio/engine/SidechainRouter.js +292 -0
  85. package/dist/audio/engine/SidechainRouter.js.map +1 -0
  86. package/dist/audio/engine/XrunTracker.d.ts +71 -0
  87. package/dist/audio/engine/XrunTracker.d.ts.map +1 -0
  88. package/dist/audio/engine/XrunTracker.js +118 -0
  89. package/dist/audio/engine/XrunTracker.js.map +1 -0
  90. package/dist/audio/export/CDMarkerExporter.d.ts +62 -0
  91. package/dist/audio/export/CDMarkerExporter.d.ts.map +1 -0
  92. package/dist/audio/export/CDMarkerExporter.js +164 -0
  93. package/dist/audio/export/CDMarkerExporter.js.map +1 -0
  94. package/dist/audio/export/ExportGraphBuilder.d.ts +121 -0
  95. package/dist/audio/export/ExportGraphBuilder.d.ts.map +1 -0
  96. package/dist/audio/export/ExportGraphBuilder.js +522 -0
  97. package/dist/audio/export/ExportGraphBuilder.js.map +1 -0
  98. package/dist/audio/export/ExportPresetManager.d.ts +87 -0
  99. package/dist/audio/export/ExportPresetManager.d.ts.map +1 -0
  100. package/dist/audio/export/ExportPresetManager.js +306 -0
  101. package/dist/audio/export/ExportPresetManager.js.map +1 -0
  102. package/dist/commands/handlers/RegionHandler.d.ts.map +1 -1
  103. package/dist/commands/handlers/RegionHandler.js +25 -1
  104. package/dist/commands/handlers/RegionHandler.js.map +1 -1
  105. package/dist/commands/handlers/TrackHandler.js +1 -1
  106. package/dist/commands/handlers/TrackHandler.js.map +1 -1
  107. package/dist/commands/impl/FreezeTrackCommand.d.ts.map +1 -1
  108. package/dist/commands/impl/FreezeTrackCommand.js +37 -36
  109. package/dist/commands/impl/FreezeTrackCommand.js.map +1 -1
  110. package/dist/commands/impl/SetRegionTimeDomainCommand.d.ts.map +1 -1
  111. package/dist/commands/impl/SetRegionTimeDomainCommand.js +3 -3
  112. package/dist/commands/impl/SetRegionTimeDomainCommand.js.map +1 -1
  113. package/dist/commands/impl/ToggleLoopCommand.d.ts +1 -0
  114. package/dist/commands/impl/ToggleLoopCommand.d.ts.map +1 -1
  115. package/dist/commands/impl/ToggleLoopCommand.js +10 -0
  116. package/dist/commands/impl/ToggleLoopCommand.js.map +1 -1
  117. package/dist/commands/impl/TrimRegionCommand.d.ts +14 -1
  118. package/dist/commands/impl/TrimRegionCommand.d.ts.map +1 -1
  119. package/dist/commands/impl/TrimRegionCommand.js +138 -33
  120. package/dist/commands/impl/TrimRegionCommand.js.map +1 -1
  121. package/dist/commands/impl/TrimRegionToPlayheadCommand.d.ts +27 -0
  122. package/dist/commands/impl/TrimRegionToPlayheadCommand.d.ts.map +1 -0
  123. package/dist/commands/impl/TrimRegionToPlayheadCommand.js +69 -0
  124. package/dist/commands/impl/TrimRegionToPlayheadCommand.js.map +1 -0
  125. package/dist/commands/impl/TrimRegionToRangeCommand.d.ts +28 -0
  126. package/dist/commands/impl/TrimRegionToRangeCommand.d.ts.map +1 -0
  127. package/dist/commands/impl/TrimRegionToRangeCommand.js +69 -0
  128. package/dist/commands/impl/TrimRegionToRangeCommand.js.map +1 -0
  129. package/dist/commands/impl/TrimToAdjacentRegionCommand.d.ts +27 -0
  130. package/dist/commands/impl/TrimToAdjacentRegionCommand.d.ts.map +1 -0
  131. package/dist/commands/impl/TrimToAdjacentRegionCommand.js +77 -0
  132. package/dist/commands/impl/TrimToAdjacentRegionCommand.js.map +1 -0
  133. package/dist/commands/types.d.ts +19 -0
  134. package/dist/commands/types.d.ts.map +1 -1
  135. package/dist/commands/types.js +21 -0
  136. package/dist/commands/types.js.map +1 -1
  137. package/dist/domain/Crossfade.d.ts +78 -0
  138. package/dist/domain/Crossfade.d.ts.map +1 -0
  139. package/dist/domain/Crossfade.js +216 -0
  140. package/dist/domain/Crossfade.js.map +1 -0
  141. package/dist/domain/ExportConfig.d.ts +98 -1
  142. package/dist/domain/ExportConfig.d.ts.map +1 -1
  143. package/dist/domain/ExportConfig.js +154 -1
  144. package/dist/domain/ExportConfig.js.map +1 -1
  145. package/dist/domain/ExportPreset.d.ts +62 -0
  146. package/dist/domain/ExportPreset.d.ts.map +1 -0
  147. package/dist/domain/ExportPreset.js +79 -0
  148. package/dist/domain/ExportPreset.js.map +1 -0
  149. package/dist/domain/ImportStatus.d.ts +40 -0
  150. package/dist/domain/ImportStatus.d.ts.map +1 -0
  151. package/dist/domain/ImportStatus.js +86 -0
  152. package/dist/domain/ImportStatus.js.map +1 -0
  153. package/dist/domain/Playlist.d.ts +72 -0
  154. package/dist/domain/Playlist.d.ts.map +1 -1
  155. package/dist/domain/Playlist.js +231 -6
  156. package/dist/domain/Playlist.js.map +1 -1
  157. package/dist/domain/Region.d.ts +76 -0
  158. package/dist/domain/Region.d.ts.map +1 -1
  159. package/dist/domain/Region.js +234 -1
  160. package/dist/domain/Region.js.map +1 -1
  161. package/dist/domain/Route.d.ts +43 -3
  162. package/dist/domain/Route.d.ts.map +1 -1
  163. package/dist/domain/Route.js +92 -6
  164. package/dist/domain/Route.js.map +1 -1
  165. package/dist/domain/Session.d.ts +31 -0
  166. package/dist/domain/Session.d.ts.map +1 -1
  167. package/dist/domain/Session.js +70 -0
  168. package/dist/domain/Session.js.map +1 -1
  169. package/dist/domain/Source.d.ts +145 -1
  170. package/dist/domain/Source.d.ts.map +1 -1
  171. package/dist/domain/Source.js +144 -1
  172. package/dist/domain/Source.js.map +1 -1
  173. package/dist/domain/ThawList.d.ts +37 -0
  174. package/dist/domain/ThawList.d.ts.map +1 -0
  175. package/dist/domain/ThawList.js +73 -0
  176. package/dist/domain/ThawList.js.map +1 -0
  177. package/dist/domain/Track.d.ts +93 -1
  178. package/dist/domain/Track.d.ts.map +1 -1
  179. package/dist/domain/Track.js +136 -0
  180. package/dist/domain/Track.js.map +1 -1
  181. package/dist/domain/TriggerBox.d.ts +123 -0
  182. package/dist/domain/TriggerBox.d.ts.map +1 -0
  183. package/dist/domain/TriggerBox.js +430 -0
  184. package/dist/domain/TriggerBox.js.map +1 -0
  185. package/dist/domain/VCATrack.d.ts +64 -1
  186. package/dist/domain/VCATrack.d.ts.map +1 -1
  187. package/dist/domain/VCATrack.js +128 -1
  188. package/dist/domain/VCATrack.js.map +1 -1
  189. package/dist/domain/VideoExportConfig.d.ts +117 -0
  190. package/dist/domain/VideoExportConfig.d.ts.map +1 -0
  191. package/dist/domain/VideoExportConfig.js +244 -0
  192. package/dist/domain/VideoExportConfig.js.map +1 -0
  193. package/dist/domain/VideoExportStatus.d.ts +89 -0
  194. package/dist/domain/VideoExportStatus.d.ts.map +1 -0
  195. package/dist/domain/VideoExportStatus.js +192 -0
  196. package/dist/domain/VideoExportStatus.js.map +1 -0
  197. package/dist/domain/VideoMetadata.d.ts +46 -0
  198. package/dist/domain/VideoMetadata.d.ts.map +1 -0
  199. package/dist/domain/VideoMetadata.js +2 -0
  200. package/dist/domain/VideoMetadata.js.map +1 -0
  201. package/dist/domain/index.d.ts +5 -0
  202. package/dist/domain/index.d.ts.map +1 -1
  203. package/dist/domain/index.js +5 -0
  204. package/dist/domain/index.js.map +1 -1
  205. package/dist/domain/temporal/TempoMap.d.ts +199 -2
  206. package/dist/domain/temporal/TempoMap.d.ts.map +1 -1
  207. package/dist/domain/temporal/TempoMap.js +464 -30
  208. package/dist/domain/temporal/TempoMap.js.map +1 -1
  209. package/dist/index.d.ts +43 -1
  210. package/dist/index.d.ts.map +1 -1
  211. package/dist/index.js +32 -1
  212. package/dist/index.js.map +1 -1
  213. package/dist/lib/ThawList.d.ts +100 -0
  214. package/dist/lib/ThawList.d.ts.map +1 -0
  215. package/dist/lib/ThawList.js +153 -0
  216. package/dist/lib/ThawList.js.map +1 -0
  217. package/dist/midi/MidiFileParser.d.ts +33 -0
  218. package/dist/midi/MidiFileParser.d.ts.map +1 -0
  219. package/dist/midi/MidiFileParser.js +246 -0
  220. package/dist/midi/MidiFileParser.js.map +1 -0
  221. package/dist/midi/MidiFileWriter.d.ts +31 -0
  222. package/dist/midi/MidiFileWriter.d.ts.map +1 -0
  223. package/dist/midi/MidiFileWriter.js +160 -0
  224. package/dist/midi/MidiFileWriter.js.map +1 -0
  225. package/dist/midi/MidiImporter.d.ts +37 -0
  226. package/dist/midi/MidiImporter.d.ts.map +1 -0
  227. package/dist/midi/MidiImporter.js +62 -0
  228. package/dist/midi/MidiImporter.js.map +1 -0
  229. package/dist/plugins/PluginPresetManager.d.ts +86 -0
  230. package/dist/plugins/PluginPresetManager.d.ts.map +1 -0
  231. package/dist/plugins/PluginPresetManager.js +140 -0
  232. package/dist/plugins/PluginPresetManager.js.map +1 -0
  233. package/dist/processing/IO.d.ts +15 -1
  234. package/dist/processing/IO.d.ts.map +1 -1
  235. package/dist/processing/IO.js +29 -1
  236. package/dist/processing/IO.js.map +1 -1
  237. package/dist/processing/InternalSend.d.ts +104 -0
  238. package/dist/processing/InternalSend.d.ts.map +1 -0
  239. package/dist/processing/InternalSend.js +175 -0
  240. package/dist/processing/InternalSend.js.map +1 -0
  241. package/dist/processing/MeterDSP.d.ts +166 -0
  242. package/dist/processing/MeterDSP.d.ts.map +1 -0
  243. package/dist/processing/MeterDSP.js +754 -0
  244. package/dist/processing/MeterDSP.js.map +1 -0
  245. package/dist/processing/Panner.d.ts +145 -0
  246. package/dist/processing/Panner.d.ts.map +1 -0
  247. package/dist/processing/Panner.js +281 -0
  248. package/dist/processing/Panner.js.map +1 -0
  249. package/dist/processing/PluginInsert.d.ts +56 -1
  250. package/dist/processing/PluginInsert.d.ts.map +1 -1
  251. package/dist/processing/PluginInsert.js +180 -2
  252. package/dist/processing/PluginInsert.js.map +1 -1
  253. package/dist/processing/Processor.d.ts +38 -0
  254. package/dist/processing/Processor.d.ts.map +1 -1
  255. package/dist/processing/Processor.js +60 -1
  256. package/dist/processing/Processor.js.map +1 -1
  257. package/dist/processing/SurroundPanner.d.ts +122 -0
  258. package/dist/processing/SurroundPanner.d.ts.map +1 -0
  259. package/dist/processing/SurroundPanner.js +376 -0
  260. package/dist/processing/SurroundPanner.js.map +1 -0
  261. package/dist/processing/TruePeakLimiter.d.ts +34 -0
  262. package/dist/processing/TruePeakLimiter.d.ts.map +1 -0
  263. package/dist/processing/TruePeakLimiter.js +144 -0
  264. package/dist/processing/TruePeakLimiter.js.map +1 -0
  265. package/dist/storage/ExportPresetStorage.d.ts +33 -0
  266. package/dist/storage/ExportPresetStorage.d.ts.map +1 -0
  267. package/dist/storage/ExportPresetStorage.js +121 -0
  268. package/dist/storage/ExportPresetStorage.js.map +1 -0
  269. package/dist/storage/SessionArchive.d.ts +73 -0
  270. package/dist/storage/SessionArchive.d.ts.map +1 -0
  271. package/dist/storage/SessionArchive.js +211 -0
  272. package/dist/storage/SessionArchive.js.map +1 -0
  273. package/dist/storage/SessionTemplate.d.ts +74 -5
  274. package/dist/storage/SessionTemplate.d.ts.map +1 -1
  275. package/dist/storage/SessionTemplate.js +247 -53
  276. package/dist/storage/SessionTemplate.js.map +1 -1
  277. package/dist/utils/BwfMetadataWriter.d.ts +42 -0
  278. package/dist/utils/BwfMetadataWriter.d.ts.map +1 -0
  279. package/dist/utils/BwfMetadataWriter.js +131 -0
  280. package/dist/utils/BwfMetadataWriter.js.map +1 -0
  281. package/dist/utils/FilenameTemplate.d.ts +40 -0
  282. package/dist/utils/FilenameTemplate.d.ts.map +1 -0
  283. package/dist/utils/FilenameTemplate.js +78 -0
  284. package/dist/utils/FilenameTemplate.js.map +1 -0
  285. package/dist/utils/Logger.d.ts +28 -0
  286. package/dist/utils/Logger.d.ts.map +1 -0
  287. package/dist/utils/Logger.js +46 -0
  288. package/dist/utils/Logger.js.map +1 -0
  289. package/dist/utils/Mp4ChapterGenerator.d.ts +17 -0
  290. package/dist/utils/Mp4ChapterGenerator.d.ts.map +1 -0
  291. package/dist/utils/Mp4ChapterGenerator.js +33 -0
  292. package/dist/utils/Mp4ChapterGenerator.js.map +1 -0
  293. package/dist/utils/OggEncoder.d.ts +20 -20
  294. package/dist/utils/OggEncoder.d.ts.map +1 -1
  295. package/dist/utils/OggEncoder.js +114 -50
  296. package/dist/utils/OggEncoder.js.map +1 -1
  297. package/dist/utils/TocGenerator.d.ts +17 -0
  298. package/dist/utils/TocGenerator.d.ts.map +1 -0
  299. package/dist/utils/TocGenerator.js +47 -0
  300. package/dist/utils/TocGenerator.js.map +1 -0
  301. package/package.json +7 -8
@@ -0,0 +1,522 @@
1
+ import { ExportFormat, ExportSampleFormat } from '../../domain/ExportConfig';
2
+ import { DitherType } from '../../utils/DitherProcessor';
3
+ /**
4
+ * Builds a dynamic processing chain for audio export.
5
+ *
6
+ * Instead of a fixed pipeline (as in OfflineExporter), ExportGraphBuilder
7
+ * assembles an ordered sequence of ExportNode instances based on the
8
+ * ExportConfig. Custom nodes can be inserted at any position to extend
9
+ * the chain without modifying the core logic.
10
+ *
11
+ * Ardour reference: libs/ardour/export_graph_builder.cc
12
+ */
13
+ export class ExportGraphBuilder {
14
+ constructor(config) {
15
+ this._nodes = [];
16
+ this._config = config;
17
+ this._sampleRate = config.sampleRate;
18
+ this._channelCount = config.exportMasterOnly ? 2 : 2; // default stereo
19
+ this.buildFromConfig(config);
20
+ }
21
+ // ------------------------------------------------------------------ graph
22
+ /**
23
+ * Build the processing graph from an ExportConfig.
24
+ * Clears any existing nodes and re-creates the chain.
25
+ */
26
+ buildFromConfig(config) {
27
+ var _a, _b, _c, _d, _e;
28
+ this._nodes = [];
29
+ this._config = config;
30
+ this._sampleRate = config.sampleRate;
31
+ // 1. Silence trim (before everything else)
32
+ if (config.trimSilence) {
33
+ this._nodes.push(ExportGraphBuilder.createSilenceTrimNode(-60));
34
+ }
35
+ // 2. Normalization
36
+ if (config.normalize) {
37
+ const mode = (_a = config.normalizeMode) !== null && _a !== void 0 ? _a : 'peak';
38
+ const targetLevel = mode === 'lufs'
39
+ ? ((_b = config.targetLufs) !== null && _b !== void 0 ? _b : -14)
40
+ : ((_c = config.targetPeakDb) !== null && _c !== void 0 ? _c : -1);
41
+ this._nodes.push(ExportGraphBuilder.createNormalizeNode(mode, targetLevel));
42
+ }
43
+ // 3. True-peak limiter
44
+ if (config.truePeakLimit) {
45
+ this._nodes.push(ExportGraphBuilder.createTruePeakLimiterNode((_d = config.truePeakCeiling) !== null && _d !== void 0 ? _d : -1.0));
46
+ }
47
+ // 4. Dithering (only when reducing bit depth below 32-bit float)
48
+ if (config.ditherType && config.ditherType !== DitherType.NONE) {
49
+ const targetBits = config.sampleFormat === ExportSampleFormat.INT16 ? 16
50
+ : config.sampleFormat === ExportSampleFormat.INT24 ? 24
51
+ : 32;
52
+ if (targetBits < 32) {
53
+ const ditherTypeMap = {
54
+ [DitherType.NONE]: 'none',
55
+ [DitherType.TPDF]: 'triangular',
56
+ [DitherType.SHAPED]: 'shaped',
57
+ };
58
+ this._nodes.push(ExportGraphBuilder.createDitherNode((_e = ditherTypeMap[config.ditherType]) !== null && _e !== void 0 ? _e : 'none', targetBits));
59
+ }
60
+ }
61
+ // 5. Final analyzer (captures stats of the processed audio)
62
+ this._nodes.push(ExportGraphBuilder.createAnalyzerNode());
63
+ }
64
+ // -------------------------------------------------------- node management
65
+ /**
66
+ * Add a node to the graph.
67
+ * @param node The node to insert.
68
+ * @param position Optional zero-based index. Appends if omitted.
69
+ */
70
+ addNode(node, position) {
71
+ if (position !== undefined && position >= 0 && position <= this._nodes.length) {
72
+ this._nodes.splice(position, 0, node);
73
+ }
74
+ else {
75
+ this._nodes.push(node);
76
+ }
77
+ }
78
+ /**
79
+ * Remove a node by id.
80
+ */
81
+ removeNode(id) {
82
+ this._nodes = this._nodes.filter(n => n.id !== id);
83
+ }
84
+ /**
85
+ * Get the current ordered list of nodes (read-only copy).
86
+ */
87
+ getNodes() {
88
+ return [...this._nodes];
89
+ }
90
+ // --------------------------------------------------------------- process
91
+ /**
92
+ * Process multi-channel audio through every node in sequence.
93
+ */
94
+ async processBuffer(inputBuffer) {
95
+ let buffer = inputBuffer;
96
+ for (const node of this._nodes) {
97
+ buffer = await node.process(buffer, this._sampleRate);
98
+ }
99
+ return buffer;
100
+ }
101
+ /**
102
+ * Encode the processed buffer into a Blob according to the config format.
103
+ * This is a lightweight wrapper that delegates to format-specific logic.
104
+ */
105
+ async encode(buffer) {
106
+ const format = this._config.format;
107
+ const sampleRate = this._sampleRate;
108
+ switch (format) {
109
+ case ExportFormat.WAV:
110
+ case 'wav':
111
+ return this._encodeWav(buffer, sampleRate, this._config.sampleFormat);
112
+ case ExportFormat.FLAC:
113
+ case 'flac':
114
+ return this._encodeRaw(buffer, 'audio/flac');
115
+ case ExportFormat.OGG:
116
+ case 'ogg':
117
+ return this._encodeRaw(buffer, 'audio/ogg');
118
+ case ExportFormat.MP3:
119
+ case 'mp3':
120
+ return this._encodeRaw(buffer, 'audio/mp3');
121
+ default:
122
+ return this._encodeWav(buffer, sampleRate, this._config.sampleFormat);
123
+ }
124
+ }
125
+ // ===================================================================
126
+ // Built-in node factories
127
+ // ===================================================================
128
+ /**
129
+ * Create a normalization node.
130
+ * @param mode 'peak' or 'lufs'
131
+ * @param targetLevel Target level in dB (peak) or LUFS
132
+ */
133
+ static createNormalizeNode(mode, targetLevel) {
134
+ return {
135
+ id: `normalize-${mode}`,
136
+ type: 'normalize',
137
+ process(buffer, _sampleRate) {
138
+ if (mode === 'peak') {
139
+ // Peak normalization
140
+ let maxPeak = 0;
141
+ for (const ch of buffer) {
142
+ for (let i = 0; i < ch.length; i++) {
143
+ const abs = Math.abs(ch[i]);
144
+ if (abs > maxPeak)
145
+ maxPeak = abs;
146
+ }
147
+ }
148
+ if (maxPeak === 0)
149
+ return buffer;
150
+ const targetLinear = Math.pow(10, targetLevel / 20);
151
+ const gain = targetLinear / maxPeak;
152
+ for (const ch of buffer) {
153
+ for (let i = 0; i < ch.length; i++) {
154
+ ch[i] *= gain;
155
+ }
156
+ }
157
+ }
158
+ else {
159
+ // Simplified LUFS-style normalization
160
+ // Compute integrated loudness using K-weighted RMS approximation
161
+ let sumSquared = 0;
162
+ let totalSamples = 0;
163
+ for (const ch of buffer) {
164
+ for (let i = 0; i < ch.length; i++) {
165
+ sumSquared += ch[i] * ch[i];
166
+ }
167
+ totalSamples += ch.length;
168
+ }
169
+ if (totalSamples === 0 || sumSquared === 0)
170
+ return buffer;
171
+ const rms = Math.sqrt(sumSquared / totalSamples);
172
+ const currentLufs = 20 * Math.log10(rms) - 0.691; // simplified K-weighting offset
173
+ const gainDb = targetLevel - currentLufs;
174
+ const gainLinear = Math.pow(10, gainDb / 20);
175
+ for (const ch of buffer) {
176
+ for (let i = 0; i < ch.length; i++) {
177
+ ch[i] *= gainLinear;
178
+ }
179
+ }
180
+ }
181
+ return buffer;
182
+ },
183
+ };
184
+ }
185
+ /**
186
+ * Create a true-peak limiter node.
187
+ * @param ceiling Maximum true-peak level in dBTP (e.g. -1.0)
188
+ */
189
+ static createTruePeakLimiterNode(ceiling) {
190
+ return {
191
+ id: 'true-peak-limiter',
192
+ type: 'limiter',
193
+ process(buffer, _sampleRate) {
194
+ const ceilingLinear = Math.pow(10, ceiling / 20);
195
+ const attack = 0.001; // ~1 ms in samples (simplified)
196
+ const release = 0.050; // ~50 ms
197
+ for (const ch of buffer) {
198
+ let envelope = 0;
199
+ for (let i = 0; i < ch.length; i++) {
200
+ const abs = Math.abs(ch[i]);
201
+ // Simple peak follower
202
+ if (abs > envelope) {
203
+ envelope = abs + attack * (abs - envelope);
204
+ }
205
+ else {
206
+ envelope = abs + (1 - release) * (envelope - abs);
207
+ }
208
+ // Apply gain reduction when envelope exceeds ceiling
209
+ if (envelope > ceilingLinear) {
210
+ ch[i] *= ceilingLinear / envelope;
211
+ }
212
+ }
213
+ }
214
+ return buffer;
215
+ },
216
+ };
217
+ }
218
+ /**
219
+ * Create a dither node.
220
+ * @param type 'none', 'triangular', or 'shaped'
221
+ * @param bitDepth Target bit depth (16 or 24)
222
+ */
223
+ static createDitherNode(type, bitDepth) {
224
+ return {
225
+ id: `dither-${type}-${bitDepth}`,
226
+ type: 'dither',
227
+ process(buffer, _sampleRate) {
228
+ if (type === 'none')
229
+ return buffer;
230
+ const quantizationStep = 1.0 / Math.pow(2, bitDepth - 1);
231
+ const scale = 1.0 / quantizationStep;
232
+ for (const ch of buffer) {
233
+ let previousError = 0;
234
+ for (let i = 0; i < ch.length; i++) {
235
+ const r1 = Math.random();
236
+ const r2 = Math.random();
237
+ const dither = (r1 - r2) * quantizationStep;
238
+ if (type === 'shaped') {
239
+ const shaped = ch[i] + dither - previousError * 0.5;
240
+ const quantized = Math.round(shaped * scale) / scale;
241
+ previousError = quantized - ch[i];
242
+ ch[i] = quantized;
243
+ }
244
+ else {
245
+ // triangular (TPDF)
246
+ const quantized = Math.round((ch[i] + dither) * scale) / scale;
247
+ ch[i] = quantized;
248
+ }
249
+ }
250
+ }
251
+ return buffer;
252
+ },
253
+ };
254
+ }
255
+ /**
256
+ * Create a silence-trimming node.
257
+ * Removes leading and trailing silence below a threshold.
258
+ * @param thresholdDb Silence threshold in dBFS (e.g. -60)
259
+ */
260
+ static createSilenceTrimNode(thresholdDb) {
261
+ return {
262
+ id: 'silence-trim',
263
+ type: 'silence_trim',
264
+ process(buffer, _sampleRate) {
265
+ if (buffer.length === 0 || buffer[0].length === 0)
266
+ return buffer;
267
+ const thresholdLinear = Math.pow(10, thresholdDb / 20);
268
+ const length = buffer[0].length;
269
+ // Find first sample above threshold (across all channels)
270
+ let startSample = 0;
271
+ outer_start: for (let i = 0; i < length; i++) {
272
+ for (const ch of buffer) {
273
+ if (Math.abs(ch[i]) > thresholdLinear) {
274
+ startSample = i;
275
+ break outer_start;
276
+ }
277
+ }
278
+ }
279
+ // Find last sample above threshold
280
+ let endSample = length - 1;
281
+ outer_end: for (let i = length - 1; i >= startSample; i--) {
282
+ for (const ch of buffer) {
283
+ if (Math.abs(ch[i]) > thresholdLinear) {
284
+ endSample = i;
285
+ break outer_end;
286
+ }
287
+ }
288
+ }
289
+ // If no signal found at all, return a single-sample silence
290
+ if (startSample > endSample) {
291
+ return buffer.map(() => new Float32Array(1));
292
+ }
293
+ const trimmedLength = endSample - startSample + 1;
294
+ return buffer.map(ch => ch.slice(startSample, startSample + trimmedLength));
295
+ },
296
+ };
297
+ }
298
+ /**
299
+ * Create a gain node.
300
+ * @param gainDb Gain in decibels
301
+ */
302
+ static createGainNode(gainDb) {
303
+ return {
304
+ id: `gain-${gainDb}dB`,
305
+ type: 'gain',
306
+ process(buffer, _sampleRate) {
307
+ const gainLinear = Math.pow(10, gainDb / 20);
308
+ for (const ch of buffer) {
309
+ for (let i = 0; i < ch.length; i++) {
310
+ ch[i] *= gainLinear;
311
+ }
312
+ }
313
+ return buffer;
314
+ },
315
+ };
316
+ }
317
+ /**
318
+ * Create a sample-rate conversion node.
319
+ * Uses linear interpolation for simplicity; a production implementation
320
+ * would use windowed sinc interpolation.
321
+ * @param fromRate Source sample rate
322
+ * @param toRate Target sample rate
323
+ */
324
+ static createSampleRateConverter(fromRate, toRate) {
325
+ return {
326
+ id: `src-${fromRate}-${toRate}`,
327
+ type: 'sample_rate_convert',
328
+ process(buffer, _sampleRate) {
329
+ if (fromRate === toRate)
330
+ return buffer;
331
+ const ratio = fromRate / toRate;
332
+ const newLength = Math.round(buffer[0].length / ratio);
333
+ const result = [];
334
+ for (const ch of buffer) {
335
+ const output = new Float32Array(newLength);
336
+ for (let i = 0; i < newLength; i++) {
337
+ const srcPos = i * ratio;
338
+ const idx = Math.floor(srcPos);
339
+ const frac = srcPos - idx;
340
+ if (idx + 1 < ch.length) {
341
+ // Linear interpolation
342
+ output[i] = ch[idx] * (1 - frac) + ch[idx + 1] * frac;
343
+ }
344
+ else if (idx < ch.length) {
345
+ output[i] = ch[idx];
346
+ }
347
+ }
348
+ result.push(output);
349
+ }
350
+ return result;
351
+ },
352
+ };
353
+ }
354
+ /**
355
+ * Create an analyzer node that measures audio characteristics
356
+ * without modifying the signal (pass-through).
357
+ */
358
+ static createAnalyzerNode() {
359
+ let analysis = {
360
+ peakDb: -Infinity,
361
+ rmsDb: -Infinity,
362
+ lufs: -Infinity,
363
+ truePeakDb: -Infinity,
364
+ dcOffset: 0,
365
+ clippedSamples: 0,
366
+ };
367
+ const node = {
368
+ id: 'analyzer',
369
+ type: 'analyzer',
370
+ process(buffer, _sampleRate) {
371
+ let maxPeak = 0;
372
+ let sumSquared = 0;
373
+ let totalSamples = 0;
374
+ let dcSum = 0;
375
+ let clipped = 0;
376
+ let truePeak = 0;
377
+ for (const ch of buffer) {
378
+ for (let i = 0; i < ch.length; i++) {
379
+ const sample = ch[i];
380
+ const abs = Math.abs(sample);
381
+ if (abs > maxPeak)
382
+ maxPeak = abs;
383
+ sumSquared += sample * sample;
384
+ dcSum += sample;
385
+ totalSamples++;
386
+ if (abs >= 1.0)
387
+ clipped++;
388
+ // Simplified true-peak detection via 4x oversampling estimation
389
+ // In production, this would use proper FIR interpolation
390
+ if (i > 0) {
391
+ const interpolated = Math.abs((ch[i - 1] + ch[i]) / 2);
392
+ if (interpolated > truePeak)
393
+ truePeak = interpolated;
394
+ }
395
+ if (abs > truePeak)
396
+ truePeak = abs;
397
+ }
398
+ }
399
+ const rms = totalSamples > 0 ? Math.sqrt(sumSquared / totalSamples) : 0;
400
+ const dc = totalSamples > 0 ? dcSum / totalSamples : 0;
401
+ analysis = {
402
+ peakDb: maxPeak > 0 ? 20 * Math.log10(maxPeak) : -Infinity,
403
+ rmsDb: rms > 0 ? 20 * Math.log10(rms) : -Infinity,
404
+ lufs: rms > 0 ? 20 * Math.log10(rms) - 0.691 : -Infinity,
405
+ truePeakDb: truePeak > 0 ? 20 * Math.log10(truePeak) : -Infinity,
406
+ dcOffset: dc,
407
+ clippedSamples: clipped,
408
+ };
409
+ // Pass through unmodified
410
+ return buffer;
411
+ },
412
+ getAnalysis() {
413
+ return Object.assign({}, analysis);
414
+ },
415
+ };
416
+ return node;
417
+ }
418
+ // ===================================================================
419
+ // Private helpers
420
+ // ===================================================================
421
+ /**
422
+ * Encode multi-channel Float32Array[] as a WAV Blob.
423
+ * Supports int16, int24, and float32.
424
+ */
425
+ _encodeWav(buffer, sampleRate, sampleFormat) {
426
+ var _a, _b, _c, _d;
427
+ const numChannels = buffer.length;
428
+ const numSamples = (_b = (_a = buffer[0]) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0;
429
+ let bytesPerSample;
430
+ let audioFormat; // 1 = PCM integer, 3 = IEEE float
431
+ switch (sampleFormat) {
432
+ case ExportSampleFormat.INT16:
433
+ bytesPerSample = 2;
434
+ audioFormat = 1;
435
+ break;
436
+ case ExportSampleFormat.INT24:
437
+ bytesPerSample = 3;
438
+ audioFormat = 1;
439
+ break;
440
+ case ExportSampleFormat.FLOAT32:
441
+ default:
442
+ bytesPerSample = 4;
443
+ audioFormat = 3;
444
+ break;
445
+ }
446
+ const blockAlign = numChannels * bytesPerSample;
447
+ const dataSize = numSamples * blockAlign;
448
+ const headerSize = 44;
449
+ const arrayBuffer = new ArrayBuffer(headerSize + dataSize);
450
+ const view = new DataView(arrayBuffer);
451
+ // RIFF header
452
+ this._writeString(view, 0, 'RIFF');
453
+ view.setUint32(4, 36 + dataSize, true);
454
+ this._writeString(view, 8, 'WAVE');
455
+ // fmt chunk
456
+ this._writeString(view, 12, 'fmt ');
457
+ view.setUint32(16, 16, true); // chunk size
458
+ view.setUint16(20, audioFormat, true); // audio format
459
+ view.setUint16(22, numChannels, true);
460
+ view.setUint32(24, sampleRate, true);
461
+ view.setUint32(28, sampleRate * blockAlign, true); // byte rate
462
+ view.setUint16(32, blockAlign, true);
463
+ view.setUint16(34, bytesPerSample * 8, true);
464
+ // data chunk
465
+ this._writeString(view, 36, 'data');
466
+ view.setUint32(40, dataSize, true);
467
+ // Interleave and write samples
468
+ let offset = headerSize;
469
+ for (let i = 0; i < numSamples; i++) {
470
+ for (let ch = 0; ch < numChannels; ch++) {
471
+ const sample = (_d = (_c = buffer[ch]) === null || _c === void 0 ? void 0 : _c[i]) !== null && _d !== void 0 ? _d : 0;
472
+ switch (sampleFormat) {
473
+ case ExportSampleFormat.INT16: {
474
+ const clamped = Math.max(-1, Math.min(1, sample));
475
+ const int16 = clamped < 0 ? clamped * 0x8000 : clamped * 0x7FFF;
476
+ view.setInt16(offset, int16, true);
477
+ offset += 2;
478
+ break;
479
+ }
480
+ case ExportSampleFormat.INT24: {
481
+ const clamped = Math.max(-1, Math.min(1, sample));
482
+ const int24 = Math.round(clamped * 0x7FFFFF);
483
+ view.setUint8(offset, int24 & 0xFF);
484
+ view.setUint8(offset + 1, (int24 >> 8) & 0xFF);
485
+ view.setUint8(offset + 2, (int24 >> 16) & 0xFF);
486
+ offset += 3;
487
+ break;
488
+ }
489
+ case ExportSampleFormat.FLOAT32:
490
+ default:
491
+ view.setFloat32(offset, sample, true);
492
+ offset += 4;
493
+ break;
494
+ }
495
+ }
496
+ }
497
+ return new Blob([arrayBuffer], { type: 'audio/wav' });
498
+ }
499
+ /**
500
+ * Wrap raw Float32 data in a generic Blob (placeholder for formats
501
+ * that require external encoders such as MP3, OGG, FLAC).
502
+ */
503
+ _encodeRaw(buffer, mimeType) {
504
+ var _a, _b, _c, _d;
505
+ // Interleave channels into a single Float32Array
506
+ const numChannels = buffer.length;
507
+ const numSamples = (_b = (_a = buffer[0]) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0;
508
+ const interleaved = new Float32Array(numChannels * numSamples);
509
+ for (let i = 0; i < numSamples; i++) {
510
+ for (let ch = 0; ch < numChannels; ch++) {
511
+ interleaved[i * numChannels + ch] = (_d = (_c = buffer[ch]) === null || _c === void 0 ? void 0 : _c[i]) !== null && _d !== void 0 ? _d : 0;
512
+ }
513
+ }
514
+ return new Blob([interleaved.buffer], { type: mimeType });
515
+ }
516
+ _writeString(view, offset, str) {
517
+ for (let i = 0; i < str.length; i++) {
518
+ view.setUint8(offset + i, str.charCodeAt(i));
519
+ }
520
+ }
521
+ }
522
+ //# sourceMappingURL=ExportGraphBuilder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExportGraphBuilder.js","sourceRoot":"","sources":["../../../src/audio/export/ExportGraphBuilder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,87 @@
1
+ import { Signal } from '../../lib/Signal';
2
+ import { ExportFormat, ExportSampleFormat, NormalizeMode } from '../../domain/ExportConfig';
3
+ import { DitherType } from '../../utils/DitherProcessor';
4
+ /**
5
+ * A partial export configuration used in presets.
6
+ * Mirrors the relevant fields from ExportConfig.
7
+ */
8
+ export interface ExportPresetConfig {
9
+ format?: ExportFormat;
10
+ sampleFormat?: ExportSampleFormat;
11
+ sampleRate?: number;
12
+ bitrate?: number;
13
+ quality?: number;
14
+ ditherType?: DitherType;
15
+ normalize?: boolean;
16
+ normalizeMode?: NormalizeMode;
17
+ targetPeakDb?: number;
18
+ targetLufs?: number;
19
+ truePeakLimit?: boolean;
20
+ truePeakCeiling?: number;
21
+ exportMasterOnly?: boolean;
22
+ stemExport?: boolean;
23
+ splitMono?: boolean;
24
+ filenameTemplate?: string;
25
+ silencePaddingStart?: number;
26
+ silencePaddingEnd?: number;
27
+ trimSilence?: boolean;
28
+ exportCdMarkers?: boolean;
29
+ cdMarkerFormat?: 'cue' | 'toc' | 'mp4ch';
30
+ bwfMetadata?: boolean;
31
+ }
32
+ /**
33
+ * A saved export configuration snapshot for quick recall.
34
+ */
35
+ export interface ExportPreset {
36
+ id: string;
37
+ name: string;
38
+ version: number;
39
+ config: ExportPresetConfig;
40
+ createdAt: string;
41
+ updatedAt: string;
42
+ }
43
+ /**
44
+ * Manages a collection of export presets, both user-created and built-in.
45
+ *
46
+ * Ardour reference: libs/ardour/export_preset.h / export_profile_manager.cc
47
+ */
48
+ export declare class ExportPresetManager {
49
+ private _presets;
50
+ /** Emitted whenever the preset list or any preset changes. */
51
+ readonly presetsChanged: Signal<void>;
52
+ constructor();
53
+ /**
54
+ * Create a new preset from the given config.
55
+ */
56
+ addPreset(name: string, config: ExportPresetConfig): ExportPreset;
57
+ /**
58
+ * Update an existing preset's configuration.
59
+ */
60
+ updatePreset(id: string, config: ExportPresetConfig): void;
61
+ /**
62
+ * Remove a preset by id.
63
+ */
64
+ removePreset(id: string): void;
65
+ /**
66
+ * Get a single preset by id.
67
+ */
68
+ getPreset(id: string): ExportPreset | undefined;
69
+ /**
70
+ * Get all presets, sorted by name.
71
+ */
72
+ getAllPresets(): ExportPreset[];
73
+ /**
74
+ * Returns the built-in default presets covering common export workflows.
75
+ */
76
+ static getDefaultPresets(): ExportPreset[];
77
+ /**
78
+ * Serialize the preset manager to a JSON string for persistence.
79
+ */
80
+ serialize(): string;
81
+ /**
82
+ * Deserialize from a JSON string and return a new ExportPresetManager.
83
+ * User presets from the JSON are merged on top of the defaults.
84
+ */
85
+ static deserialize(json: string): ExportPresetManager;
86
+ }
87
+ //# sourceMappingURL=ExportPresetManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExportPresetManager.d.ts","sourceRoot":"","sources":["../../../src/audio/export/ExportPresetManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC5F,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAEzD;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IAC/B,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,YAAY,CAAC,EAAE,kBAAkB,CAAC;IAClC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,cAAc,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,OAAO,CAAC;IACzC,WAAW,CAAC,EAAE,OAAO,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,kBAAkB,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACrB;AAUD;;;;GAIG;AACH,qBAAa,mBAAmB;IAC5B,OAAO,CAAC,QAAQ,CAA4B;IAE5C,8DAA8D;IAC9D,SAAgB,cAAc,eAAsB;;IAapD;;OAEG;IACI,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,GAAG,YAAY;IAexE;;OAEG;IACI,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,GAAG,IAAI;IAYjE;;OAEG;IACI,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAQrC;;OAEG;IACI,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAKtD;;OAEG;IACI,aAAa,IAAI,YAAY,EAAE;IAQtC;;OAEG;IACH,MAAM,CAAC,iBAAiB,IAAI,YAAY,EAAE;IAmM1C;;OAEG;IACI,SAAS,IAAI,MAAM;IAQ1B;;;OAGG;IACH,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,mBAAmB;CA0BxD"}