@drop-ai/core 0.2.0 → 0.3.1

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 (513) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +734 -316
  3. package/dist/actions/ActionRegistry.d.ts.map +1 -1
  4. package/dist/actions/ActionRegistry.js +7 -2
  5. package/dist/actions/ActionRegistry.js.map +1 -1
  6. package/dist/actions/types.d.ts +7 -1
  7. package/dist/actions/types.d.ts.map +1 -1
  8. package/dist/analysis/AudioAnalyzer.d.ts +69 -0
  9. package/dist/analysis/AudioAnalyzer.d.ts.map +1 -0
  10. package/dist/analysis/AudioAnalyzer.js +567 -0
  11. package/dist/analysis/AudioAnalyzer.js.map +1 -0
  12. package/dist/audio/AudioEngine.d.ts +14 -1
  13. package/dist/audio/AudioEngine.d.ts.map +1 -1
  14. package/dist/audio/AudioEngine.js +115 -35
  15. package/dist/audio/AudioEngine.js.map +1 -1
  16. package/dist/audio/Auditioner.d.ts +102 -0
  17. package/dist/audio/Auditioner.d.ts.map +1 -0
  18. package/dist/audio/Auditioner.js +237 -0
  19. package/dist/audio/Auditioner.js.map +1 -0
  20. package/dist/audio/BWFMetadata.d.ts +114 -0
  21. package/dist/audio/BWFMetadata.d.ts.map +1 -0
  22. package/dist/audio/BWFMetadata.js +392 -0
  23. package/dist/audio/BWFMetadata.js.map +1 -0
  24. package/dist/audio/BufferPool.d.ts +0 -3
  25. package/dist/audio/BufferPool.d.ts.map +1 -1
  26. package/dist/audio/BufferPool.js +0 -3
  27. package/dist/audio/BufferPool.js.map +1 -1
  28. package/dist/audio/ChannelSplitter.d.ts +36 -0
  29. package/dist/audio/ChannelSplitter.d.ts.map +1 -0
  30. package/dist/audio/ChannelSplitter.js +81 -0
  31. package/dist/audio/ChannelSplitter.js.map +1 -0
  32. package/dist/audio/ExportAnalyzer.d.ts +38 -0
  33. package/dist/audio/ExportAnalyzer.d.ts.map +1 -0
  34. package/dist/audio/ExportAnalyzer.js +75 -0
  35. package/dist/audio/ExportAnalyzer.js.map +1 -0
  36. package/dist/audio/LufsNormalizer.d.ts +36 -0
  37. package/dist/audio/LufsNormalizer.d.ts.map +1 -0
  38. package/dist/audio/LufsNormalizer.js +216 -0
  39. package/dist/audio/LufsNormalizer.js.map +1 -0
  40. package/dist/audio/MeterUtils.d.ts +0 -2
  41. package/dist/audio/MeterUtils.d.ts.map +1 -1
  42. package/dist/audio/MeterUtils.js +0 -2
  43. package/dist/audio/MeterUtils.js.map +1 -1
  44. package/dist/audio/OfflineExporter.d.ts +1 -7
  45. package/dist/audio/OfflineExporter.d.ts.map +1 -1
  46. package/dist/audio/OfflineExporter.js +31 -11
  47. package/dist/audio/OfflineExporter.js.map +1 -1
  48. package/dist/audio/ProcessingGraph.d.ts +0 -1
  49. package/dist/audio/ProcessingGraph.d.ts.map +1 -1
  50. package/dist/audio/ProcessingGraph.js +0 -1
  51. package/dist/audio/ProcessingGraph.js.map +1 -1
  52. package/dist/audio/RoutingGraph.d.ts +134 -0
  53. package/dist/audio/RoutingGraph.d.ts.map +1 -0
  54. package/dist/audio/RoutingGraph.js +547 -0
  55. package/dist/audio/RoutingGraph.js.map +1 -0
  56. package/dist/audio/SampleRateConverter.d.ts +20 -0
  57. package/dist/audio/SampleRateConverter.d.ts.map +1 -0
  58. package/dist/audio/SampleRateConverter.js +83 -0
  59. package/dist/audio/SampleRateConverter.js.map +1 -0
  60. package/dist/audio/SilencePadding.d.ts +27 -0
  61. package/dist/audio/SilencePadding.d.ts.map +1 -0
  62. package/dist/audio/SilencePadding.js +84 -0
  63. package/dist/audio/SilencePadding.js.map +1 -0
  64. package/dist/audio/SourceCache.d.ts +13 -19
  65. package/dist/audio/SourceCache.d.ts.map +1 -1
  66. package/dist/audio/SourceCache.js +21 -36
  67. package/dist/audio/SourceCache.js.map +1 -1
  68. package/dist/audio/engine/Declick.d.ts +97 -0
  69. package/dist/audio/engine/Declick.d.ts.map +1 -0
  70. package/dist/audio/engine/Declick.js +203 -0
  71. package/dist/audio/engine/Declick.js.map +1 -0
  72. package/dist/audio/engine/DiskIO.d.ts +170 -0
  73. package/dist/audio/engine/DiskIO.d.ts.map +1 -0
  74. package/dist/audio/engine/DiskIO.js +382 -0
  75. package/dist/audio/engine/DiskIO.js.map +1 -0
  76. package/dist/audio/engine/LatencyCompensator.d.ts +46 -0
  77. package/dist/audio/engine/LatencyCompensator.d.ts.map +1 -0
  78. package/dist/audio/engine/LatencyCompensator.js +84 -0
  79. package/dist/audio/engine/LatencyCompensator.js.map +1 -0
  80. package/dist/audio/engine/MultiTrackRecorder.d.ts +144 -0
  81. package/dist/audio/engine/MultiTrackRecorder.d.ts.map +1 -0
  82. package/dist/audio/engine/MultiTrackRecorder.js +359 -0
  83. package/dist/audio/engine/MultiTrackRecorder.js.map +1 -0
  84. package/dist/audio/engine/PlaylistEngine.d.ts +1 -1
  85. package/dist/audio/engine/PlaylistEngine.d.ts.map +1 -1
  86. package/dist/audio/engine/PlaylistEngine.js +10 -3
  87. package/dist/audio/engine/PlaylistEngine.js.map +1 -1
  88. package/dist/audio/engine/PunchRecordManager.d.ts +111 -0
  89. package/dist/audio/engine/PunchRecordManager.d.ts.map +1 -0
  90. package/dist/audio/engine/PunchRecordManager.js +191 -0
  91. package/dist/audio/engine/PunchRecordManager.js.map +1 -0
  92. package/dist/audio/engine/RoutingGraph.d.ts +133 -0
  93. package/dist/audio/engine/RoutingGraph.d.ts.map +1 -0
  94. package/dist/audio/engine/RoutingGraph.js +436 -0
  95. package/dist/audio/engine/RoutingGraph.js.map +1 -0
  96. package/dist/audio/engine/SidechainRouter.d.ts +137 -0
  97. package/dist/audio/engine/SidechainRouter.d.ts.map +1 -0
  98. package/dist/audio/engine/SidechainRouter.js +290 -0
  99. package/dist/audio/engine/SidechainRouter.js.map +1 -0
  100. package/dist/audio/engine/XrunTracker.d.ts +71 -0
  101. package/dist/audio/engine/XrunTracker.d.ts.map +1 -0
  102. package/dist/audio/engine/XrunTracker.js +118 -0
  103. package/dist/audio/engine/XrunTracker.js.map +1 -0
  104. package/dist/audio/export/CDMarkerExporter.d.ts +60 -0
  105. package/dist/audio/export/CDMarkerExporter.d.ts.map +1 -0
  106. package/dist/audio/export/CDMarkerExporter.js +162 -0
  107. package/dist/audio/export/CDMarkerExporter.js.map +1 -0
  108. package/dist/audio/export/ExportGraphBuilder.d.ts +119 -0
  109. package/dist/audio/export/ExportGraphBuilder.d.ts.map +1 -0
  110. package/dist/audio/export/ExportGraphBuilder.js +520 -0
  111. package/dist/audio/export/ExportGraphBuilder.js.map +1 -0
  112. package/dist/audio/export/ExportPresetManager.d.ts +85 -0
  113. package/dist/audio/export/ExportPresetManager.d.ts.map +1 -0
  114. package/dist/audio/export/ExportPresetManager.js +304 -0
  115. package/dist/audio/export/ExportPresetManager.js.map +1 -0
  116. package/dist/automation/AutomationList.d.ts +0 -1
  117. package/dist/automation/AutomationList.d.ts.map +1 -1
  118. package/dist/automation/AutomationList.js +0 -1
  119. package/dist/automation/AutomationList.js.map +1 -1
  120. package/dist/automation/AutomationMode.d.ts +0 -1
  121. package/dist/automation/AutomationMode.d.ts.map +1 -1
  122. package/dist/automation/AutomationMode.js +0 -1
  123. package/dist/automation/AutomationMode.js.map +1 -1
  124. package/dist/commands/CommandHistory.d.ts +1 -4
  125. package/dist/commands/CommandHistory.d.ts.map +1 -1
  126. package/dist/commands/CommandHistory.js +6 -9
  127. package/dist/commands/CommandHistory.js.map +1 -1
  128. package/dist/commands/CommandRegistry.d.ts +1 -2
  129. package/dist/commands/CommandRegistry.d.ts.map +1 -1
  130. package/dist/commands/CommandRegistry.js +1 -2
  131. package/dist/commands/CommandRegistry.js.map +1 -1
  132. package/dist/commands/UndoTransaction.d.ts +0 -2
  133. package/dist/commands/UndoTransaction.d.ts.map +1 -1
  134. package/dist/commands/UndoTransaction.js +1 -3
  135. package/dist/commands/UndoTransaction.js.map +1 -1
  136. package/dist/commands/handlers/HistoryHandler.d.ts +5 -5
  137. package/dist/commands/handlers/HistoryHandler.js +10 -10
  138. package/dist/commands/handlers/HistoryHandler.js.map +1 -1
  139. package/dist/commands/handlers/MarkerHandler.d.ts +0 -1
  140. package/dist/commands/handlers/MarkerHandler.d.ts.map +1 -1
  141. package/dist/commands/handlers/MarkerHandler.js +0 -1
  142. package/dist/commands/handlers/MarkerHandler.js.map +1 -1
  143. package/dist/commands/handlers/RegionHandler.d.ts.map +1 -1
  144. package/dist/commands/handlers/RegionHandler.js +25 -1
  145. package/dist/commands/handlers/RegionHandler.js.map +1 -1
  146. package/dist/commands/handlers/TrackHandler.js +1 -1
  147. package/dist/commands/handlers/TrackHandler.js.map +1 -1
  148. package/dist/commands/impl/CopyRegionCommand.d.ts +0 -1
  149. package/dist/commands/impl/CopyRegionCommand.d.ts.map +1 -1
  150. package/dist/commands/impl/CopyRegionCommand.js +0 -1
  151. package/dist/commands/impl/CopyRegionCommand.js.map +1 -1
  152. package/dist/commands/impl/DuplicateRegionCommand.d.ts +0 -1
  153. package/dist/commands/impl/DuplicateRegionCommand.d.ts.map +1 -1
  154. package/dist/commands/impl/DuplicateRegionCommand.js +0 -1
  155. package/dist/commands/impl/DuplicateRegionCommand.js.map +1 -1
  156. package/dist/commands/impl/ExportCommand.d.ts +0 -1
  157. package/dist/commands/impl/ExportCommand.d.ts.map +1 -1
  158. package/dist/commands/impl/ExportCommand.js +0 -1
  159. package/dist/commands/impl/ExportCommand.js.map +1 -1
  160. package/dist/commands/impl/FreezeTrackCommand.d.ts +1 -1
  161. package/dist/commands/impl/FreezeTrackCommand.d.ts.map +1 -1
  162. package/dist/commands/impl/FreezeTrackCommand.js +38 -37
  163. package/dist/commands/impl/FreezeTrackCommand.js.map +1 -1
  164. package/dist/commands/impl/PasteRegionCommand.d.ts +0 -1
  165. package/dist/commands/impl/PasteRegionCommand.d.ts.map +1 -1
  166. package/dist/commands/impl/PasteRegionCommand.js +0 -1
  167. package/dist/commands/impl/PasteRegionCommand.js.map +1 -1
  168. package/dist/commands/impl/SaveSnapshotCommand.d.ts +1 -1
  169. package/dist/commands/impl/SaveSnapshotCommand.js +1 -1
  170. package/dist/commands/impl/SetLoopRangeCommand.d.ts +0 -1
  171. package/dist/commands/impl/SetLoopRangeCommand.d.ts.map +1 -1
  172. package/dist/commands/impl/SetLoopRangeCommand.js +0 -1
  173. package/dist/commands/impl/SetLoopRangeCommand.js.map +1 -1
  174. package/dist/commands/impl/SetPunchRangeCommand.d.ts +0 -1
  175. package/dist/commands/impl/SetPunchRangeCommand.d.ts.map +1 -1
  176. package/dist/commands/impl/SetPunchRangeCommand.js +0 -1
  177. package/dist/commands/impl/SetPunchRangeCommand.js.map +1 -1
  178. package/dist/commands/impl/SetRegionTimeDomainCommand.d.ts.map +1 -1
  179. package/dist/commands/impl/SetRegionTimeDomainCommand.js +3 -3
  180. package/dist/commands/impl/SetRegionTimeDomainCommand.js.map +1 -1
  181. package/dist/commands/impl/SplitAtPlayheadCommand.d.ts +0 -2
  182. package/dist/commands/impl/SplitAtPlayheadCommand.d.ts.map +1 -1
  183. package/dist/commands/impl/SplitAtPlayheadCommand.js +0 -2
  184. package/dist/commands/impl/SplitAtPlayheadCommand.js.map +1 -1
  185. package/dist/commands/impl/SplitRegionCommand.d.ts +0 -1
  186. package/dist/commands/impl/SplitRegionCommand.d.ts.map +1 -1
  187. package/dist/commands/impl/SplitRegionCommand.js +0 -1
  188. package/dist/commands/impl/SplitRegionCommand.js.map +1 -1
  189. package/dist/commands/impl/StripSilenceCommand.d.ts +0 -1
  190. package/dist/commands/impl/StripSilenceCommand.d.ts.map +1 -1
  191. package/dist/commands/impl/StripSilenceCommand.js +0 -1
  192. package/dist/commands/impl/StripSilenceCommand.js.map +1 -1
  193. package/dist/commands/impl/TimeStretchRegionCommand.d.ts +1 -2
  194. package/dist/commands/impl/TimeStretchRegionCommand.d.ts.map +1 -1
  195. package/dist/commands/impl/TimeStretchRegionCommand.js +1 -2
  196. package/dist/commands/impl/TimeStretchRegionCommand.js.map +1 -1
  197. package/dist/commands/impl/ToggleLoopCommand.d.ts +1 -0
  198. package/dist/commands/impl/ToggleLoopCommand.d.ts.map +1 -1
  199. package/dist/commands/impl/ToggleLoopCommand.js +10 -0
  200. package/dist/commands/impl/ToggleLoopCommand.js.map +1 -1
  201. package/dist/commands/impl/TrimRegionCommand.d.ts +14 -1
  202. package/dist/commands/impl/TrimRegionCommand.d.ts.map +1 -1
  203. package/dist/commands/impl/TrimRegionCommand.js +138 -33
  204. package/dist/commands/impl/TrimRegionCommand.js.map +1 -1
  205. package/dist/commands/impl/TrimRegionToPlayheadCommand.d.ts +26 -0
  206. package/dist/commands/impl/TrimRegionToPlayheadCommand.d.ts.map +1 -0
  207. package/dist/commands/impl/TrimRegionToPlayheadCommand.js +68 -0
  208. package/dist/commands/impl/TrimRegionToPlayheadCommand.js.map +1 -0
  209. package/dist/commands/impl/TrimRegionToRangeCommand.d.ts +27 -0
  210. package/dist/commands/impl/TrimRegionToRangeCommand.d.ts.map +1 -0
  211. package/dist/commands/impl/TrimRegionToRangeCommand.js +68 -0
  212. package/dist/commands/impl/TrimRegionToRangeCommand.js.map +1 -0
  213. package/dist/commands/impl/TrimToAdjacentRegionCommand.d.ts +26 -0
  214. package/dist/commands/impl/TrimToAdjacentRegionCommand.d.ts.map +1 -0
  215. package/dist/commands/impl/TrimToAdjacentRegionCommand.js +76 -0
  216. package/dist/commands/impl/TrimToAdjacentRegionCommand.js.map +1 -0
  217. package/dist/commands/types.d.ts +19 -0
  218. package/dist/commands/types.d.ts.map +1 -1
  219. package/dist/commands/types.js +21 -0
  220. package/dist/commands/types.js.map +1 -1
  221. package/dist/domain/ABComparison.d.ts +0 -1
  222. package/dist/domain/ABComparison.d.ts.map +1 -1
  223. package/dist/domain/ABComparison.js +0 -1
  224. package/dist/domain/ABComparison.js.map +1 -1
  225. package/dist/domain/CDMarker.d.ts +0 -1
  226. package/dist/domain/CDMarker.d.ts.map +1 -1
  227. package/dist/domain/CDMarker.js +0 -1
  228. package/dist/domain/CDMarker.js.map +1 -1
  229. package/dist/domain/ClockMode.d.ts +0 -1
  230. package/dist/domain/ClockMode.d.ts.map +1 -1
  231. package/dist/domain/ClockMode.js +0 -1
  232. package/dist/domain/ClockMode.js.map +1 -1
  233. package/dist/domain/Crossfade.d.ts +78 -0
  234. package/dist/domain/Crossfade.d.ts.map +1 -0
  235. package/dist/domain/Crossfade.js +216 -0
  236. package/dist/domain/Crossfade.js.map +1 -0
  237. package/dist/domain/DragManager.d.ts +0 -2
  238. package/dist/domain/DragManager.d.ts.map +1 -1
  239. package/dist/domain/DragManager.js +0 -2
  240. package/dist/domain/DragManager.js.map +1 -1
  241. package/dist/domain/EditMode.d.ts +0 -1
  242. package/dist/domain/EditMode.d.ts.map +1 -1
  243. package/dist/domain/EditMode.js +0 -1
  244. package/dist/domain/EditMode.js.map +1 -1
  245. package/dist/domain/ExportConfig.d.ts +98 -2
  246. package/dist/domain/ExportConfig.d.ts.map +1 -1
  247. package/dist/domain/ExportConfig.js +154 -2
  248. package/dist/domain/ExportConfig.js.map +1 -1
  249. package/dist/domain/ExportPreset.d.ts +60 -0
  250. package/dist/domain/ExportPreset.d.ts.map +1 -0
  251. package/dist/domain/ExportPreset.js +77 -0
  252. package/dist/domain/ExportPreset.js.map +1 -0
  253. package/dist/domain/ExportStatus.d.ts +0 -1
  254. package/dist/domain/ExportStatus.d.ts.map +1 -1
  255. package/dist/domain/ExportStatus.js +0 -1
  256. package/dist/domain/ExportStatus.js.map +1 -1
  257. package/dist/domain/GridSettings.d.ts +0 -3
  258. package/dist/domain/GridSettings.d.ts.map +1 -1
  259. package/dist/domain/GridSettings.js +0 -3
  260. package/dist/domain/GridSettings.js.map +1 -1
  261. package/dist/domain/ImportStatus.d.ts +40 -0
  262. package/dist/domain/ImportStatus.d.ts.map +1 -0
  263. package/dist/domain/ImportStatus.js +86 -0
  264. package/dist/domain/ImportStatus.js.map +1 -0
  265. package/dist/domain/Marker.d.ts +0 -1
  266. package/dist/domain/Marker.d.ts.map +1 -1
  267. package/dist/domain/Marker.js +0 -1
  268. package/dist/domain/Marker.js.map +1 -1
  269. package/dist/domain/MeterData.d.ts +0 -2
  270. package/dist/domain/MeterData.d.ts.map +1 -1
  271. package/dist/domain/MeterType.d.ts +0 -2
  272. package/dist/domain/MeterType.d.ts.map +1 -1
  273. package/dist/domain/MeterType.js +0 -2
  274. package/dist/domain/MeterType.js.map +1 -1
  275. package/dist/domain/MonitorMode.d.ts +0 -1
  276. package/dist/domain/MonitorMode.d.ts.map +1 -1
  277. package/dist/domain/MonitorMode.js +0 -1
  278. package/dist/domain/MonitorMode.js.map +1 -1
  279. package/dist/domain/MouseMode.d.ts +0 -1
  280. package/dist/domain/MouseMode.d.ts.map +1 -1
  281. package/dist/domain/MouseMode.js +0 -1
  282. package/dist/domain/MouseMode.js.map +1 -1
  283. package/dist/domain/OverlapType.d.ts +0 -2
  284. package/dist/domain/OverlapType.d.ts.map +1 -1
  285. package/dist/domain/OverlapType.js +0 -2
  286. package/dist/domain/OverlapType.js.map +1 -1
  287. package/dist/domain/Playlist.d.ts +72 -0
  288. package/dist/domain/Playlist.d.ts.map +1 -1
  289. package/dist/domain/Playlist.js +231 -6
  290. package/dist/domain/Playlist.js.map +1 -1
  291. package/dist/domain/Range.d.ts +0 -1
  292. package/dist/domain/Range.d.ts.map +1 -1
  293. package/dist/domain/Range.js +0 -1
  294. package/dist/domain/Range.js.map +1 -1
  295. package/dist/domain/RecordMode.d.ts +0 -1
  296. package/dist/domain/RecordMode.d.ts.map +1 -1
  297. package/dist/domain/RecordMode.js +0 -1
  298. package/dist/domain/RecordMode.js.map +1 -1
  299. package/dist/domain/Region.d.ts +76 -0
  300. package/dist/domain/Region.d.ts.map +1 -1
  301. package/dist/domain/Region.js +234 -1
  302. package/dist/domain/Region.js.map +1 -1
  303. package/dist/domain/RegionClipboard.d.ts +1 -3
  304. package/dist/domain/RegionClipboard.d.ts.map +1 -1
  305. package/dist/domain/RegionClipboard.js +1 -2
  306. package/dist/domain/RegionClipboard.js.map +1 -1
  307. package/dist/domain/Route.d.ts +43 -3
  308. package/dist/domain/Route.d.ts.map +1 -1
  309. package/dist/domain/Route.js +92 -6
  310. package/dist/domain/Route.js.map +1 -1
  311. package/dist/domain/RulerType.d.ts +0 -1
  312. package/dist/domain/RulerType.d.ts.map +1 -1
  313. package/dist/domain/RulerType.js +0 -1
  314. package/dist/domain/RulerType.js.map +1 -1
  315. package/dist/domain/SelectionHistory.d.ts +0 -3
  316. package/dist/domain/SelectionHistory.d.ts.map +1 -1
  317. package/dist/domain/SelectionHistory.js +0 -3
  318. package/dist/domain/SelectionHistory.js.map +1 -1
  319. package/dist/domain/SendBus.d.ts +0 -1
  320. package/dist/domain/SendBus.d.ts.map +1 -1
  321. package/dist/domain/SendBus.js +0 -1
  322. package/dist/domain/SendBus.js.map +1 -1
  323. package/dist/domain/Session.d.ts +31 -0
  324. package/dist/domain/Session.d.ts.map +1 -1
  325. package/dist/domain/Session.js +70 -0
  326. package/dist/domain/Session.js.map +1 -1
  327. package/dist/domain/SidechainConfig.d.ts +0 -1
  328. package/dist/domain/SidechainConfig.d.ts.map +1 -1
  329. package/dist/domain/SidechainConfig.js +0 -1
  330. package/dist/domain/SidechainConfig.js.map +1 -1
  331. package/dist/domain/Source.d.ts +145 -1
  332. package/dist/domain/Source.d.ts.map +1 -1
  333. package/dist/domain/Source.js +144 -1
  334. package/dist/domain/Source.js.map +1 -1
  335. package/dist/domain/Take.d.ts +0 -1
  336. package/dist/domain/Take.d.ts.map +1 -1
  337. package/dist/domain/Take.js +0 -1
  338. package/dist/domain/Take.js.map +1 -1
  339. package/dist/domain/ThawList.d.ts +36 -0
  340. package/dist/domain/ThawList.d.ts.map +1 -0
  341. package/dist/domain/ThawList.js +72 -0
  342. package/dist/domain/ThawList.js.map +1 -0
  343. package/dist/domain/Track.d.ts +93 -1
  344. package/dist/domain/Track.d.ts.map +1 -1
  345. package/dist/domain/Track.js +136 -0
  346. package/dist/domain/Track.js.map +1 -1
  347. package/dist/domain/TrackGroup.d.ts +0 -1
  348. package/dist/domain/TrackGroup.d.ts.map +1 -1
  349. package/dist/domain/TrackGroup.js +0 -1
  350. package/dist/domain/TrackGroup.js.map +1 -1
  351. package/dist/domain/TransportFSM.d.ts +0 -1
  352. package/dist/domain/TransportFSM.d.ts.map +1 -1
  353. package/dist/domain/TransportFSM.js +0 -1
  354. package/dist/domain/TransportFSM.js.map +1 -1
  355. package/dist/domain/TransportMode.d.ts +0 -1
  356. package/dist/domain/TransportMode.d.ts.map +1 -1
  357. package/dist/domain/TransportMode.js +0 -1
  358. package/dist/domain/TransportMode.js.map +1 -1
  359. package/dist/domain/TriggerBox.d.ts +121 -0
  360. package/dist/domain/TriggerBox.d.ts.map +1 -0
  361. package/dist/domain/TriggerBox.js +428 -0
  362. package/dist/domain/TriggerBox.js.map +1 -0
  363. package/dist/domain/VCATrack.d.ts +63 -2
  364. package/dist/domain/VCATrack.d.ts.map +1 -1
  365. package/dist/domain/VCATrack.js +127 -2
  366. package/dist/domain/VCATrack.js.map +1 -1
  367. package/dist/domain/VideoExportConfig.d.ts +116 -0
  368. package/dist/domain/VideoExportConfig.d.ts.map +1 -0
  369. package/dist/domain/VideoExportConfig.js +243 -0
  370. package/dist/domain/VideoExportConfig.js.map +1 -0
  371. package/dist/domain/VideoExportStatus.d.ts +89 -0
  372. package/dist/domain/VideoExportStatus.d.ts.map +1 -0
  373. package/dist/domain/VideoExportStatus.js +192 -0
  374. package/dist/domain/VideoExportStatus.js.map +1 -0
  375. package/dist/domain/VideoMetadata.d.ts +46 -0
  376. package/dist/domain/VideoMetadata.d.ts.map +1 -0
  377. package/dist/domain/VideoMetadata.js +2 -0
  378. package/dist/domain/VideoMetadata.js.map +1 -0
  379. package/dist/domain/ZoomFocus.d.ts +0 -1
  380. package/dist/domain/ZoomFocus.d.ts.map +1 -1
  381. package/dist/domain/ZoomFocus.js +0 -1
  382. package/dist/domain/ZoomFocus.js.map +1 -1
  383. package/dist/domain/index.d.ts +5 -0
  384. package/dist/domain/index.d.ts.map +1 -1
  385. package/dist/domain/index.js +5 -0
  386. package/dist/domain/index.js.map +1 -1
  387. package/dist/domain/temporal/TempoMap.d.ts +198 -2
  388. package/dist/domain/temporal/TempoMap.d.ts.map +1 -1
  389. package/dist/domain/temporal/TempoMap.js +464 -30
  390. package/dist/domain/temporal/TempoMap.js.map +1 -1
  391. package/dist/domain/temporal/types.d.ts +1 -1
  392. package/dist/domain/temporal/types.d.ts.map +1 -1
  393. package/dist/domain/temporal/types.js +1 -1
  394. package/dist/domain/temporal/types.js.map +1 -1
  395. package/dist/index.d.ts +43 -1
  396. package/dist/index.d.ts.map +1 -1
  397. package/dist/index.js +32 -1
  398. package/dist/index.js.map +1 -1
  399. package/dist/lib/Signal.d.ts +1 -1
  400. package/dist/lib/ThawList.d.ts +98 -0
  401. package/dist/lib/ThawList.d.ts.map +1 -0
  402. package/dist/lib/ThawList.js +151 -0
  403. package/dist/lib/ThawList.js.map +1 -0
  404. package/dist/midi/MidiFileParser.d.ts +32 -0
  405. package/dist/midi/MidiFileParser.d.ts.map +1 -0
  406. package/dist/midi/MidiFileParser.js +245 -0
  407. package/dist/midi/MidiFileParser.js.map +1 -0
  408. package/dist/midi/MidiFileWriter.d.ts +30 -0
  409. package/dist/midi/MidiFileWriter.d.ts.map +1 -0
  410. package/dist/midi/MidiFileWriter.js +159 -0
  411. package/dist/midi/MidiFileWriter.js.map +1 -0
  412. package/dist/midi/MidiImporter.d.ts +37 -0
  413. package/dist/midi/MidiImporter.d.ts.map +1 -0
  414. package/dist/midi/MidiImporter.js +62 -0
  415. package/dist/midi/MidiImporter.js.map +1 -0
  416. package/dist/plugins/PluginManager.js +2 -2
  417. package/dist/plugins/PluginManager.js.map +1 -1
  418. package/dist/plugins/PluginPresetManager.d.ts +86 -0
  419. package/dist/plugins/PluginPresetManager.d.ts.map +1 -0
  420. package/dist/plugins/PluginPresetManager.js +140 -0
  421. package/dist/plugins/PluginPresetManager.js.map +1 -0
  422. package/dist/plugins/impl/ExpanderPlugin.d.ts +1 -1
  423. package/dist/plugins/impl/ExpanderPlugin.js +1 -1
  424. package/dist/plugins/impl/ParametricEQPlugin.d.ts +1 -1
  425. package/dist/plugins/impl/ParametricEQPlugin.js +1 -1
  426. package/dist/processing/IO.d.ts +15 -1
  427. package/dist/processing/IO.d.ts.map +1 -1
  428. package/dist/processing/IO.js +29 -1
  429. package/dist/processing/IO.js.map +1 -1
  430. package/dist/processing/InternalSend.d.ts +102 -0
  431. package/dist/processing/InternalSend.d.ts.map +1 -0
  432. package/dist/processing/InternalSend.js +175 -0
  433. package/dist/processing/InternalSend.js.map +1 -0
  434. package/dist/processing/MeterDSP.d.ts +165 -0
  435. package/dist/processing/MeterDSP.d.ts.map +1 -0
  436. package/dist/processing/MeterDSP.js +753 -0
  437. package/dist/processing/MeterDSP.js.map +1 -0
  438. package/dist/processing/MeterProcessor.d.ts +0 -1
  439. package/dist/processing/MeterProcessor.d.ts.map +1 -1
  440. package/dist/processing/MeterProcessor.js +0 -1
  441. package/dist/processing/MeterProcessor.js.map +1 -1
  442. package/dist/processing/Panner.d.ts +144 -0
  443. package/dist/processing/Panner.d.ts.map +1 -0
  444. package/dist/processing/Panner.js +280 -0
  445. package/dist/processing/Panner.js.map +1 -0
  446. package/dist/processing/PluginInsert.d.ts +56 -1
  447. package/dist/processing/PluginInsert.d.ts.map +1 -1
  448. package/dist/processing/PluginInsert.js +180 -2
  449. package/dist/processing/PluginInsert.js.map +1 -1
  450. package/dist/processing/PolarityProcessor.d.ts +1 -1
  451. package/dist/processing/PolarityProcessor.js +1 -1
  452. package/dist/processing/Processor.d.ts +38 -0
  453. package/dist/processing/Processor.d.ts.map +1 -1
  454. package/dist/processing/Processor.js +60 -1
  455. package/dist/processing/Processor.js.map +1 -1
  456. package/dist/processing/SendProcessor.d.ts +0 -1
  457. package/dist/processing/SendProcessor.d.ts.map +1 -1
  458. package/dist/processing/SendProcessor.js +0 -1
  459. package/dist/processing/SendProcessor.js.map +1 -1
  460. package/dist/processing/SurroundPanner.d.ts +120 -0
  461. package/dist/processing/SurroundPanner.d.ts.map +1 -0
  462. package/dist/processing/SurroundPanner.js +374 -0
  463. package/dist/processing/SurroundPanner.js.map +1 -0
  464. package/dist/processing/TruePeakLimiter.d.ts +32 -0
  465. package/dist/processing/TruePeakLimiter.d.ts.map +1 -0
  466. package/dist/processing/TruePeakLimiter.js +142 -0
  467. package/dist/processing/TruePeakLimiter.js.map +1 -0
  468. package/dist/storage/ExportPresetStorage.d.ts +33 -0
  469. package/dist/storage/ExportPresetStorage.d.ts.map +1 -0
  470. package/dist/storage/ExportPresetStorage.js +121 -0
  471. package/dist/storage/ExportPresetStorage.js.map +1 -0
  472. package/dist/storage/SessionArchive.d.ts +73 -0
  473. package/dist/storage/SessionArchive.d.ts.map +1 -0
  474. package/dist/storage/SessionArchive.js +211 -0
  475. package/dist/storage/SessionArchive.js.map +1 -0
  476. package/dist/storage/SessionStorage.d.ts +1 -1
  477. package/dist/storage/SessionTemplate.d.ts +74 -5
  478. package/dist/storage/SessionTemplate.d.ts.map +1 -1
  479. package/dist/storage/SessionTemplate.js +247 -53
  480. package/dist/storage/SessionTemplate.js.map +1 -1
  481. package/dist/utils/BwfMetadataWriter.d.ts +41 -0
  482. package/dist/utils/BwfMetadataWriter.d.ts.map +1 -0
  483. package/dist/utils/BwfMetadataWriter.js +130 -0
  484. package/dist/utils/BwfMetadataWriter.js.map +1 -0
  485. package/dist/utils/DitherProcessor.d.ts +0 -1
  486. package/dist/utils/DitherProcessor.d.ts.map +1 -1
  487. package/dist/utils/DitherProcessor.js +0 -1
  488. package/dist/utils/DitherProcessor.js.map +1 -1
  489. package/dist/utils/FilenameTemplate.d.ts +39 -0
  490. package/dist/utils/FilenameTemplate.d.ts.map +1 -0
  491. package/dist/utils/FilenameTemplate.js +77 -0
  492. package/dist/utils/FilenameTemplate.js.map +1 -0
  493. package/dist/utils/FlacEncoder.d.ts +0 -1
  494. package/dist/utils/FlacEncoder.d.ts.map +1 -1
  495. package/dist/utils/FlacEncoder.js +0 -1
  496. package/dist/utils/FlacEncoder.js.map +1 -1
  497. package/dist/utils/Logger.d.ts +28 -0
  498. package/dist/utils/Logger.d.ts.map +1 -0
  499. package/dist/utils/Logger.js +46 -0
  500. package/dist/utils/Logger.js.map +1 -0
  501. package/dist/utils/Mp4ChapterGenerator.d.ts +16 -0
  502. package/dist/utils/Mp4ChapterGenerator.d.ts.map +1 -0
  503. package/dist/utils/Mp4ChapterGenerator.js +32 -0
  504. package/dist/utils/Mp4ChapterGenerator.js.map +1 -0
  505. package/dist/utils/OggEncoder.d.ts +19 -21
  506. package/dist/utils/OggEncoder.d.ts.map +1 -1
  507. package/dist/utils/OggEncoder.js +113 -51
  508. package/dist/utils/OggEncoder.js.map +1 -1
  509. package/dist/utils/TocGenerator.d.ts +16 -0
  510. package/dist/utils/TocGenerator.d.ts.map +1 -0
  511. package/dist/utils/TocGenerator.js +46 -0
  512. package/dist/utils/TocGenerator.js.map +1 -0
  513. package/package.json +7 -8
