@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,290 @@
1
+ import { Signal } from '../../lib/Signal';
2
+ /**
3
+ * SidechainRouter manages the actual audio signal routing for sidechain connections.
4
+ *
5
+ * In the Web Audio context, sidechain routing works by:
6
+ * 1. Tapping the source track's audio output (pre or post fader)
7
+ * 2. Optionally applying a high-pass filter
8
+ * 3. Feeding it into the target processor's sidechain input
9
+ *
10
+ * The router maintains a buffer-per-config that holds the latest audio block
11
+ * from the source track, available for the target processor to read.
12
+ */
13
+ export class SidechainRouter {
14
+ /**
15
+ * @param sampleRate - The audio sample rate (e.g. 44100, 48000)
16
+ */
17
+ constructor(sampleRate = 44100) {
18
+ this._configs = new Map();
19
+ /** Buffer storage: configId -> latest audio block from source */
20
+ this._sidechainBuffers = new Map();
21
+ /** HPF filter state per config (one state per channel, keyed by configId) */
22
+ this._filterStates = new Map();
23
+ this.routingChanged = new Signal();
24
+ this._sampleRate = sampleRate;
25
+ }
26
+ // ─── Configuration Management ──────────────────────────────────────────────
27
+ /**
28
+ * Register a sidechain configuration.
29
+ * Initialises the buffer and filter state for the new config.
30
+ */
31
+ addConfig(config) {
32
+ this._configs.set(config.id, config);
33
+ // Initialise an empty buffer
34
+ this._sidechainBuffers.set(config.id, {
35
+ data: [],
36
+ blockSize: 0,
37
+ valid: false,
38
+ });
39
+ // Initialise filter states (start with 2 channels; will resize as needed)
40
+ this._rebuildFilterState(config);
41
+ // Listen for filter parameter changes so we can recompute coefficients
42
+ config.filterChanged.connect(() => {
43
+ this._rebuildFilterState(config);
44
+ });
45
+ this.routingChanged.emit();
46
+ }
47
+ /**
48
+ * Remove a sidechain configuration and clean up its resources.
49
+ */
50
+ removeConfig(configId) {
51
+ if (!this._configs.has(configId)) {
52
+ return;
53
+ }
54
+ this._configs.delete(configId);
55
+ this._sidechainBuffers.delete(configId);
56
+ this._filterStates.delete(configId);
57
+ this.routingChanged.emit();
58
+ }
59
+ /**
60
+ * Get config by ID.
61
+ */
62
+ getConfig(configId) {
63
+ return this._configs.get(configId);
64
+ }
65
+ /**
66
+ * Get all configs targeting a specific track.
67
+ */
68
+ getConfigsForTarget(trackId) {
69
+ const result = [];
70
+ for (const config of this._configs.values()) {
71
+ if (config.targetTrackId === trackId) {
72
+ result.push(config);
73
+ }
74
+ }
75
+ return result;
76
+ }
77
+ /**
78
+ * Get all configs sourcing from a specific track.
79
+ */
80
+ getConfigsForSource(trackId) {
81
+ const result = [];
82
+ for (const config of this._configs.values()) {
83
+ if (config.sourceTrackId === trackId) {
84
+ result.push(config);
85
+ }
86
+ }
87
+ return result;
88
+ }
89
+ // ─── Audio Routing ─────────────────────────────────────────────────────────
90
+ /**
91
+ * Called by the audio engine when a source track produces audio.
92
+ * Stores the audio block for later retrieval by target processors.
93
+ *
94
+ * For every config that sources from the given trackId, we copy the
95
+ * audio data into the config's sidechain buffer.
96
+ *
97
+ * @param trackId - The source track that just produced audio
98
+ * @param audioData - Per-channel audio data (e.g. [leftChannel, rightChannel])
99
+ * @param blockSize - Number of samples per channel in this block
100
+ */
101
+ feedSourceAudio(trackId, audioData, blockSize) {
102
+ for (const config of this._configs.values()) {
103
+ if (config.sourceTrackId !== trackId || !config.enabled) {
104
+ continue;
105
+ }
106
+ const numChannels = audioData.length;
107
+ let buffer = this._sidechainBuffers.get(config.id);
108
+ // Allocate or resize the buffer if needed
109
+ if (!buffer ||
110
+ buffer.data.length !== numChannels ||
111
+ buffer.blockSize !== blockSize) {
112
+ buffer = {
113
+ data: new Array(numChannels)
114
+ .fill(null)
115
+ .map(() => new Float32Array(blockSize)),
116
+ blockSize,
117
+ valid: false,
118
+ };
119
+ this._sidechainBuffers.set(config.id, buffer);
120
+ }
121
+ // Copy source audio into the sidechain buffer
122
+ for (let ch = 0; ch < numChannels; ch++) {
123
+ buffer.data[ch].set(audioData[ch].subarray(0, blockSize));
124
+ }
125
+ buffer.valid = true;
126
+ }
127
+ }
128
+ /**
129
+ * Called by the target processor to get the sidechain input.
130
+ * Returns the latest audio block from the source track (with optional HPF applied),
131
+ * or null if no valid data is available.
132
+ *
133
+ * @param configId - The sidechain configuration ID
134
+ * @returns Per-channel audio data, or null if unavailable
135
+ */
136
+ getSidechainInput(configId) {
137
+ const config = this._configs.get(configId);
138
+ if (!config || !config.enabled) {
139
+ return null;
140
+ }
141
+ const buffer = this._sidechainBuffers.get(configId);
142
+ if (!buffer || !buffer.valid || buffer.data.length === 0) {
143
+ return null;
144
+ }
145
+ // If HPF is enabled, apply it to a copy of the buffer
146
+ if (config.sidechainFilterEnabled) {
147
+ return this._applyHPF(configId, buffer.data);
148
+ }
149
+ // Return copies so the caller can't mutate our internal buffers
150
+ return buffer.data.map((ch) => new Float32Array(ch));
151
+ }
152
+ // ─── HPF (High-Pass Filter) ────────────────────────────────────────────────
153
+ /**
154
+ * Apply a 2nd-order Butterworth high-pass filter to the sidechain signal.
155
+ * Processes in-place on copies of the input channels.
156
+ *
157
+ * The Butterworth HPF transfer function is implemented as a Direct Form I
158
+ * biquad filter: y[n] = b0*x[n] + b1*x[n-1] + b2*x[n-2] - a1*y[n-1] - a2*y[n-2]
159
+ */
160
+ _applyHPF(configId, inputChannels) {
161
+ const numChannels = inputChannels.length;
162
+ let states = this._filterStates.get(configId);
163
+ // Ensure we have a filter state per channel
164
+ if (!states || states.length !== numChannels) {
165
+ const config = this._configs.get(configId);
166
+ if (!config) {
167
+ return inputChannels.map((ch) => new Float32Array(ch));
168
+ }
169
+ states = new Array(numChannels)
170
+ .fill(null)
171
+ .map(() => computeHPFCoefficients(config.sidechainFilterFrequency, this._sampleRate));
172
+ this._filterStates.set(configId, states);
173
+ }
174
+ const output = [];
175
+ for (let ch = 0; ch < numChannels; ch++) {
176
+ const input = inputChannels[ch];
177
+ const out = new Float32Array(input.length);
178
+ const state = states[ch];
179
+ for (let i = 0; i < input.length; i++) {
180
+ const x = input[i];
181
+ // Direct Form I biquad
182
+ const y = state.b0 * x +
183
+ state.b1 * state.x1 +
184
+ state.b2 * state.x2 -
185
+ state.a1 * state.y1 -
186
+ state.a2 * state.y2;
187
+ // Shift delay line
188
+ state.x2 = state.x1;
189
+ state.x1 = x;
190
+ state.y2 = state.y1;
191
+ state.y1 = y;
192
+ out[i] = y;
193
+ }
194
+ output.push(out);
195
+ }
196
+ return output;
197
+ }
198
+ /**
199
+ * Rebuild the filter state for a given config.
200
+ * Called when the config is added or its filter parameters change.
201
+ */
202
+ _rebuildFilterState(config) {
203
+ const buffer = this._sidechainBuffers.get(config.id);
204
+ const numChannels = buffer ? Math.max(buffer.data.length, 2) : 2;
205
+ const states = new Array(numChannels)
206
+ .fill(null)
207
+ .map(() => computeHPFCoefficients(config.sidechainFilterFrequency, this._sampleRate));
208
+ this._filterStates.set(config.id, states);
209
+ }
210
+ // ─── Lifecycle ─────────────────────────────────────────────────────────────
211
+ /**
212
+ * Reset all buffers and filter states.
213
+ * Typically called when transport stops or seeks.
214
+ */
215
+ reset() {
216
+ for (const [configId, buffer] of this._sidechainBuffers.entries()) {
217
+ for (const ch of buffer.data) {
218
+ ch.fill(0);
219
+ }
220
+ buffer.valid = false;
221
+ // Reset filter delay lines while preserving coefficients
222
+ const states = this._filterStates.get(configId);
223
+ if (states) {
224
+ for (const state of states) {
225
+ state.x1 = 0;
226
+ state.x2 = 0;
227
+ state.y1 = 0;
228
+ state.y2 = 0;
229
+ }
230
+ }
231
+ }
232
+ }
233
+ /**
234
+ * Update the sample rate. Recomputes all HPF filter coefficients.
235
+ */
236
+ setSampleRate(sampleRate) {
237
+ this._sampleRate = sampleRate;
238
+ for (const config of this._configs.values()) {
239
+ this._rebuildFilterState(config);
240
+ }
241
+ }
242
+ }
243
+ // ─── Helper Functions ──────────────────────────────────────────────────────────
244
+ /**
245
+ * Compute the biquad filter coefficients for a 2nd-order Butterworth high-pass filter.
246
+ *
247
+ * Derivation from the analogue Butterworth prototype:
248
+ * H(s) = s^2 / (s^2 + sqrt(2)*s + 1)
249
+ *
250
+ * Bilinear transform with pre-warping:
251
+ * omega_c = 2 * pi * frequency / sampleRate
252
+ * K = tan(omega_c / 2)
253
+ * norm = 1 / (1 + sqrt(2)*K + K^2)
254
+ *
255
+ * b0 = norm
256
+ * b1 = -2 * norm
257
+ * b2 = norm
258
+ * a1 = 2 * (K^2 - 1) * norm
259
+ * a2 = (1 - sqrt(2)*K + K^2) * norm
260
+ *
261
+ * The returned state has zeroed delay lines, ready for immediate use.
262
+ *
263
+ * @param frequency - HPF cutoff frequency in Hz
264
+ * @param sampleRate - Audio sample rate in Hz
265
+ * @returns A BiquadFilterState with computed coefficients and zeroed state
266
+ */
267
+ export function computeHPFCoefficients(frequency, sampleRate) {
268
+ // Clamp frequency to a safe range: above 0 and below Nyquist
269
+ const nyquist = sampleRate / 2;
270
+ const freq = Math.max(1, Math.min(frequency, nyquist * 0.99));
271
+ const omega = (2 * Math.PI * freq) / sampleRate;
272
+ const K = Math.tan(omega / 2);
273
+ const K2 = K * K;
274
+ const sqrt2 = Math.SQRT2;
275
+ const norm = 1 / (1 + sqrt2 * K + K2);
276
+ return {
277
+ // Delay line state (zeroed)
278
+ x1: 0,
279
+ x2: 0,
280
+ y1: 0,
281
+ y2: 0,
282
+ // Coefficients
283
+ b0: norm,
284
+ b1: -2 * norm,
285
+ b2: norm,
286
+ a1: 2 * (K2 - 1) * norm,
287
+ a2: (1 - sqrt2 * K + K2) * norm,
288
+ };
289
+ }
290
+ //# sourceMappingURL=SidechainRouter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SidechainRouter.js","sourceRoot":"","sources":["../../../src/audio/engine/SidechainRouter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,71 @@
1
+ import { Signal } from '../../lib/Signal';
2
+ export interface XrunEvent {
3
+ timestamp: number;
4
+ frame: number;
5
+ type: 'underrun' | 'overrun';
6
+ duration?: number;
7
+ }
8
+ /**
9
+ * XrunTracker - Tracks buffer underrun/overrun events during recording
10
+ * and playback. Provides signals for real-time notification and
11
+ * query methods for post-session analysis.
12
+ */
13
+ export declare class XrunTracker {
14
+ private _events;
15
+ private _isTracking;
16
+ private _totalXruns;
17
+ /** Signal emitted whenever an xrun is detected */
18
+ readonly xrunDetected: Signal<XrunEvent>;
19
+ /**
20
+ * Start tracking xrun events.
21
+ * Clears any previously recorded events.
22
+ */
23
+ startTracking(): void;
24
+ /**
25
+ * Stop tracking xrun events.
26
+ */
27
+ stopTracking(): void;
28
+ /**
29
+ * Record an xrun event.
30
+ * Only records if tracking is active.
31
+ * @param frame - The session frame position where the xrun occurred
32
+ * @param type - Whether this was an underrun or overrun
33
+ * @param duration - Optional estimated glitch duration in samples
34
+ */
35
+ reportXrun(frame: number, type: 'underrun' | 'overrun', duration?: number): void;
36
+ /**
37
+ * Get all recorded xrun events.
38
+ */
39
+ getEvents(): XrunEvent[];
40
+ /**
41
+ * Get all xrun events that occurred at or after the given frame.
42
+ */
43
+ getEventsSince(frame: number): XrunEvent[];
44
+ /**
45
+ * Get the total number of xruns recorded (persists across reset of events).
46
+ */
47
+ getTotalCount(): number;
48
+ /**
49
+ * Get the most recent xrun event, if any.
50
+ */
51
+ getLastEvent(): XrunEvent | undefined;
52
+ /**
53
+ * Check if any xruns have been recorded.
54
+ */
55
+ hasXruns(): boolean;
56
+ /**
57
+ * Reset all tracked events and counters.
58
+ */
59
+ reset(): void;
60
+ /**
61
+ * Get a summary of all recorded xrun events.
62
+ */
63
+ getSummary(): {
64
+ total: number;
65
+ underruns: number;
66
+ overruns: number;
67
+ firstFrame?: number;
68
+ lastFrame?: number;
69
+ };
70
+ }
71
+ //# sourceMappingURL=XrunTracker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"XrunTracker.d.ts","sourceRoot":"","sources":["../../../src/audio/engine/XrunTracker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,MAAM,WAAW,SAAS;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,UAAU,GAAG,SAAS,CAAC;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;GAIG;AACH,qBAAa,WAAW;IACpB,OAAO,CAAC,OAAO,CAAmB;IAClC,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,WAAW,CAAa;IAEhC,kDAAkD;IAClD,SAAgB,YAAY,EAAE,MAAM,CAAC,SAAS,CAAC,CAA2B;IAE1E;;;OAGG;IACH,aAAa,IAAI,IAAI;IAIrB;;OAEG;IACH,YAAY,IAAI,IAAI;IAIpB;;;;;;OAMG;IACH,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,SAAS,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI;IAehF;;OAEG;IACH,SAAS,IAAI,SAAS,EAAE;IAIxB;;OAEG;IACH,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE;IAI1C;;OAEG;IACH,aAAa,IAAI,MAAM;IAIvB;;OAEG;IACH,YAAY,IAAI,SAAS,GAAG,SAAS;IAMrC;;OAEG;IACH,QAAQ,IAAI,OAAO;IAInB;;OAEG;IACH,KAAK,IAAI,IAAI;IAKb;;OAEG;IACH,UAAU,IAAI;QACV,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,SAAS,CAAC,EAAE,MAAM,CAAC;KACtB;CA6BJ"}
@@ -0,0 +1,118 @@
1
+ import { Signal } from '../../lib/Signal';
2
+ /**
3
+ * XrunTracker - Tracks buffer underrun/overrun events during recording
4
+ * and playback. Provides signals for real-time notification and
5
+ * query methods for post-session analysis.
6
+ */
7
+ export class XrunTracker {
8
+ constructor() {
9
+ this._events = [];
10
+ this._isTracking = false;
11
+ this._totalXruns = 0;
12
+ /** Signal emitted whenever an xrun is detected */
13
+ this.xrunDetected = new Signal();
14
+ }
15
+ /**
16
+ * Start tracking xrun events.
17
+ * Clears any previously recorded events.
18
+ */
19
+ startTracking() {
20
+ this._isTracking = true;
21
+ }
22
+ /**
23
+ * Stop tracking xrun events.
24
+ */
25
+ stopTracking() {
26
+ this._isTracking = false;
27
+ }
28
+ /**
29
+ * Record an xrun event.
30
+ * Only records if tracking is active.
31
+ * @param frame - The session frame position where the xrun occurred
32
+ * @param type - Whether this was an underrun or overrun
33
+ * @param duration - Optional estimated glitch duration in samples
34
+ */
35
+ reportXrun(frame, type, duration) {
36
+ if (!this._isTracking)
37
+ return;
38
+ const event = {
39
+ timestamp: Date.now(),
40
+ frame,
41
+ type,
42
+ duration,
43
+ };
44
+ this._events.push(event);
45
+ this._totalXruns++;
46
+ this.xrunDetected.emit(event);
47
+ }
48
+ /**
49
+ * Get all recorded xrun events.
50
+ */
51
+ getEvents() {
52
+ return [...this._events];
53
+ }
54
+ /**
55
+ * Get all xrun events that occurred at or after the given frame.
56
+ */
57
+ getEventsSince(frame) {
58
+ return this._events.filter(e => e.frame >= frame);
59
+ }
60
+ /**
61
+ * Get the total number of xruns recorded (persists across reset of events).
62
+ */
63
+ getTotalCount() {
64
+ return this._totalXruns;
65
+ }
66
+ /**
67
+ * Get the most recent xrun event, if any.
68
+ */
69
+ getLastEvent() {
70
+ return this._events.length > 0
71
+ ? this._events[this._events.length - 1]
72
+ : undefined;
73
+ }
74
+ /**
75
+ * Check if any xruns have been recorded.
76
+ */
77
+ hasXruns() {
78
+ return this._events.length > 0;
79
+ }
80
+ /**
81
+ * Reset all tracked events and counters.
82
+ */
83
+ reset() {
84
+ this._events = [];
85
+ this._totalXruns = 0;
86
+ }
87
+ /**
88
+ * Get a summary of all recorded xrun events.
89
+ */
90
+ getSummary() {
91
+ let underruns = 0;
92
+ let overruns = 0;
93
+ let firstFrame;
94
+ let lastFrame;
95
+ for (const event of this._events) {
96
+ if (event.type === 'underrun') {
97
+ underruns++;
98
+ }
99
+ else {
100
+ overruns++;
101
+ }
102
+ if (firstFrame === undefined || event.frame < firstFrame) {
103
+ firstFrame = event.frame;
104
+ }
105
+ if (lastFrame === undefined || event.frame > lastFrame) {
106
+ lastFrame = event.frame;
107
+ }
108
+ }
109
+ return {
110
+ total: this._events.length,
111
+ underruns,
112
+ overruns,
113
+ firstFrame,
114
+ lastFrame,
115
+ };
116
+ }
117
+ }
118
+ //# sourceMappingURL=XrunTracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"XrunTracker.js","sourceRoot":"","sources":["../../../src/audio/engine/XrunTracker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAS1C;;;;GAIG;AACH,MAAM,OAAO,WAAW;IAAxB;QACY,YAAO,GAAgB,EAAE,CAAC;QAC1B,gBAAW,GAAY,KAAK,CAAC;QAC7B,gBAAW,GAAW,CAAC,CAAC;QAEhC,kDAAkD;QAClC,iBAAY,GAAsB,IAAI,MAAM,EAAa,CAAC;IA0H9E,CAAC;IAxHG;;;OAGG;IACH,aAAa;QACT,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,YAAY;QACR,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;IAC7B,CAAC;IAED;;;;;;OAMG;IACH,UAAU,CAAC,KAAa,EAAE,IAA4B,EAAE,QAAiB;QACrE,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE,OAAO;QAE9B,MAAM,KAAK,GAAc;YACrB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,KAAK;YACL,IAAI;YACJ,QAAQ;SACX,CAAC;QAEF,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;IAED;;OAEG;IACH,SAAS;QACL,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,cAAc,CAAC,KAAa;QACxB,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,KAAK,CAAC,CAAC;IACtD,CAAC;IAED;;OAEG;IACH,aAAa;QACT,OAAO,IAAI,CAAC,WAAW,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,YAAY;QACR,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;YAC1B,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;YACvC,CAAC,CAAC,SAAS,CAAC;IACpB,CAAC;IAED;;OAEG;IACH,QAAQ;QACJ,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,KAAK;QACD,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,UAAU;QAON,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,IAAI,UAA8B,CAAC;QACnC,IAAI,SAA6B,CAAC;QAElC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAC/B,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;gBAC5B,SAAS,EAAE,CAAC;YAChB,CAAC;iBAAM,CAAC;gBACJ,QAAQ,EAAE,CAAC;YACf,CAAC;YAED,IAAI,UAAU,KAAK,SAAS,IAAI,KAAK,CAAC,KAAK,GAAG,UAAU,EAAE,CAAC;gBACvD,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC;YAC7B,CAAC;YACD,IAAI,SAAS,KAAK,SAAS,IAAI,KAAK,CAAC,KAAK,GAAG,SAAS,EAAE,CAAC;gBACrD,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC;YAC5B,CAAC;QACL,CAAC;QAED,OAAO;YACH,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;YAC1B,SAAS;YACT,QAAQ;YACR,UAAU;YACV,SAAS;SACZ,CAAC;IACN,CAAC;CACJ"}
@@ -0,0 +1,60 @@
1
+ import { CDMarker } from '../../domain/CDMarker';
2
+ /**
3
+ * CD Marker Exporter
4
+ *
5
+ * Generates industry-standard marker/chapter files from CDMarker data.
6
+ * Supports CUE sheets, cdrdao TOC files, and Nero-style MP4 chapter files.
7
+ */
8
+ export declare class CDMarkerExporter {
9
+ /**
10
+ * Generate a CUE sheet from CD markers.
11
+ *
12
+ * CUE format reference: https://en.wikipedia.org/wiki/Cue_sheet_(computing)
13
+ * Time format: MM:SS:FF where FF = CD frames (75 fps)
14
+ *
15
+ * @param markers Array of CDMarker instances
16
+ * @param filename Audio filename referenced in the CUE sheet
17
+ * @param sampleRate Sample rate of the audio
18
+ * @param albumTitle Optional album title
19
+ * @param albumPerformer Optional album performer
20
+ */
21
+ static generateCUE(markers: CDMarker[], filename: string, sampleRate: number, albumTitle?: string, albumPerformer?: string): string;
22
+ /**
23
+ * Generate a cdrdao-compatible TOC (Table of Contents) file.
24
+ *
25
+ * TOC format reference: cdrdao(1) man page
26
+ *
27
+ * @param markers Array of CDMarker instances
28
+ * @param filename Audio filename
29
+ * @param sampleRate Sample rate of the audio
30
+ */
31
+ static generateTOC(markers: CDMarker[], filename: string, sampleRate: number): string;
32
+ /**
33
+ * Generate Nero-style MP4 chapter metadata.
34
+ *
35
+ * Format: CHAPTERXX=HH:MM:SS.mmm / CHAPTERXXNAME=Title
36
+ * This format is understood by ffmpeg via -i chapters.txt.
37
+ *
38
+ * @param markers Array of CDMarker instances
39
+ * @param sampleRate Sample rate of the audio
40
+ */
41
+ static generateMP4Chapters(markers: CDMarker[], sampleRate: number): string;
42
+ /**
43
+ * Convert a sample-frame position to CD time format MM:SS:FF.
44
+ * CD frames run at 75 fps (Red Book standard).
45
+ *
46
+ * @param frames Position in audio sample frames
47
+ * @param sampleRate Audio sample rate (e.g. 44100)
48
+ * @returns Time string in MM:SS:FF format
49
+ */
50
+ static framesToCDTime(frames: number, sampleRate: number): string;
51
+ /**
52
+ * Convert a sample-frame position to HH:MM:SS.mmm timestamp.
53
+ *
54
+ * @param frames Position in audio sample frames
55
+ * @param sampleRate Audio sample rate
56
+ * @returns Time string in HH:MM:SS.mmm format
57
+ */
58
+ static framesToTimestamp(frames: number, sampleRate: number): string;
59
+ }
60
+ //# sourceMappingURL=CDMarkerExporter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CDMarkerExporter.d.ts","sourceRoot":"","sources":["../../../src/audio/export/CDMarkerExporter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEjD;;;;;GAKG;AACH,qBAAa,gBAAgB;IACzB;;;;;;;;;;;OAWG;IACH,MAAM,CAAC,WAAW,CACd,OAAO,EAAE,QAAQ,EAAE,EACnB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,UAAU,GAAE,MAAmB,EAC/B,cAAc,GAAE,MAAW,GAC5B,MAAM;IAiCT;;;;;;;;OAQG;IACH,MAAM,CAAC,WAAW,CACd,OAAO,EAAE,QAAQ,EAAE,EACnB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GACnB,MAAM;IA2DT;;;;;;;;OAQG;IACH,MAAM,CAAC,mBAAmB,CACtB,OAAO,EAAE,QAAQ,EAAE,EACnB,UAAU,EAAE,MAAM,GACnB,MAAM;IAgBT;;;;;;;OAOG;IACH,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM;IAajE;;;;;;OAMG;IACH,MAAM,CAAC,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM;CAcvE"}