@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 @@
1
+ {"version":3,"file":"ExportAnalyzer.js","sourceRoot":"","sources":["../../src/audio/ExportAnalyzer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * LUFS Normalizer — ITU-R BS.1770-4 compliant gated loudness measurement.
3
+ * Ardour reference: libs/ardour/loudness_analyzer.cc
4
+ *
5
+ * Implements:
6
+ * 1. K-weighting filter (high shelf + high pass)
7
+ * 2. 400ms block mean square computation
8
+ * 3. Absolute gate at -70 LUFS
9
+ * 4. Relative gate at -10 dB below ungated mean
10
+ * 5. Integrated loudness from gated blocks
11
+ */
12
+ export interface LufsResult {
13
+ /** Integrated loudness in LUFS */
14
+ integrated: number;
15
+ /** Short-term loudness (3s window) values */
16
+ shortTerm: number[];
17
+ /** Momentary loudness (400ms window) values */
18
+ momentary: number[];
19
+ /** True peak in dBFS (per channel) */
20
+ truePeaks: number[];
21
+ /** Loudness range (LRA) in LU */
22
+ range: number;
23
+ }
24
+ /**
25
+ * Measure integrated LUFS of an AudioBuffer using the BS.1770-4 gated algorithm.
26
+ */
27
+ export declare function measureLUFS(buffer: AudioBuffer): LufsResult;
28
+ /**
29
+ * Normalize an AudioBuffer to a target LUFS level.
30
+ * Modifies the buffer in-place.
31
+ *
32
+ * @param buffer Audio buffer to normalize
33
+ * @param targetLufs Target integrated loudness (default: -14 LUFS)
34
+ * @returns The gain applied in dB, or 0 if silence
35
+ */
36
+ export declare function normalizeLUFS(buffer: AudioBuffer, targetLufs?: number): number;
37
+ //# sourceMappingURL=LufsNormalizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LufsNormalizer.d.ts","sourceRoot":"","sources":["../../src/audio/LufsNormalizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAuFH,MAAM,WAAW,UAAU;IACvB,kCAAkC;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,6CAA6C;IAC7C,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,+CAA+C;IAC/C,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,sCAAsC;IACtC,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,iCAAiC;IACjC,KAAK,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,WAAW,GAAG,UAAU,CA2H3D;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,WAAW,EAAE,UAAU,GAAE,MAAY,GAAG,MAAM,CAmBnF"}
@@ -0,0 +1,217 @@
1
+ /**
2
+ * LUFS Normalizer — ITU-R BS.1770-4 compliant gated loudness measurement.
3
+ * Ardour reference: libs/ardour/loudness_analyzer.cc
4
+ *
5
+ * Implements:
6
+ * 1. K-weighting filter (high shelf + high pass)
7
+ * 2. 400ms block mean square computation
8
+ * 3. Absolute gate at -70 LUFS
9
+ * 4. Relative gate at -10 dB below ungated mean
10
+ * 5. Integrated loudness from gated blocks
11
+ */
12
+ /**
13
+ * Pre-filter (high shelf ~+4 dB at ~1681 Hz) for K-weighting.
14
+ * ITU-R BS.1770-4 Table 1, Stage 1.
15
+ */
16
+ function highShelfCoeffs(sampleRate) {
17
+ const f0 = 1681.974450955533;
18
+ const G = 3.999843853973347;
19
+ const Q = 0.7071752369554196;
20
+ const K = Math.tan((Math.PI * f0) / sampleRate);
21
+ const Vh = Math.pow(10, G / 20);
22
+ const Vb = Math.pow(Vh, 0.4996667741545416);
23
+ const a0 = 1 + K / Q + K * K;
24
+ return {
25
+ b0: (Vh + Vb * K / Q + K * K) / a0,
26
+ b1: (2 * (K * K - Vh)) / a0,
27
+ b2: (Vh - Vb * K / Q + K * K) / a0,
28
+ a1: (2 * (K * K - 1)) / a0,
29
+ a2: (1 - K / Q + K * K) / a0,
30
+ };
31
+ }
32
+ /**
33
+ * High-pass filter (~38 Hz) for K-weighting.
34
+ * ITU-R BS.1770-4 Table 1, Stage 2.
35
+ */
36
+ function highPassCoeffs(sampleRate) {
37
+ const f0 = 38.13547087602444;
38
+ const Q = 0.5003270373238773;
39
+ const K = Math.tan((Math.PI * f0) / sampleRate);
40
+ const a0 = 1 + K / Q + K * K;
41
+ return {
42
+ b0: 1 / a0,
43
+ b1: -2 / a0,
44
+ b2: 1 / a0,
45
+ a1: (2 * (K * K - 1)) / a0,
46
+ a2: (1 - K / Q + K * K) / a0,
47
+ };
48
+ }
49
+ /**
50
+ * Apply a biquad filter to samples, returning a new array.
51
+ */
52
+ function applyBiquad(samples, coeffs) {
53
+ const out = new Float32Array(samples.length);
54
+ let x1 = 0, x2 = 0, y1 = 0, y2 = 0;
55
+ for (let i = 0; i < samples.length; i++) {
56
+ const x0 = samples[i];
57
+ const y0 = coeffs.b0 * x0 + coeffs.b1 * x1 + coeffs.b2 * x2
58
+ - coeffs.a1 * y1 - coeffs.a2 * y2;
59
+ out[i] = y0;
60
+ x2 = x1;
61
+ x1 = x0;
62
+ y2 = y1;
63
+ y1 = y0;
64
+ }
65
+ return out;
66
+ }
67
+ /**
68
+ * Channel weight per ITU-R BS.1770-4:
69
+ * L, R, C = 1.0; Ls, Rs (surround) = 1.41 (~+1.5 dB)
70
+ * LFE = 0 (excluded)
71
+ */
72
+ function getChannelWeight(channelIndex, totalChannels) {
73
+ if (totalChannels <= 2)
74
+ return 1.0;
75
+ // 5.1: L=0, R=1, C=2, LFE=3, Ls=4, Rs=5
76
+ if (totalChannels >= 6 && channelIndex === 3)
77
+ return 0; // LFE
78
+ if (totalChannels >= 6 && (channelIndex === 4 || channelIndex === 5))
79
+ return 1.41;
80
+ return 1.0;
81
+ }
82
+ /**
83
+ * Measure integrated LUFS of an AudioBuffer using the BS.1770-4 gated algorithm.
84
+ */
85
+ export function measureLUFS(buffer) {
86
+ const sampleRate = buffer.sampleRate;
87
+ const numChannels = buffer.numberOfChannels;
88
+ // 400ms block size
89
+ const blockSize = Math.round(sampleRate * 0.4);
90
+ // 75% overlap → step = 100ms
91
+ const stepSize = Math.round(sampleRate * 0.1);
92
+ // Pre-compute K-weighting filter coefficients
93
+ const shelf = highShelfCoeffs(sampleRate);
94
+ const hp = highPassCoeffs(sampleRate);
95
+ // K-weight all channels
96
+ const kWeighted = [];
97
+ for (let ch = 0; ch < numChannels; ch++) {
98
+ const raw = buffer.getChannelData(ch);
99
+ const stage1 = applyBiquad(raw, shelf);
100
+ const stage2 = applyBiquad(stage1, hp);
101
+ kWeighted.push(stage2);
102
+ }
103
+ // Compute mean square per block, per channel, then sum with channel weights
104
+ const blockLoudnesses = [];
105
+ const numBlocks = Math.floor((buffer.length - blockSize) / stepSize) + 1;
106
+ for (let b = 0; b < numBlocks; b++) {
107
+ const start = b * stepSize;
108
+ const end = start + blockSize;
109
+ if (end > buffer.length)
110
+ break;
111
+ let sumWeightedMeanSquare = 0;
112
+ for (let ch = 0; ch < numChannels; ch++) {
113
+ const weight = getChannelWeight(ch, numChannels);
114
+ if (weight === 0)
115
+ continue;
116
+ const data = kWeighted[ch];
117
+ let sumSq = 0;
118
+ for (let i = start; i < end; i++) {
119
+ sumSq += data[i] * data[i];
120
+ }
121
+ sumWeightedMeanSquare += weight * (sumSq / blockSize);
122
+ }
123
+ // LUFS for this block
124
+ const blockLufs = sumWeightedMeanSquare > 0
125
+ ? -0.691 + 10 * Math.log10(sumWeightedMeanSquare)
126
+ : -Infinity;
127
+ blockLoudnesses.push(blockLufs);
128
+ }
129
+ // === Gated measurement ===
130
+ // Step 1: Absolute gate at -70 LUFS
131
+ const ABSOLUTE_GATE = -70;
132
+ const aboveAbsoluteGate = blockLoudnesses.filter(l => l > ABSOLUTE_GATE);
133
+ if (aboveAbsoluteGate.length === 0) {
134
+ return { integrated: -Infinity, shortTerm: [], momentary: blockLoudnesses, truePeaks: [], range: 0 };
135
+ }
136
+ // Step 2: Compute mean of blocks above absolute gate
137
+ const ungatedMeanPower = aboveAbsoluteGate.reduce((sum, l) => {
138
+ return sum + Math.pow(10, l / 10);
139
+ }, 0) / aboveAbsoluteGate.length;
140
+ const ungatedMeanLufs = -0.691 + 10 * Math.log10(ungatedMeanPower);
141
+ // Step 3: Relative gate at -10 dB below ungated mean
142
+ const relativeGate = ungatedMeanLufs - 10;
143
+ // Step 4: Compute mean of blocks above both gates
144
+ const aboveBothGates = blockLoudnesses.filter(l => l > ABSOLUTE_GATE && l > relativeGate);
145
+ let integrated = -Infinity;
146
+ if (aboveBothGates.length > 0) {
147
+ const gatedMeanPower = aboveBothGates.reduce((sum, l) => {
148
+ return sum + Math.pow(10, l / 10);
149
+ }, 0) / aboveBothGates.length;
150
+ integrated = -0.691 + 10 * Math.log10(gatedMeanPower);
151
+ }
152
+ // Short-term loudness (3s window)
153
+ const shortTermBlockSize = Math.round(sampleRate * 3);
154
+ const shortTermStep = Math.round(sampleRate * 1);
155
+ const shortTerm = [];
156
+ for (let start = 0; start + shortTermBlockSize <= buffer.length; start += shortTermStep) {
157
+ let sumWeightedMS = 0;
158
+ for (let ch = 0; ch < numChannels; ch++) {
159
+ const weight = getChannelWeight(ch, numChannels);
160
+ if (weight === 0)
161
+ continue;
162
+ const data = kWeighted[ch];
163
+ let sumSq = 0;
164
+ for (let i = start; i < start + shortTermBlockSize; i++) {
165
+ sumSq += data[i] * data[i];
166
+ }
167
+ sumWeightedMS += weight * (sumSq / shortTermBlockSize);
168
+ }
169
+ shortTerm.push(sumWeightedMS > 0 ? -0.691 + 10 * Math.log10(sumWeightedMS) : -Infinity);
170
+ }
171
+ // True peak detection (simple — for full spec, 4x oversample in TruePeakLimiter)
172
+ const truePeaks = [];
173
+ for (let ch = 0; ch < numChannels; ch++) {
174
+ const data = buffer.getChannelData(ch);
175
+ let peak = 0;
176
+ for (let i = 0; i < data.length; i++) {
177
+ const abs = Math.abs(data[i]);
178
+ if (abs > peak)
179
+ peak = abs;
180
+ }
181
+ truePeaks.push(peak > 0 ? 20 * Math.log10(peak) : -Infinity);
182
+ }
183
+ // LRA (Loudness Range) — simplified: difference between 10th and 95th percentile of short-term
184
+ let range = 0;
185
+ const validShortTerm = shortTerm.filter(l => l > ABSOLUTE_GATE && l > relativeGate).sort((a, b) => a - b);
186
+ if (validShortTerm.length >= 2) {
187
+ const p10 = validShortTerm[Math.floor(validShortTerm.length * 0.1)];
188
+ const p95 = validShortTerm[Math.floor(validShortTerm.length * 0.95)];
189
+ range = p95 - p10;
190
+ }
191
+ return { integrated, shortTerm, momentary: blockLoudnesses, truePeaks, range };
192
+ }
193
+ /**
194
+ * Normalize an AudioBuffer to a target LUFS level.
195
+ * Modifies the buffer in-place.
196
+ *
197
+ * @param buffer Audio buffer to normalize
198
+ * @param targetLufs Target integrated loudness (default: -14 LUFS)
199
+ * @returns The gain applied in dB, or 0 if silence
200
+ */
201
+ export function normalizeLUFS(buffer, targetLufs = -14) {
202
+ const result = measureLUFS(buffer);
203
+ if (result.integrated === -Infinity || !isFinite(result.integrated)) {
204
+ return 0; // silence — no gain to apply
205
+ }
206
+ const gainDb = targetLufs - result.integrated;
207
+ const gainLinear = Math.pow(10, gainDb / 20);
208
+ // Apply gain to all channels
209
+ for (let ch = 0; ch < buffer.numberOfChannels; ch++) {
210
+ const data = buffer.getChannelData(ch);
211
+ for (let i = 0; i < data.length; i++) {
212
+ data[i] *= gainLinear;
213
+ }
214
+ }
215
+ return gainDb;
216
+ }
217
+ //# sourceMappingURL=LufsNormalizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LufsNormalizer.js","sourceRoot":"","sources":["../../src/audio/LufsNormalizer.ts"],"names":[],"mappings":"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"}
@@ -19,13 +19,8 @@ export declare class OfflineExporter {
19
19
  /**
20
20
  * Normalize audio buffer using peak normalization.
21
21
  *
22
- * NOTE: Despite previously being labeled as "LUFS", this method performs simple
23
- * peak normalization (not ITU-R BS.1770 loudness measurement). The target value
24
- * is interpreted as a peak level in dBFS, not as an integrated loudness value.
25
- * True LUFS normalization would require K-weighted filtering and gated measurement.
26
- *
27
22
  * @param buffer Audio data (modified in-place)
28
- * @param targetPeakDb Target peak level in dBFS (default: -14 dBFS)
23
+ * @param targetPeakDb Target peak level in dBFS (default: -1 dBFS)
29
24
  */
30
25
  private static normalizeBuffer;
31
26
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"OfflineExporter.d.ts","sourceRoot":"","sources":["../../src/audio/OfflineExporter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAkB,MAAM,wBAAwB,CAAC;AAOtE;;;;;GAKG;AACH,qBAAa,eAAe;IACxB;;;;;;OAMG;WACiB,MAAM,CACtB,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,YAAY,EACpB,aAAa,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,KAAK,OAAO,CAAC,WAAW,CAAC,GAC3G,OAAO,CAAC,IAAI,CAAC;IAyEhB;;;;;;;;;;OAUG;mBACkB,eAAe;IA0BpC;;OAEG;mBACkB,YAAY;IAkBjC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,SAAS;IA0CxB;;;OAGG;WACiB,WAAW,CAC3B,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,YAAY,EACpB,QAAQ,EAAE,OAAO,EAAE,EACnB,UAAU,EAAE,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,EAChC,aAAa,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,KAAK,OAAO,CAAC,WAAW,CAAC,GACtG,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE;QAAE,IAAI,EAAE,IAAI,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAqD7D"}
1
+ {"version":3,"file":"OfflineExporter.d.ts","sourceRoot":"","sources":["../../src/audio/OfflineExporter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAgB,MAAM,wBAAwB,CAAC;AACpE,OAAO,EAAE,YAAY,EAAkB,MAAM,wBAAwB,CAAC;AAStE;;;;;GAKG;AACH,qBAAa,eAAe;IACxB;;;;;;OAMG;WACiB,MAAM,CACtB,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,YAAY,EACpB,aAAa,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,KAAK,OAAO,CAAC,WAAW,CAAC,GAC3G,OAAO,CAAC,IAAI,CAAC;IAyFhB;;;;;OAKG;mBACkB,eAAe;IA0BpC;;OAEG;mBACkB,YAAY;IAkBjC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,SAAS;IA0CxB;;;OAGG;WACiB,WAAW,CAC3B,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,YAAY,EACpB,QAAQ,EAAE,OAAO,EAAE,EACnB,UAAU,EAAE,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,EAChC,aAAa,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,KAAK,OAAO,CAAC,WAAW,CAAC,GACtG,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE;QAAE,IAAI,EAAE,IAAI,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CA8D7D"}
@@ -3,6 +3,8 @@ import { AudioBufferToWav } from '../utils/AudioBufferToWav';
3
3
  import { OggEncoder } from '../utils/OggEncoder';
4
4
  import { FlacEncoder } from '../utils/FlacEncoder';
5
5
  import { DitherProcessor, DitherType } from '../utils/DitherProcessor';
6
+ import { normalizeLUFS } from './LufsNormalizer';
7
+ import { applyTruePeakLimiter } from '../processing/TruePeakLimiter';
6
8
  import * as lamejs from 'lamejs';
7
9
  /**
8
10
  * Offline Audio Exporter
@@ -42,7 +44,22 @@ export class OfflineExporter {
42
44
  // Normalize Phase (if enabled)
43
45
  if (config.normalize) {
44
46
  status.setProgress(ExportProgress.NORMALIZING);
45
- await this.normalizeBuffer(renderedBuffer, config.targetPeakDb);
47
+ if (config.normalizeMode === 'lufs') {
48
+ // LUFS normalization (ITU-R BS.1770-4)
49
+ const gainDb = normalizeLUFS(renderedBuffer, config.targetLufs);
50
+ console.log(`[OfflineExporter] LUFS normalization applied: ${gainDb.toFixed(2)} dB gain`);
51
+ }
52
+ else {
53
+ // Peak normalization (legacy)
54
+ await this.normalizeBuffer(renderedBuffer, config.targetPeakDb);
55
+ }
56
+ }
57
+ // True Peak Limiter (after normalization, before encoding)
58
+ if (config.truePeakLimit) {
59
+ const limited = applyTruePeakLimiter(renderedBuffer, config.truePeakCeiling);
60
+ if (limited) {
61
+ console.log(`[OfflineExporter] True peak limiter applied (ceiling: ${config.truePeakCeiling} dBTP)`);
62
+ }
46
63
  }
47
64
  // Dithering Phase (before encoding, when reducing bit depth)
48
65
  if (config.ditherType !== DitherType.NONE) {
@@ -72,16 +89,11 @@ export class OfflineExporter {
72
89
  /**
73
90
  * Normalize audio buffer using peak normalization.
74
91
  *
75
- * NOTE: Despite previously being labeled as "LUFS", this method performs simple
76
- * peak normalization (not ITU-R BS.1770 loudness measurement). The target value
77
- * is interpreted as a peak level in dBFS, not as an integrated loudness value.
78
- * True LUFS normalization would require K-weighted filtering and gated measurement.
79
- *
80
92
  * @param buffer Audio data (modified in-place)
81
- * @param targetPeakDb Target peak level in dBFS (default: -14 dBFS)
93
+ * @param targetPeakDb Target peak level in dBFS (default: -1 dBFS)
82
94
  */
83
95
  static async normalizeBuffer(buffer, targetPeakDb) {
84
- const target = targetPeakDb !== null && targetPeakDb !== void 0 ? targetPeakDb : -14; // Default to -14 dBFS
96
+ const target = targetPeakDb !== null && targetPeakDb !== void 0 ? targetPeakDb : -1;
85
97
  let maxPeak = 0;
86
98
  for (let ch = 0; ch < buffer.numberOfChannels; ch++) {
87
99
  const data = buffer.getChannelData(ch);
@@ -113,7 +125,7 @@ export class OfflineExporter {
113
125
  case 'mp3':
114
126
  return this.encodeMP3(buffer, config);
115
127
  case 'ogg':
116
- return OggEncoder.encode(buffer, (_a = config.quality) !== null && _a !== void 0 ? _a : 0.5);
128
+ return await OggEncoder.encode(buffer, (_a = config.quality) !== null && _a !== void 0 ? _a : 0.5);
117
129
  case 'flac':
118
130
  return FlacEncoder.encode(buffer, config.sampleFormat === 'int24' ? 24 : 16);
119
131
  default:
@@ -180,7 +192,16 @@ export class OfflineExporter {
180
192
  const renderedBuffer = await getTrackAudio([trackId], config.startFrame, config.endFrame);
181
193
  // Normalize if enabled
182
194
  if (config.normalize) {
183
- await this.normalizeBuffer(renderedBuffer, config.targetPeakDb);
195
+ if (config.normalizeMode === 'lufs') {
196
+ normalizeLUFS(renderedBuffer, config.targetLufs);
197
+ }
198
+ else {
199
+ await this.normalizeBuffer(renderedBuffer, config.targetPeakDb);
200
+ }
201
+ }
202
+ // True Peak Limiter
203
+ if (config.truePeakLimit) {
204
+ applyTruePeakLimiter(renderedBuffer, config.truePeakCeiling);
184
205
  }
185
206
  // Encode
186
207
  const blob = await this.encodeToBlob(renderedBuffer, config);
@@ -1 +1 @@
1
- {"version":3,"file":"OfflineExporter.js","sourceRoot":"","sources":["../../src/audio/OfflineExporter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"OfflineExporter.js","sourceRoot":"","sources":["../../src/audio/OfflineExporter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,134 @@
1
+ import { Session } from '../domain/Session';
2
+ import { Signal } from '../lib/Signal';
3
+ /**
4
+ * A directed connection between two nodes in the routing graph.
5
+ */
6
+ export interface GraphEdge {
7
+ /** Source track / bus ID. */
8
+ sourceId: string;
9
+ /** Target track / bus ID. */
10
+ targetId: string;
11
+ /** Output port name on the source. */
12
+ sourcePort: string;
13
+ /** Input port name on the target. */
14
+ targetPort: string;
15
+ /** Connection type. */
16
+ type: 'audio' | 'midi' | 'sidechain';
17
+ }
18
+ /**
19
+ * A node in the routing graph, representing a track, bus, aux, master,
20
+ * or send point in the signal chain.
21
+ */
22
+ export interface GraphNode {
23
+ id: string;
24
+ name: string;
25
+ type: 'track' | 'bus' | 'aux' | 'master' | 'send';
26
+ /** Total processing latency (in samples) introduced by this node. */
27
+ latency: number;
28
+ }
29
+ /**
30
+ * RoutingGraph provides high-level routing analysis for a DAW session.
31
+ *
32
+ * It models the signal flow as a directed graph where nodes are tracks /
33
+ * buses and edges are audio / MIDI / sidechain connections. The class
34
+ * exposes Ardour-inspired query methods (`feeds`, `signalSources`,
35
+ * `signalDestinations`) as well as topological sorting, cycle detection,
36
+ * and automatic latency compensation.
37
+ */
38
+ export declare class RoutingGraph {
39
+ private _nodes;
40
+ private _edges;
41
+ readonly graphChanged: Signal<void>;
42
+ /**
43
+ * Populate the graph from a live Session by inspecting its tracks,
44
+ * send buses, and master bus.
45
+ *
46
+ * All existing nodes / edges are cleared first.
47
+ */
48
+ buildFromSession(session: Session): void;
49
+ getNode(id: string): GraphNode | undefined;
50
+ getNodes(): GraphNode[];
51
+ getEdges(): GraphEdge[];
52
+ getEdgesFrom(nodeId: string): GraphEdge[];
53
+ getEdgesTo(nodeId: string): GraphEdge[];
54
+ addNode(node: GraphNode): void;
55
+ removeNode(id: string): void;
56
+ addEdge(edge: GraphEdge): void;
57
+ removeEdge(sourceId: string, targetId: string): void;
58
+ /**
59
+ * Does `sourceId` feed into `targetId` through any path?
60
+ * Uses BFS from source looking for target.
61
+ */
62
+ feeds(sourceId: string, targetId: string): boolean;
63
+ /**
64
+ * Is there a direct (single-hop) connection from source to target?
65
+ */
66
+ directFeeds(sourceId: string, targetId: string): boolean;
67
+ /**
68
+ * All upstream nodes that eventually feed into `nodeId`.
69
+ */
70
+ signalSources(nodeId: string): string[];
71
+ /**
72
+ * All downstream nodes that `nodeId` eventually feeds into.
73
+ */
74
+ signalDestinations(nodeId: string): string[];
75
+ /**
76
+ * Return node IDs in a valid processing order using Kahn's algorithm
77
+ * (topological sort). Sources are processed before their consumers.
78
+ *
79
+ * @throws {Error} If the graph contains a cycle.
80
+ */
81
+ getProcessingOrder(): string[];
82
+ /**
83
+ * Detect whether the graph contains any cycles using iterative DFS with
84
+ * a three-color marking scheme.
85
+ */
86
+ hasCycle(): boolean;
87
+ /**
88
+ * Compute total latency along the shortest signal path from `sourceId`
89
+ * to `targetId` by summing node latencies. Uses BFS to find the path.
90
+ *
91
+ * Returns -1 if no path exists.
92
+ */
93
+ getLatencyForPath(sourceId: string, targetId: string): number;
94
+ /**
95
+ * Compute the maximum latency across any path from a source node to
96
+ * the master (or any terminal node). This is the worst-case latency
97
+ * that must be compensated for.
98
+ */
99
+ getMaxLatency(): number;
100
+ /**
101
+ * Compute the per-node compensation delay so that all signal paths
102
+ * arrive time-aligned at the master / terminal nodes.
103
+ *
104
+ * For each node, the compensation delay is:
105
+ * maxPathLatency - pathLatencyThroughThisNode
106
+ *
107
+ * where `maxPathLatency` is the longest cumulative latency path in the
108
+ * entire graph.
109
+ */
110
+ computeCompensationDelays(): Map<string, number>;
111
+ /**
112
+ * Assign depth levels to each node for visualization (e.g. source
113
+ * tracks at level 0, buses at level 1, master at level 2).
114
+ *
115
+ * Uses BFS from source nodes (zero in-degree).
116
+ */
117
+ getLevels(): Map<string, number>;
118
+ /**
119
+ * Export the graph as a plain JSON structure for persistence or
120
+ * visualization.
121
+ */
122
+ toJSON(): {
123
+ nodes: GraphNode[];
124
+ edges: GraphEdge[];
125
+ };
126
+ /**
127
+ * Restore a RoutingGraph from a JSON snapshot.
128
+ */
129
+ static fromJSON(data: {
130
+ nodes: GraphNode[];
131
+ edges: GraphEdge[];
132
+ }): RoutingGraph;
133
+ }
134
+ //# sourceMappingURL=RoutingGraph.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RoutingGraph.d.ts","sourceRoot":"","sources":["../../src/audio/RoutingGraph.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAE5C,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAIvC;;GAEG;AACH,MAAM,WAAW,SAAS;IACtB,6BAA6B;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,6BAA6B;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,sCAAsC;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,qCAAqC;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,uBAAuB;IACvB,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,WAAW,CAAC;CACxC;AAED;;;GAGG;AACH,MAAM,WAAW,SAAS;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,GAAG,KAAK,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IAClD,qEAAqE;IACrE,OAAO,EAAE,MAAM,CAAC;CACnB;AAID;;;;;;;;GAQG;AACH,qBAAa,YAAY;IACrB,OAAO,CAAC,MAAM,CAAqC;IACnD,OAAO,CAAC,MAAM,CAAmB;IAEjC,SAAgB,YAAY,eAAsB;IAIlD;;;;;OAKG;IACH,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IA4FxC,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS;IAI1C,QAAQ,IAAI,SAAS,EAAE;IAIvB,QAAQ,IAAI,SAAS,EAAE;IAIvB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE;IAIzC,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE;IAMvC,OAAO,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI;IAK9B,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAQ5B,OAAO,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI;IAK9B,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IASpD;;;OAGG;IACH,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO;IAqBlD;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO;IAMxD;;OAEG;IACH,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE;IAgBvC;;OAEG;IACH,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE;IAkB5C;;;;;OAKG;IACH,kBAAkB,IAAI,MAAM,EAAE;IAsD9B;;;OAGG;IACH,QAAQ,IAAI,OAAO;IAsDnB;;;;;OAKG;IACH,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IA6C7D;;;;OAIG;IACH,aAAa,IAAI,MAAM;IA+DvB;;;;;;;;;OASG;IACH,yBAAyB,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IA4EhD;;;;;OAKG;IACH,SAAS,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IA6ChC;;;OAGG;IACH,MAAM,IAAI;QAAE,KAAK,EAAE,SAAS,EAAE,CAAC;QAAC,KAAK,EAAE,SAAS,EAAE,CAAA;KAAE;IAOpD;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,SAAS,EAAE,CAAC;QAAC,KAAK,EAAE,SAAS,EAAE,CAAA;KAAE,GAAG,YAAY;CAQlF"}