@@ -0,0 +1,111 @@
1
+ import { Signal } from '../../lib/Signal';
2
+ import { FrameCount, TrackId } from '../../domain/types';
3
+ /**
4
+ * PunchRecordManager handles automatic punch-in/punch-out recording.
5
+ *
6
+ * When punch is enabled:
7
+ * - Recording starts automatically when playhead enters the punch range
8
+ * - Recording stops automatically when playhead exits the punch range
9
+ * - Declick fades are applied at punch boundaries
10
+ * - Pre-roll audio before punch-in is discarded
11
+ *
12
+ * Modes:
13
+ * - Simple punch: single pass recording within the range
14
+ * - Loop punch: repeated punch recording when loop + punch are both enabled
15
+ */
16
+ export interface PunchState {
17
+ enabled: boolean;
18
+ punchIn: FrameCount;
19
+ punchOut: FrameCount;
20
+ isPunchedIn: boolean;
21
+ armedTrackIds: TrackId[];
22
+ }
23
+ export declare class PunchRecordManager {
24
+ private _enabled;
25
+ private _punchIn;
26
+ private _punchOut;
27
+ private _isPunchedIn;
28
+ private _armedTrackIds;
29
+ private _declickLength;
30
+ /** Emitted when the playhead enters the punch range and recording begins. */
31
+ readonly punchInTriggered: Signal<string[]>;
32
+ /** Emitted when the playhead exits the punch range and recording stops. */
33
+ readonly punchOutTriggered: Signal<string[]>;
34
+ /** Emitted whenever the punch state changes. */
35
+ readonly stateChanged: Signal<PunchState>;
36
+ /**
37
+ * @param sampleRate - Audio sample rate, used to compute declick fade length.
38
+ * Defaults to 44100 if omitted.
39
+ */
40
+ constructor(sampleRate?: number);
41
+ /**
42
+ * Configure the punch range boundaries.
43
+ * @param punchIn - Frame at which recording should begin
44
+ * @param punchOut - Frame at which recording should end
45
+ */
46
+ setPunchRange(punchIn: FrameCount, punchOut: FrameCount): void;
47
+ /**
48
+ * Enable or disable punch recording.
49
+ * Disabling while punched-in will trigger an immediate punch-out.
50
+ */
51
+ setEnabled(enabled: boolean): void;
52
+ /**
53
+ * Arm a track for punch recording.
54
+ * Only armed tracks will be affected by punch-in/punch-out events.
55
+ */
56
+ armTrack(trackId: TrackId): void;
57
+ /**
58
+ * Disarm a track from punch recording.
59
+ */
60
+ disarmTrack(trackId: TrackId): void;
61
+ /**
62
+ * Called each audio process cycle with the current transport position.
63
+ * Checks whether the playhead has crossed a punch boundary and triggers
64
+ * punch-in or punch-out accordingly.
65
+ *
66
+ * @param currentFrame - The current transport playhead position in frames
67
+ * @returns true if the recording state changed during this call
68
+ */
69
+ processPosition(currentFrame: FrameCount): boolean;
70
+ /**
71
+ * Get a snapshot of the current punch state.
72
+ */
73
+ getState(): PunchState;
74
+ /**
75
+ * Whether we're currently in the punched-in state (recording is active
76
+ * within the punch range).
77
+ */
78
+ get isPunchedIn(): boolean;
79
+ /**
80
+ * Compute declick fade gain at a given position relative to punch boundaries.
81
+ *
82
+ * Returns a gain value between 0.0 and 1.0:
83
+ * - Ramps from 0->1 over _declickLength frames starting at punchIn (fade-in)
84
+ * - Ramps from 1->0 over _declickLength frames ending at punchOut (fade-out)
85
+ * - Returns 1.0 for positions in the middle of the punch range
86
+ * - Returns 0.0 for positions outside the punch range
87
+ *
88
+ * Uses a raised-cosine (Hann) curve for perceptually smooth transitions,
89
+ * consistent with the Declicker class.
90
+ */
91
+ getDeclickGain(frame: FrameCount): number;
92
+ /**
93
+ * Reset state (called on transport stop).
94
+ * Clears the punched-in state without emitting punch-out signals,
95
+ * since transport stop implies recording has already ceased.
96
+ */
97
+ reset(): void;
98
+ /**
99
+ * Execute a punch-in: transition to recording state and notify listeners.
100
+ */
101
+ private _doPunchIn;
102
+ /**
103
+ * Execute a punch-out: transition out of recording state and notify listeners.
104
+ */
105
+ private _doPunchOut;
106
+ /**
107
+ * Emit a stateChanged signal with the current punch state snapshot.
108
+ */
109
+ private _emitStateChanged;
110
+ }
111
+ //# sourceMappingURL=PunchRecordManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PunchRecordManager.d.ts","sourceRoot":"","sources":["../../../src/audio/engine/PunchRecordManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAEzD;;;;;;;;;;;;GAYG;AAEH,MAAM,WAAW,UAAU;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,UAAU,CAAC;IACpB,QAAQ,EAAE,UAAU,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;IACrB,aAAa,EAAE,OAAO,EAAE,CAAC;CAC5B;AAED,qBAAa,kBAAkB;IAC3B,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,SAAS,CAAiB;IAClC,OAAO,CAAC,YAAY,CAAkB;IACtC,OAAO,CAAC,cAAc,CAA2B;IAGjD,OAAO,CAAC,cAAc,CAAc;IAEpC,6EAA6E;IAC7E,SAAgB,gBAAgB,mBAA2B;IAE3D,2EAA2E;IAC3E,SAAgB,iBAAiB,mBAA2B;IAE5D,gDAAgD;IAChD,SAAgB,YAAY,qBAA4B;IAExD;;;OAGG;gBACS,UAAU,CAAC,EAAE,MAAM;IAQ/B;;;;OAIG;IACH,aAAa,CAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,GAAG,IAAI;IAW9D;;;OAGG;IACH,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAclC;;;OAGG;IACH,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAKhC;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAOnC;;;;;;;OAOG;IACH,eAAe,CAAC,YAAY,EAAE,UAAU,GAAG,OAAO;IA6BlD;;OAEG;IACH,QAAQ,IAAI,UAAU;IAUtB;;;OAGG;IACH,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED;;;;;;;;;;;OAWG;IACH,cAAc,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM;IAgCzC;;;;OAIG;IACH,KAAK,IAAI,IAAI;IAOb;;OAEG;IACH,OAAO,CAAC,UAAU;IAOlB;;OAEG;IACH,OAAO,CAAC,WAAW;IAOnB;;OAEG;IACH,OAAO,CAAC,iBAAiB;CAG5B"}
@@ -0,0 +1,191 @@
1
+ import { Signal } from '../../lib/Signal';
2
+ export class PunchRecordManager {
3
+ /**
4
+ * @param sampleRate - Audio sample rate, used to compute declick fade length.
5
+ * Defaults to 44100 if omitted.
6
+ */
7
+ constructor(sampleRate) {
8
+ this._enabled = false;
9
+ this._punchIn = 0;
10
+ this._punchOut = 0;
11
+ this._isPunchedIn = false;
12
+ this._armedTrackIds = new Set();
13
+ // Declick fade length in frames (~1.5ms at 44100)
14
+ this._declickLength = 64;
15
+ /** Emitted when the playhead enters the punch range and recording begins. */
16
+ this.punchInTriggered = new Signal();
17
+ /** Emitted when the playhead exits the punch range and recording stops. */
18
+ this.punchOutTriggered = new Signal();
19
+ /** Emitted whenever the punch state changes. */
20
+ this.stateChanged = new Signal();
21
+ const rate = sampleRate !== null && sampleRate !== void 0 ? sampleRate : 44100;
22
+ // ~1.5ms declick fade, minimum 16 samples
23
+ this._declickLength = Math.max(16, Math.round((1.5 / 1000) * rate));
24
+ }
25
+ // ─── Configuration ──────────────────────────────────────────────────
26
+ /**
27
+ * Configure the punch range boundaries.
28
+ * @param punchIn - Frame at which recording should begin
29
+ * @param punchOut - Frame at which recording should end
30
+ */
31
+ setPunchRange(punchIn, punchOut) {
32
+ if (punchOut <= punchIn) {
33
+ throw new Error(`Invalid punch range: punchOut (${punchOut}) must be greater than punchIn (${punchIn})`);
34
+ }
35
+ this._punchIn = punchIn;
36
+ this._punchOut = punchOut;
37
+ this._emitStateChanged();
38
+ }
39
+ /**
40
+ * Enable or disable punch recording.
41
+ * Disabling while punched-in will trigger an immediate punch-out.
42
+ */
43
+ setEnabled(enabled) {
44
+ const wasEnabled = this._enabled;
45
+ this._enabled = enabled;
46
+ // If disabling while currently punched in, trigger punch-out
47
+ if (wasEnabled && !enabled && this._isPunchedIn) {
48
+ this._doPunchOut();
49
+ }
50
+ this._emitStateChanged();
51
+ }
52
+ // ─── Track Arming ───────────────────────────────────────────────────
53
+ /**
54
+ * Arm a track for punch recording.
55
+ * Only armed tracks will be affected by punch-in/punch-out events.
56
+ */
57
+ armTrack(trackId) {
58
+ this._armedTrackIds.add(trackId);
59
+ this._emitStateChanged();
60
+ }
61
+ /**
62
+ * Disarm a track from punch recording.
63
+ */
64
+ disarmTrack(trackId) {
65
+ this._armedTrackIds.delete(trackId);
66
+ this._emitStateChanged();
67
+ }
68
+ // ─── Processing ─────────────────────────────────────────────────────
69
+ /**
70
+ * Called each audio process cycle with the current transport position.
71
+ * Checks whether the playhead has crossed a punch boundary and triggers
72
+ * punch-in or punch-out accordingly.
73
+ *
74
+ * @param currentFrame - The current transport playhead position in frames
75
+ * @returns true if the recording state changed during this call
76
+ */
77
+ processPosition(currentFrame) {
78
+ if (!this._enabled) {
79
+ return false;
80
+ }
81
+ if (this._armedTrackIds.size === 0) {
82
+ return false;
83
+ }
84
+ const wasInRange = this._isPunchedIn;
85
+ const isInRange = currentFrame >= this._punchIn && currentFrame < this._punchOut;
86
+ if (!wasInRange && isInRange) {
87
+ // Playhead just entered the punch range -> punch in
88
+ this._doPunchIn();
89
+ return true;
90
+ }
91
+ if (wasInRange && !isInRange) {
92
+ // Playhead just exited the punch range -> punch out
93
+ this._doPunchOut();
94
+ return true;
95
+ }
96
+ return false;
97
+ }
98
+ // ─── State Queries ──────────────────────────────────────────────────
99
+ /**
100
+ * Get a snapshot of the current punch state.
101
+ */
102
+ getState() {
103
+ return {
104
+ enabled: this._enabled,
105
+ punchIn: this._punchIn,
106
+ punchOut: this._punchOut,
107
+ isPunchedIn: this._isPunchedIn,
108
+ armedTrackIds: Array.from(this._armedTrackIds),
109
+ };
110
+ }
111
+ /**
112
+ * Whether we're currently in the punched-in state (recording is active
113
+ * within the punch range).
114
+ */
115
+ get isPunchedIn() {
116
+ return this._isPunchedIn;
117
+ }
118
+ /**
119
+ * Compute declick fade gain at a given position relative to punch boundaries.
120
+ *
121
+ * Returns a gain value between 0.0 and 1.0:
122
+ * - Ramps from 0->1 over _declickLength frames starting at punchIn (fade-in)
123
+ * - Ramps from 1->0 over _declickLength frames ending at punchOut (fade-out)
124
+ * - Returns 1.0 for positions in the middle of the punch range
125
+ * - Returns 0.0 for positions outside the punch range
126
+ *
127
+ * Uses a raised-cosine (Hann) curve for perceptually smooth transitions,
128
+ * consistent with the Declicker class.
129
+ */
130
+ getDeclickGain(frame) {
131
+ if (!this._enabled) {
132
+ return 1.0;
133
+ }
134
+ // Outside punch range entirely
135
+ if (frame < this._punchIn || frame >= this._punchOut) {
136
+ return 0.0;
137
+ }
138
+ const fadeLen = this._declickLength;
139
+ // Fade-in region: punchIn to punchIn + fadeLen
140
+ const distFromStart = frame - this._punchIn;
141
+ if (distFromStart < fadeLen) {
142
+ // Raised cosine (Hann) fade-in: 0.5 * (1 - cos(pi * t))
143
+ const t = distFromStart / (fadeLen - 1);
144
+ return 0.5 * (1 - Math.cos(Math.PI * t));
145
+ }
146
+ // Fade-out region: punchOut - fadeLen to punchOut
147
+ const distFromEnd = this._punchOut - frame;
148
+ if (distFromEnd <= fadeLen) {
149
+ // Raised cosine (Hann) fade-out: 0.5 * (1 + cos(pi * t))
150
+ const t = (fadeLen - distFromEnd) / (fadeLen - 1);
151
+ return 0.5 * (1 + Math.cos(Math.PI * t));
152
+ }
153
+ // In the middle of the range — full gain
154
+ return 1.0;
155
+ }
156
+ /**
157
+ * Reset state (called on transport stop).
158
+ * Clears the punched-in state without emitting punch-out signals,
159
+ * since transport stop implies recording has already ceased.
160
+ */
161
+ reset() {
162
+ this._isPunchedIn = false;
163
+ this._emitStateChanged();
164
+ }
165
+ // ─── Private helpers ────────────────────────────────────────────────
166
+ /**
167
+ * Execute a punch-in: transition to recording state and notify listeners.
168
+ */
169
+ _doPunchIn() {
170
+ this._isPunchedIn = true;
171
+ const trackIds = Array.from(this._armedTrackIds);
172
+ this.punchInTriggered.emit(trackIds);
173
+ this._emitStateChanged();
174
+ }
175
+ /**
176
+ * Execute a punch-out: transition out of recording state and notify listeners.
177
+ */
178
+ _doPunchOut() {
179
+ this._isPunchedIn = false;
180
+ const trackIds = Array.from(this._armedTrackIds);
181
+ this.punchOutTriggered.emit(trackIds);
182
+ this._emitStateChanged();
183
+ }
184
+ /**
185
+ * Emit a stateChanged signal with the current punch state snapshot.
186
+ */
187
+ _emitStateChanged() {
188
+ this.stateChanged.emit(this.getState());
189
+ }
190
+ }
191
+ //# sourceMappingURL=PunchRecordManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PunchRecordManager.js","sourceRoot":"","sources":["../../../src/audio/engine/PunchRecordManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,133 @@
1
+ import { Signal } from '../../lib/Signal';
2
+ /**
3
+ * RoutingGraph represents the DAW's signal flow as a directed graph.
4
+ *
5
+ * Each node is a track/bus/aux route. Edges represent audio connections:
6
+ * - Direct outputs (track -> master bus)
7
+ * - Send connections (track -> aux bus)
8
+ * - Sidechain connections (track -> processor on another track)
9
+ *
10
+ * The graph is used to:
11
+ * 1. Compute topological processing order
12
+ * 2. Detect feedback loops
13
+ * 3. Determine which routes "feed" other routes
14
+ * 4. Optimize parallel processing opportunities
15
+ */
16
+ export interface GraphNode {
17
+ id: string;
18
+ name: string;
19
+ type: 'audio' | 'midi' | 'aux' | 'bus' | 'master' | 'folder' | 'vca';
20
+ inputs: Set<string>;
21
+ outputs: Set<string>;
22
+ processed: boolean;
23
+ depth: number;
24
+ }
25
+ export interface FeedbackLoop {
26
+ path: string[];
27
+ description: string;
28
+ }
29
+ export declare class RoutingGraph {
30
+ private _nodes;
31
+ readonly graphChanged: Signal<void>;
32
+ readonly feedbackDetected: Signal<FeedbackLoop>;
33
+ /**
34
+ * Add a node to the graph.
35
+ * If a node with the same ID already exists, it is updated in place.
36
+ */
37
+ addNode(id: string, name: string, type: GraphNode['type']): void;
38
+ /**
39
+ * Remove a node and all edges that reference it.
40
+ */
41
+ removeNode(id: string): void;
42
+ /**
43
+ * Add a directed edge from one node to another.
44
+ * Both nodes must already exist in the graph.
45
+ */
46
+ addEdge(fromId: string, toId: string): void;
47
+ /**
48
+ * Remove a directed edge between two nodes.
49
+ */
50
+ removeEdge(fromId: string, toId: string): void;
51
+ /**
52
+ * Rebuild the entire graph from session state.
53
+ * Clears all existing nodes/edges and reconstructs from the provided
54
+ * track descriptors. Typically called after bulk routing changes.
55
+ */
56
+ rebuild(tracks: Array<{
57
+ id: string;
58
+ name: string;
59
+ type: string;
60
+ sendTargets: string[];
61
+ outputTarget: string;
62
+ }>): void;
63
+ /**
64
+ * Compute a valid processing order using Kahn's algorithm for
65
+ * topological sorting. Leaf nodes (no inputs) are processed first,
66
+ * working upward to the master bus.
67
+ *
68
+ * If cycles exist, the returned order will be incomplete (nodes
69
+ * involved in cycles are omitted). Use detectFeedback() to identify
70
+ * those cycles.
71
+ *
72
+ * @returns An array of node IDs in processing order.
73
+ */
74
+ getProcessingOrder(): string[];
75
+ /**
76
+ * Detect all feedback loops (cycles) in the graph using DFS.
77
+ * Returns an array of FeedbackLoop descriptors, each containing the
78
+ * ordered path of node IDs that form the cycle.
79
+ */
80
+ detectFeedback(): FeedbackLoop[];
81
+ /**
82
+ * Check whether route A feeds (directly or indirectly) into route B.
83
+ * Uses BFS from A, following output edges, to determine reachability.
84
+ */
85
+ feeds(fromId: string, toId: string): boolean;
86
+ /**
87
+ * Check whether route A directly feeds into route B (single hop).
88
+ */
89
+ directFeeds(fromId: string, toId: string): boolean;
90
+ /**
91
+ * Get all routes that feed (directly or indirectly) into the given route.
92
+ * Traverses backward from the target, following input edges via BFS.
93
+ */
94
+ getUpstream(nodeId: string): string[];
95
+ /**
96
+ * Get all routes that the given route feeds (directly or indirectly) into.
97
+ * Traverses forward from the source, following output edges via BFS.
98
+ */
99
+ getDownstream(nodeId: string): string[];
100
+ /**
101
+ * Find groups of nodes that can be processed in parallel.
102
+ * Nodes at the same depth in the topological ordering have no
103
+ * dependencies on each other and can safely run concurrently.
104
+ *
105
+ * Uses a BFS-based level assignment: leaf nodes (in-degree 0) are
106
+ * at level 0, their consumers at level 1, and so on. Nodes at the
107
+ * same level form a parallel group.
108
+ *
109
+ * @returns An array of groups, where each group is an array of node IDs
110
+ * that can be processed simultaneously. Groups are returned in
111
+ * processing order (group 0 first, then group 1, etc.).
112
+ */
113
+ getParallelGroups(): string[][];
114
+ /**
115
+ * Get a single node by ID.
116
+ */
117
+ getNode(id: string): GraphNode | undefined;
118
+ /**
119
+ * Get all nodes as a read-only array.
120
+ */
121
+ get nodes(): ReadonlyArray<GraphNode>;
122
+ /**
123
+ * Clear all nodes and edges, resetting the graph to an empty state.
124
+ */
125
+ clear(): void;
126
+ /**
127
+ * Compute the depth of each node (longest path from any leaf to this node).
128
+ * Leaf nodes (no inputs) have depth 0. Used for parallel group assignment
129
+ * and rendering the graph visualization.
130
+ */
131
+ private _computeDepths;
132
+ }
133
+ //# sourceMappingURL=RoutingGraph.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RoutingGraph.d.ts","sourceRoot":"","sources":["../../../src/audio/engine/RoutingGraph.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAG1C;;;;;;;;;;;;;GAaG;AAEH,MAAM,WAAW,SAAS;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,GAAG,KAAK,CAAC;IACrE,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACpB,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IACzB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,YAAY;IACrB,OAAO,CAAC,MAAM,CAAqC;IAEnD,SAAgB,YAAY,eAAsB;IAClD,SAAgB,gBAAgB,uBAA8B;IAI9D;;;OAGG;IACH,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,CAAC,MAAM,CAAC,GAAG,IAAI;IAmBhE;;OAEG;IACH,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAoB5B;;;OAGG;IACH,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAU3C;;OAEG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAY9C;;;;OAIG;IACH,OAAO,CACH,MAAM,EAAE,KAAK,CAAC;QACV,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,EAAE,CAAC;QACtB,YAAY,EAAE,MAAM,CAAC;KACxB,CAAC,GACH,IAAI;IAkDP;;;;;;;;;;OAUG;IACH,kBAAkB,IAAI,MAAM,EAAE;IA0C9B;;;;OAIG;IACH,cAAc,IAAI,YAAY,EAAE;IA6DhC;;;OAGG;IACH,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO;IAyB5C;;OAEG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO;IAMlD;;;OAGG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE;IAyBrC;;;OAGG;IACH,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE;IA2BvC;;;;;;;;;;;;OAYG;IACH,iBAAiB,IAAI,MAAM,EAAE,EAAE;IAqE/B;;OAEG;IACH,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS;IAI1C;;OAEG;IACH,IAAI,KAAK,IAAI,aAAa,CAAC,SAAS,CAAC,CAEpC;IAED;;OAEG;IACH,KAAK,IAAI,IAAI;IAOb;;;;OAIG;IACH,OAAO,CAAC,cAAc;CAoBzB"}