@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
@@ -1,16 +1,194 @@
1
1
  import { Processor } from './Processor';
2
+ /**
3
+ * Default sample rate assumption for tail-time estimation when the actual
4
+ * session sample rate is not available.
5
+ */
6
+ const DEFAULT_SAMPLE_RATE = 44100;
7
+ /**
8
+ * PluginInsert wraps a Plugin instance inside the Processor graph, bridging
9
+ * the plugin parameter world with the route's latency-compensation and
10
+ * tail-length bookkeeping.
11
+ *
12
+ * It automatically estimates processing latency and tail time based on the
13
+ * plugin type and name, and re-evaluates those estimates whenever a plugin
14
+ * parameter changes.
15
+ */
2
16
  export class PluginInsert extends Processor {
3
- constructor(id, plugin) {
17
+ constructor(id, plugin, sampleRate = DEFAULT_SAMPLE_RATE) {
4
18
  super(id, `Insert: ${plugin.name}`);
5
19
  this._plugin = plugin;
20
+ this._sampleRate = sampleRate;
21
+ // Initial latency / tail estimation based on the plugin's current state.
22
+ this.updateLatencyFromPlugin();
23
+ this.updateTailFromPlugin();
24
+ // Re-estimate whenever a plugin parameter changes.
25
+ this._parameterSubscription = this._plugin.parameterChanged.connect((_change) => {
26
+ this.updateLatencyFromPlugin();
27
+ this.updateTailFromPlugin();
28
+ });
6
29
  }
7
30
  get plugin() {
8
31
  return this._plugin;
9
32
  }
33
+ /** The sample rate used for time-to-sample conversions in tail estimation. */
34
+ get sampleRate() {
35
+ return this._sampleRate;
36
+ }
37
+ set sampleRate(rate) {
38
+ if (rate > 0 && rate !== this._sampleRate) {
39
+ this._sampleRate = rate;
40
+ // Re-estimate with the new sample rate.
41
+ this.updateLatencyFromPlugin();
42
+ this.updateTailFromPlugin();
43
+ }
44
+ }
10
45
  // Proxy active state to plugin bypass if supported
11
46
  set active(value) {
12
47
  super.active = value;
13
- // Logic to bypass plugin in backend
48
+ // When bypassed, the processor introduces no latency or tail.
49
+ if (!value) {
50
+ this.setLatency(0);
51
+ this.setTailLength(0);
52
+ }
53
+ else {
54
+ this.updateLatencyFromPlugin();
55
+ this.updateTailFromPlugin();
56
+ }
57
+ }
58
+ get active() {
59
+ return super.active;
60
+ }
61
+ // ── Latency Estimation ──────────────────────────────────────────────────
62
+ /**
63
+ * Estimate latency (in samples) based on plugin name / type heuristics.
64
+ *
65
+ * Real-world plugins would report their exact latency; here we use
66
+ * conservative estimates for common processor categories:
67
+ *
68
+ * - Linear-phase EQ: ~512 samples (FIR filter latency)
69
+ * - Compressor / Limiter: ~64-256 samples (look-ahead)
70
+ * - De-esser: ~64 samples
71
+ * - Other effects / instruments / analyzers: 0
72
+ */
73
+ updateLatencyFromPlugin() {
74
+ if (!this.active)
75
+ return;
76
+ const nameLower = this._plugin.name.toLowerCase();
77
+ let latency = 0;
78
+ if (nameLower.includes('linear')) {
79
+ // Linear-phase EQ – significant FIR latency
80
+ latency = 512;
81
+ }
82
+ else if (nameLower.includes('comp') || nameLower.includes('limit')) {
83
+ // Compressor / Limiter – look-ahead buffer
84
+ // Scale with a "lookahead" parameter if available, otherwise default.
85
+ const lookaheadParam = this._plugin.getParameter('lookahead');
86
+ if (lookaheadParam) {
87
+ // Parameter value is a 0-1 normalised range; scale to 64-256 samples.
88
+ latency = Math.round(64 + lookaheadParam.value * (256 - 64));
89
+ }
90
+ else {
91
+ latency = 64;
92
+ }
93
+ }
94
+ else if (nameLower.includes('de-ess') || nameLower.includes('deess')) {
95
+ latency = 64;
96
+ }
97
+ this.setLatency(latency);
98
+ }
99
+ // ── Tail Time Estimation ────────────────────────────────────────────────
100
+ /**
101
+ * Estimate the tail length (in frames / samples) based on plugin name and
102
+ * parameter state.
103
+ *
104
+ * - Reverb / convolution: 2-5 seconds, scaled by decay / wet parameters.
105
+ * - Delay: delay-time * estimated feedback-loop count.
106
+ * - Everything else: 0.
107
+ */
108
+ updateTailFromPlugin() {
109
+ if (!this.active)
110
+ return;
111
+ const nameLower = this._plugin.name.toLowerCase();
112
+ let tailSeconds = 0;
113
+ if (nameLower.includes('reverb') || nameLower.includes('convol')) {
114
+ tailSeconds = this._estimateReverbTail();
115
+ }
116
+ else if (nameLower.includes('delay')) {
117
+ tailSeconds = this._estimateDelayTail();
118
+ }
119
+ const tailFrames = Math.ceil(tailSeconds * this._sampleRate);
120
+ this.setTailLength(tailFrames);
121
+ }
122
+ // ── Private helpers ─────────────────────────────────────────────────────
123
+ /**
124
+ * Estimate reverb tail between 2 and 5 seconds.
125
+ * Uses 'decay' or 'time' parameters for the base, and 'wet' / 'mix' to
126
+ * scale down when the effect is barely audible.
127
+ */
128
+ _estimateReverbTail() {
129
+ var _a, _b;
130
+ const baseTail = 2; // minimum tail in seconds
131
+ const maxTail = 5;
132
+ // Look for a decay / time parameter.
133
+ const decayParam = (_a = this._plugin.getParameter('decay')) !== null && _a !== void 0 ? _a : this._plugin.getParameter('time');
134
+ let tail;
135
+ if (decayParam) {
136
+ // Normalised 0-1 → 2-5 seconds.
137
+ const norm = (decayParam.value - decayParam.min) / (decayParam.max - decayParam.min || 1);
138
+ tail = baseTail + norm * (maxTail - baseTail);
139
+ }
140
+ else {
141
+ tail = baseTail;
142
+ }
143
+ // Scale by wet/mix level – if wet is near zero the audible tail is negligible.
144
+ const wetParam = (_b = this._plugin.getParameter('wet')) !== null && _b !== void 0 ? _b : this._plugin.getParameter('mix');
145
+ if (wetParam) {
146
+ const wetNorm = (wetParam.value - wetParam.min) / (wetParam.max - wetParam.min || 1);
147
+ tail *= wetNorm;
148
+ }
149
+ return tail;
150
+ }
151
+ /**
152
+ * Estimate delay tail based on delay-time and feedback.
153
+ *
154
+ * The effective tail is roughly `delayTime * loops` where loops is
155
+ * derived from the feedback amount: loops ≈ log(threshold) / log(feedback).
156
+ * We cap at a sensible maximum (10 s).
157
+ */
158
+ _estimateDelayTail() {
159
+ var _a;
160
+ const MAX_TAIL = 10; // seconds
161
+ const timeParam = (_a = this._plugin.getParameter('time')) !== null && _a !== void 0 ? _a : this._plugin.getParameter('delay');
162
+ const feedbackParam = this._plugin.getParameter('feedback');
163
+ // Default delay time 0.5 s if not found.
164
+ let delayTime = 0.5;
165
+ if (timeParam) {
166
+ // Assume parameter value is already in seconds, or normalised 0-1 → 0-2 s.
167
+ if (timeParam.max <= 1) {
168
+ delayTime = timeParam.value * 2;
169
+ }
170
+ else {
171
+ delayTime = timeParam.value;
172
+ }
173
+ }
174
+ let loops = 1;
175
+ if (feedbackParam) {
176
+ const fbNorm = (feedbackParam.value - feedbackParam.min) / (feedbackParam.max - feedbackParam.min || 1);
177
+ const fb = Math.min(fbNorm, 0.99); // clamp to avoid infinite loops
178
+ if (fb > 0.01) {
179
+ // Number of iterations until signal drops below -60 dB.
180
+ const threshold = 0.001; // -60 dB
181
+ loops = Math.ceil(Math.log(threshold) / Math.log(fb));
182
+ }
183
+ }
184
+ return Math.min(delayTime * loops, MAX_TAIL);
185
+ }
186
+ /**
187
+ * Dispose of internal subscriptions. Call when removing the insert from
188
+ * the processing chain.
189
+ */
190
+ dispose() {
191
+ this._parameterSubscription.dispose();
14
192
  }
15
193
  }
16
194
  //# sourceMappingURL=PluginInsert.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PluginInsert.js","sourceRoot":"","sources":["../../src/processing/PluginInsert.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAe,MAAM,aAAa,CAAC;AAGrD,MAAM,OAAO,YAAa,SAAQ,SAAS;IAGvC,YAAY,EAAe,EAAE,MAAc;QACvC,KAAK,CAAC,EAAE,EAAE,WAAW,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACpC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;IAC1B,CAAC;IAED,IAAW,MAAM;QACb,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IAED,mDAAmD;IACnD,IAAW,MAAM,CAAC,KAAc;QAC5B,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC;QACrB,oCAAoC;IACxC,CAAC;CACJ"}
1
+ {"version":3,"file":"PluginInsert.js","sourceRoot":"","sources":["../../src/processing/PluginInsert.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@ import { Signal } from '../lib/Signal';
4
4
  * Phase inversion (polarity) processor.
5
5
  *
6
6
  * When inverted, all samples are multiplied by -1. This is the standard
7
- * "phase flip" found on every DAW channel strip (Ardour: libs/ardour/polarity.cc).
7
+ * "phase flip" found on every DAW channel strip.
8
8
  *
9
9
  * Placed in the signal chain after the main fader and before post-fader plugins:
10
10
  * Input -> Trim -> [Pre-fader] -> Fader -> Polarity -> [Post-fader] -> Panner -> Output
@@ -4,7 +4,7 @@ import { Signal } from '../lib/Signal';
4
4
  * Phase inversion (polarity) processor.
5
5
  *
6
6
  * When inverted, all samples are multiplied by -1. This is the standard
7
- * "phase flip" found on every DAW channel strip (Ardour: libs/ardour/polarity.cc).
7
+ * "phase flip" found on every DAW channel strip.
8
8
  *
9
9
  * Placed in the signal chain after the main fader and before post-fader plugins:
10
10
  * Input -> Trim -> [Pre-fader] -> Fader -> Polarity -> [Post-fader] -> Panner -> Output
@@ -12,10 +12,33 @@ export declare abstract class Processor {
12
12
  paramName: string;
13
13
  list: AutomationList;
14
14
  }>;
15
+ /**
16
+ * The number of frames of audio "tail" this processor produces after
17
+ * input ceases (e.g. reverb decay, delay feedback). Used by the engine
18
+ * to know how long to keep processing after playback stops.
19
+ */
20
+ private _tailLength;
21
+ readonly tailLengthChanged: Signal<number>;
22
+ /**
23
+ * Processing latency in samples. Subclasses that introduce latency
24
+ * (e.g. look-ahead limiters, linear-phase EQs) should call
25
+ * {@link setLatency} rather than overriding {@link getLatency}.
26
+ */
27
+ private _latency;
28
+ readonly latencyChanged: Signal<number>;
15
29
  constructor(id: ProcessorId, name: string);
16
30
  getAutomation(paramName: string): AutomationList;
17
31
  get active(): boolean;
18
32
  set active(value: boolean);
33
+ /**
34
+ * Returns the tail length in frames.
35
+ */
36
+ getTailLength(): number;
37
+ /**
38
+ * Set the tail length in frames.
39
+ * @param frames Number of frames (>= 0).
40
+ */
41
+ setTailLength(frames: number): void;
19
42
  /**
20
43
  * Returns the processing latency introduced by this processor, in samples.
21
44
  *
@@ -27,5 +50,20 @@ export declare abstract class Processor {
27
50
  * @returns Latency in samples (default 0).
28
51
  */
29
52
  getLatency(): number;
53
+ /**
54
+ * Set the processing latency in samples.
55
+ * @param samples Latency in samples (>= 0).
56
+ */
57
+ setLatency(samples: number): void;
58
+ /**
59
+ * Returns the effective tail length, which is the maximum of this
60
+ * processor's own tail length and any child processor tail lengths.
61
+ *
62
+ * Subclasses that contain child processors (e.g. processor chains,
63
+ * plugin wrappers) should override this to include their children.
64
+ *
65
+ * @returns Effective tail length in frames.
66
+ */
67
+ getEffectiveTailLength(): number;
30
68
  }
31
69
  //# sourceMappingURL=Processor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Processor.d.ts","sourceRoot":"","sources":["../../src/processing/Processor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAE9D,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC;AAEjC,8BAAsB,SAAS;IAC3B,SAAgB,EAAE,EAAE,WAAW,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IAGb,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAa;IAE5D,SAAS,CAAC,OAAO,EAAE,OAAO,CAAQ;IAClC,SAAgB,aAAa,kBAAyB;IACtD,SAAgB,YAAY,eAAsB;IAClD,SAAgB,eAAe;mBAA2B,MAAM;cAAQ,cAAc;OAAM;gBAEhF,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM;IAKlC,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc;IASvD,IAAW,MAAM,IAAI,OAAO,CAE3B;IAED,IAAW,MAAM,CAAC,KAAK,EAAE,OAAO,EAK/B;IAED;;;;;;;;;OASG;IACI,UAAU,IAAI,MAAM;CAG9B"}
1
+ {"version":3,"file":"Processor.d.ts","sourceRoot":"","sources":["../../src/processing/Processor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAE9D,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC;AAEjC,8BAAsB,SAAS;IAC3B,SAAgB,EAAE,EAAE,WAAW,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IAGb,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAa;IAE5D,SAAS,CAAC,OAAO,EAAE,OAAO,CAAQ;IAClC,SAAgB,aAAa,kBAAyB;IACtD,SAAgB,YAAY,eAAsB;IAClD,SAAgB,eAAe;mBAA2B,MAAM;cAAQ,cAAc;OAAM;IAG5F;;;;OAIG;IACH,OAAO,CAAC,WAAW,CAAa;IAChC,SAAgB,iBAAiB,iBAAwB;IAGzD;;;;OAIG;IACH,OAAO,CAAC,QAAQ,CAAa;IAC7B,SAAgB,cAAc,iBAAwB;gBAE1C,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM;IAKlC,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc;IASvD,IAAW,MAAM,IAAI,OAAO,CAE3B;IAED,IAAW,MAAM,CAAC,KAAK,EAAE,OAAO,EAK/B;IAID;;OAEG;IACI,aAAa,IAAI,MAAM;IAI9B;;;OAGG;IACI,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAU1C;;;;;;;;;OASG;IACI,UAAU,IAAI,MAAM;IAI3B;;;OAGG;IACI,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAUxC;;;;;;;;OAQG;IACI,sBAAsB,IAAI,MAAM;CAG1C"}
@@ -8,6 +8,22 @@ export class Processor {
8
8
  this.activeChanged = new Signal();
9
9
  this.stateChanged = new Signal();
10
10
  this.automationAdded = new Signal();
11
+ // ── Tail length ─────────────────────────────────────────────────────────
12
+ /**
13
+ * The number of frames of audio "tail" this processor produces after
14
+ * input ceases (e.g. reverb decay, delay feedback). Used by the engine
15
+ * to know how long to keep processing after playback stops.
16
+ */
17
+ this._tailLength = 0;
18
+ this.tailLengthChanged = new Signal();
19
+ // ── Latency ─────────────────────────────────────────────────────────────
20
+ /**
21
+ * Processing latency in samples. Subclasses that introduce latency
22
+ * (e.g. look-ahead limiters, linear-phase EQs) should call
23
+ * {@link setLatency} rather than overriding {@link getLatency}.
24
+ */
25
+ this._latency = 0;
26
+ this.latencyChanged = new Signal();
11
27
  this.id = id;
12
28
  this.name = name;
13
29
  }
@@ -28,6 +44,25 @@ export class Processor {
28
44
  this.activeChanged.emit(value);
29
45
  }
30
46
  }
47
+ // ── Tail length API ─────────────────────────────────────────────────────
48
+ /**
49
+ * Returns the tail length in frames.
50
+ */
51
+ getTailLength() {
52
+ return this._tailLength;
53
+ }
54
+ /**
55
+ * Set the tail length in frames.
56
+ * @param frames Number of frames (>= 0).
57
+ */
58
+ setTailLength(frames) {
59
+ const clamped = Math.max(0, frames);
60
+ if (this._tailLength !== clamped) {
61
+ this._tailLength = clamped;
62
+ this.tailLengthChanged.emit(clamped);
63
+ }
64
+ }
65
+ // ── Latency API ─────────────────────────────────────────────────────────
31
66
  /**
32
67
  * Returns the processing latency introduced by this processor, in samples.
33
68
  *
@@ -39,7 +74,31 @@ export class Processor {
39
74
  * @returns Latency in samples (default 0).
40
75
  */
41
76
  getLatency() {
42
- return 0;
77
+ return this._latency;
78
+ }
79
+ /**
80
+ * Set the processing latency in samples.
81
+ * @param samples Latency in samples (>= 0).
82
+ */
83
+ setLatency(samples) {
84
+ const clamped = Math.max(0, samples);
85
+ if (this._latency !== clamped) {
86
+ this._latency = clamped;
87
+ this.latencyChanged.emit(clamped);
88
+ }
89
+ }
90
+ // ── Effective tail length ───────────────────────────────────────────────
91
+ /**
92
+ * Returns the effective tail length, which is the maximum of this
93
+ * processor's own tail length and any child processor tail lengths.
94
+ *
95
+ * Subclasses that contain child processors (e.g. processor chains,
96
+ * plugin wrappers) should override this to include their children.
97
+ *
98
+ * @returns Effective tail length in frames.
99
+ */
100
+ getEffectiveTailLength() {
101
+ return this._tailLength;
43
102
  }
44
103
  }
45
104
  //# sourceMappingURL=Processor.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Processor.js","sourceRoot":"","sources":["../../src/processing/Processor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAI9D,MAAM,OAAgB,SAAS;IAY3B,YAAY,EAAe,EAAE,IAAY;QARzC,mCAAmC;QAC5B,gBAAW,GAAgC,IAAI,GAAG,EAAE,CAAC;QAElD,YAAO,GAAY,IAAI,CAAC;QAClB,kBAAa,GAAG,IAAI,MAAM,EAAW,CAAC;QACtC,iBAAY,GAAG,IAAI,MAAM,EAAQ,CAAC;QAClC,oBAAe,GAAG,IAAI,MAAM,EAA+C,CAAC;QAGxF,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACrB,CAAC;IAEM,aAAa,CAAC,SAAiB;QAClC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YACnC,MAAM,IAAI,GAAG,IAAI,cAAc,EAAE,CAAC;YAClC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YACtC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACnD,CAAC;QACD,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAE,CAAC;IAC5C,CAAC;IAED,IAAW,MAAM;QACb,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IAED,IAAW,MAAM,CAAC,KAAc;QAC5B,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;YACrB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnC,CAAC;IACL,CAAC;IAED;;;;;;;;;OASG;IACI,UAAU;QACb,OAAO,CAAC,CAAC;IACb,CAAC;CACJ"}
1
+ {"version":3,"file":"Processor.js","sourceRoot":"","sources":["../../src/processing/Processor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAI9D,MAAM,OAAgB,SAAS;IA8B3B,YAAY,EAAe,EAAE,IAAY;QA1BzC,mCAAmC;QAC5B,gBAAW,GAAgC,IAAI,GAAG,EAAE,CAAC;QAElD,YAAO,GAAY,IAAI,CAAC;QAClB,kBAAa,GAAG,IAAI,MAAM,EAAW,CAAC;QACtC,iBAAY,GAAG,IAAI,MAAM,EAAQ,CAAC;QAClC,oBAAe,GAAG,IAAI,MAAM,EAA+C,CAAC;QAE5F,2EAA2E;QAC3E;;;;WAIG;QACK,gBAAW,GAAW,CAAC,CAAC;QAChB,sBAAiB,GAAG,IAAI,MAAM,EAAU,CAAC;QAEzD,2EAA2E;QAC3E;;;;WAIG;QACK,aAAQ,GAAW,CAAC,CAAC;QACb,mBAAc,GAAG,IAAI,MAAM,EAAU,CAAC;QAGlD,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACrB,CAAC;IAEM,aAAa,CAAC,SAAiB;QAClC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YACnC,MAAM,IAAI,GAAG,IAAI,cAAc,EAAE,CAAC;YAClC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YACtC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACnD,CAAC;QACD,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAE,CAAC;IAC5C,CAAC;IAED,IAAW,MAAM;QACb,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IAED,IAAW,MAAM,CAAC,KAAc;QAC5B,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;YACrB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnC,CAAC;IACL,CAAC;IAED,2EAA2E;IAE3E;;OAEG;IACI,aAAa;QAChB,OAAO,IAAI,CAAC,WAAW,CAAC;IAC5B,CAAC;IAED;;;OAGG;IACI,aAAa,CAAC,MAAc;QAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QACpC,IAAI,IAAI,CAAC,WAAW,KAAK,OAAO,EAAE,CAAC;YAC/B,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC;YAC3B,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACzC,CAAC;IACL,CAAC;IAED,2EAA2E;IAE3E;;;;;;;;;OASG;IACI,UAAU;QACb,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IAED;;;OAGG;IACI,UAAU,CAAC,OAAe;QAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QACrC,IAAI,IAAI,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YAC5B,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;YACxB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACtC,CAAC;IACL,CAAC;IAED,2EAA2E;IAE3E;;;;;;;;OAQG;IACI,sBAAsB;QACzB,OAAO,IAAI,CAAC,WAAW,CAAC;IAC5B,CAAC;CACJ"}
@@ -4,7 +4,6 @@ import { MeterData } from '../domain/MeterData';
4
4
  /**
5
5
  * Send processor -- routes a copy of the signal to a destination track or bus.
6
6
  *
7
- * Modelled after Ardour's InternalSend / Send (libs/ardour/send.cc).
8
7
  * A send can be placed either pre-fader or post-fader in the processor chain.
9
8
  * It has its own independent level (in dB) and mute state.
10
9
  *
@@ -1 +1 @@
1
- {"version":3,"file":"SendProcessor.d.ts","sourceRoot":"","sources":["../../src/processing/SendProcessor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhD;;;;;;;;;;GAUG;AACH,qBAAa,aAAc,SAAQ,SAAS;IACxC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,SAAS,CAAU;IAC3B,OAAO,CAAC,SAAS,CAAU;IAC3B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,MAAM,CAAkB;IAEhC,2CAA2C;IAC3C,SAAgB,YAAY,iBAAwB;IACpD,yDAAyD;IACzD,SAAgB,eAAe,kBAAyB;IACxD,2CAA2C;IAC3C,SAAgB,WAAW,kBAAyB;IAEpD;;;;;;OAMG;gBAEC,EAAE,EAAE,WAAW,EACf,QAAQ,EAAE,MAAM,EAChB,KAAK,GAAE,MAAU,EACjB,QAAQ,GAAE,OAAe,EACzB,QAAQ,GAAE,OAAe;IAW7B,wBAAwB;IACxB,IAAW,KAAK,IAAI,MAAM,CAEzB;IAED,IAAW,KAAK,CAAC,KAAK,EAAE,MAAM,EAM7B;IAID,kEAAkE;IAClE,IAAW,QAAQ,IAAI,OAAO,CAE7B;IAED,IAAW,QAAQ,CAAC,KAAK,EAAE,OAAO,EAMjC;IAID,uCAAuC;IACvC,IAAW,QAAQ,IAAI,MAAM,CAE5B;IAID,qDAAqD;IACrD,IAAW,QAAQ,IAAI,OAAO,CAE7B;IAID,kCAAkC;IAClC,IAAW,KAAK,IAAI,OAAO,CAE1B;IAED,IAAW,KAAK,CAAC,KAAK,EAAE,OAAO,EAM9B;IAID;;;;OAIG;IACI,YAAY,IAAI,SAAS;CAQnC"}
1
+ {"version":3,"file":"SendProcessor.d.ts","sourceRoot":"","sources":["../../src/processing/SendProcessor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhD;;;;;;;;;GASG;AACH,qBAAa,aAAc,SAAQ,SAAS;IACxC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,SAAS,CAAU;IAC3B,OAAO,CAAC,SAAS,CAAU;IAC3B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,MAAM,CAAkB;IAEhC,2CAA2C;IAC3C,SAAgB,YAAY,iBAAwB;IACpD,yDAAyD;IACzD,SAAgB,eAAe,kBAAyB;IACxD,2CAA2C;IAC3C,SAAgB,WAAW,kBAAyB;IAEpD;;;;;;OAMG;gBAEC,EAAE,EAAE,WAAW,EACf,QAAQ,EAAE,MAAM,EAChB,KAAK,GAAE,MAAU,EACjB,QAAQ,GAAE,OAAe,EACzB,QAAQ,GAAE,OAAe;IAW7B,wBAAwB;IACxB,IAAW,KAAK,IAAI,MAAM,CAEzB;IAED,IAAW,KAAK,CAAC,KAAK,EAAE,MAAM,EAM7B;IAID,kEAAkE;IAClE,IAAW,QAAQ,IAAI,OAAO,CAE7B;IAED,IAAW,QAAQ,CAAC,KAAK,EAAE,OAAO,EAMjC;IAID,uCAAuC;IACvC,IAAW,QAAQ,IAAI,MAAM,CAE5B;IAID,qDAAqD;IACrD,IAAW,QAAQ,IAAI,OAAO,CAE7B;IAID,kCAAkC;IAClC,IAAW,KAAK,IAAI,OAAO,CAE1B;IAED,IAAW,KAAK,CAAC,KAAK,EAAE,OAAO,EAM9B;IAID;;;;OAIG;IACI,YAAY,IAAI,SAAS;CAQnC"}
@@ -3,7 +3,6 @@ import { Signal } from '../lib/Signal';
3
3
  /**
4
4
  * Send processor -- routes a copy of the signal to a destination track or bus.
5
5
  *
6
- * Modelled after Ardour's InternalSend / Send (libs/ardour/send.cc).
7
6
  * A send can be placed either pre-fader or post-fader in the processor chain.
8
7
  * It has its own independent level (in dB) and mute state.
9
8
  *
@@ -1 +1 @@
1
- {"version":3,"file":"SendProcessor.js","sourceRoot":"","sources":["../../src/processing/SendProcessor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAe,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAGvC;;;;;;;;;;GAUG;AACH,MAAM,OAAO,aAAc,SAAQ,SAAS;IAcxC;;;;;;OAMG;IACH,YACI,EAAe,EACf,QAAgB,EAChB,QAAgB,CAAC,EACjB,WAAoB,KAAK,EACzB,WAAoB,KAAK;QAEzB,KAAK,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QAvBd,WAAM,GAAY,KAAK,CAAC;QAEhC,2CAA2C;QAC3B,iBAAY,GAAG,IAAI,MAAM,EAAU,CAAC;QACpD,yDAAyD;QACzC,oBAAe,GAAG,IAAI,MAAM,EAAW,CAAC;QACxD,2CAA2C;QAC3B,gBAAW,GAAG,IAAI,MAAM,EAAW,CAAC;QAiBhD,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;IAC9B,CAAC;IAED,4EAA4E;IAE5E,wBAAwB;IACxB,IAAW,KAAK;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;IAED,IAAW,KAAK,CAAC,KAAa;QAC1B,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;YACxB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;YACpB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC9B,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;QAC7B,CAAC;IACL,CAAC;IAED,4EAA4E;IAE5E,kEAAkE;IAClE,IAAW,QAAQ;QACf,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IAED,IAAW,QAAQ,CAAC,KAAc;QAC9B,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK,EAAE,CAAC;YAC3B,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;YACvB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACjC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;QAC7B,CAAC;IACL,CAAC;IAED,4EAA4E;IAE5E,uCAAuC;IACvC,IAAW,QAAQ;QACf,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IAED,4EAA4E;IAE5E,qDAAqD;IACrD,IAAW,QAAQ;QACf,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IAED,4EAA4E;IAE5E,kCAAkC;IAClC,IAAW,KAAK;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;IAED,IAAW,KAAK,CAAC,KAAc;QAC3B,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;YACxB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;YACpB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC7B,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;QAC7B,CAAC;IACL,CAAC;IAED,4EAA4E;IAE5E;;;;OAIG;IACI,YAAY;QACf,OAAO;YACH,IAAI,EAAE,CAAC,QAAQ;YACf,GAAG,EAAE,CAAC,QAAQ;YACd,QAAQ,EAAE,CAAC,QAAQ;YACnB,QAAQ,EAAE,KAAK;SAClB,CAAC;IACN,CAAC;CACJ"}
1
+ {"version":3,"file":"SendProcessor.js","sourceRoot":"","sources":["../../src/processing/SendProcessor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAe,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAGvC;;;;;;;;;GASG;AACH,MAAM,OAAO,aAAc,SAAQ,SAAS;IAcxC;;;;;;OAMG;IACH,YACI,EAAe,EACf,QAAgB,EAChB,QAAgB,CAAC,EACjB,WAAoB,KAAK,EACzB,WAAoB,KAAK;QAEzB,KAAK,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QAvBd,WAAM,GAAY,KAAK,CAAC;QAEhC,2CAA2C;QAC3B,iBAAY,GAAG,IAAI,MAAM,EAAU,CAAC;QACpD,yDAAyD;QACzC,oBAAe,GAAG,IAAI,MAAM,EAAW,CAAC;QACxD,2CAA2C;QAC3B,gBAAW,GAAG,IAAI,MAAM,EAAW,CAAC;QAiBhD,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;IAC9B,CAAC;IAED,4EAA4E;IAE5E,wBAAwB;IACxB,IAAW,KAAK;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;IAED,IAAW,KAAK,CAAC,KAAa;QAC1B,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;YACxB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;YACpB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC9B,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;QAC7B,CAAC;IACL,CAAC;IAED,4EAA4E;IAE5E,kEAAkE;IAClE,IAAW,QAAQ;QACf,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IAED,IAAW,QAAQ,CAAC,KAAc;QAC9B,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK,EAAE,CAAC;YAC3B,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;YACvB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACjC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;QAC7B,CAAC;IACL,CAAC;IAED,4EAA4E;IAE5E,uCAAuC;IACvC,IAAW,QAAQ;QACf,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IAED,4EAA4E;IAE5E,qDAAqD;IACrD,IAAW,QAAQ;QACf,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IAED,4EAA4E;IAE5E,kCAAkC;IAClC,IAAW,KAAK;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;IAED,IAAW,KAAK,CAAC,KAAc;QAC3B,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;YACxB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;YACpB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC7B,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;QAC7B,CAAC;IACL,CAAC;IAED,4EAA4E;IAE5E;;;;OAIG;IACI,YAAY;QACf,OAAO;YACH,IAAI,EAAE,CAAC,QAAQ;YACf,GAAG,EAAE,CAAC,QAAQ;YACd,QAAQ,EAAE,CAAC,QAAQ;YACnB,QAAQ,EAAE,KAAK;SAClB,CAAC;IACN,CAAC;CACJ"}
@@ -0,0 +1,120 @@
1
+ import { Processor, ProcessorId } from './Processor';
2
+ import { Signal } from '../lib/Signal';
3
+ /**
4
+ * SurroundPanner supports multichannel panning beyond stereo.
5
+ *
6
+ * Supported layouts:
7
+ * - Stereo (2.0): L, R
8
+ * - Quad (4.0): FL, FR, RL, RR
9
+ * - 5.1: FL, FR, C, LFE, RL, RR
10
+ * - 7.1: FL, FR, C, LFE, RL, RR, SL, SR
11
+ * - Atmos/3D: adds height channels
12
+ *
13
+ * Uses VBAP (Vector Base Amplitude Panning) algorithm for
14
+ * arbitrary speaker configurations.
15
+ */
16
+ export declare enum SpeakerLayout {
17
+ STEREO = "STEREO",
18
+ QUAD = "QUAD",
19
+ SURROUND_5_1 = "5.1",
20
+ SURROUND_7_1 = "7.1"
21
+ }
22
+ export interface SpeakerPosition {
23
+ azimuth: number;
24
+ elevation: number;
25
+ distance: number;
26
+ label: string;
27
+ }
28
+ export interface SurroundPannerSnapshot {
29
+ id: ProcessorId;
30
+ name: string;
31
+ azimuth: number;
32
+ elevation: number;
33
+ spread: number;
34
+ lfeLevel: number;
35
+ layout: SpeakerLayout;
36
+ active: boolean;
37
+ }
38
+ export declare class SurroundPanner extends Processor {
39
+ private _azimuth;
40
+ private _elevation;
41
+ private _spread;
42
+ private _lfeLevel;
43
+ private _layout;
44
+ private _speakers;
45
+ private _gains;
46
+ readonly positionChanged: Signal<{
47
+ azimuth: number;
48
+ elevation: number;
49
+ }>;
50
+ readonly layoutChanged: Signal<SpeakerLayout>;
51
+ constructor(id: ProcessorId, layout?: SpeakerLayout);
52
+ /**
53
+ * Set the source position.
54
+ * @param azimuth Horizontal angle in degrees (-180 to 180).
55
+ * @param elevation Vertical angle in degrees (-90 to 90). Defaults to current.
56
+ */
57
+ setPosition(azimuth: number, elevation?: number): void;
58
+ /**
59
+ * Set the source spread.
60
+ * @param spread 0 = point source, 1 = omnidirectional.
61
+ */
62
+ setSpread(spread: number): void;
63
+ /**
64
+ * Set the LFE send level.
65
+ * @param level 0 to 1.
66
+ */
67
+ setLFELevel(level: number): void;
68
+ get azimuth(): number;
69
+ get elevation(): number;
70
+ get spread(): number;
71
+ get lfeLevel(): number;
72
+ /**
73
+ * Set the speaker layout. Recomputes speaker positions and gains.
74
+ */
75
+ setLayout(layout: SpeakerLayout): void;
76
+ get layout(): SpeakerLayout;
77
+ /** Number of output channels for the current layout. */
78
+ get channelCount(): number;
79
+ /** Speaker positions for the current layout. */
80
+ get speakers(): ReadonlyArray<SpeakerPosition>;
81
+ /**
82
+ * Compute per-channel gains based on the current source position,
83
+ * spread, and layout using VBAP.
84
+ *
85
+ * @returns Float32Array of linear gains, one per speaker/channel.
86
+ */
87
+ computeGains(): Float32Array;
88
+ /**
89
+ * 2D VBAP: Vector Base Amplitude Panning in the horizontal plane.
90
+ *
91
+ * For each adjacent speaker pair, computes the amplitude split
92
+ * based on the angular position of the source relative to both speakers.
93
+ *
94
+ * @param azimuth Source azimuth in degrees (-180 to 180).
95
+ */
96
+ private vbap2D;
97
+ /**
98
+ * 3D VBAP: Vector Base Amplitude Panning with elevation.
99
+ *
100
+ * Extends 2D VBAP by considering the vertical angle to distribute
101
+ * energy across speakers at different elevations.
102
+ *
103
+ * @param azimuth Source azimuth in degrees.
104
+ * @param elevation Source elevation in degrees.
105
+ */
106
+ private vbap3D;
107
+ /**
108
+ * Setup default speaker positions for a given layout.
109
+ * Angles follow the ITU-R BS.775 and ITU-R BS.2051 standards.
110
+ */
111
+ private setupSpeakers;
112
+ /**
113
+ * Get the index of the LFE channel in the current layout.
114
+ * Returns -1 if the layout has no LFE channel.
115
+ */
116
+ private getLFEChannelIndex;
117
+ toJSON(): SurroundPannerSnapshot;
118
+ static fromJSON(data: SurroundPannerSnapshot): SurroundPanner;
119
+ }
120
+ //# sourceMappingURL=SurroundPanner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SurroundPanner.d.ts","sourceRoot":"","sources":["../../src/processing/SurroundPanner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAEvC;;;;;;;;;;;;GAYG;AAEH,oBAAY,aAAa;IACrB,MAAM,WAAW;IACjB,IAAI,SAAS;IACb,YAAY,QAAQ;IACpB,YAAY,QAAQ;CACvB;AAED,MAAM,WAAW,eAAe;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,sBAAsB;IACnC,EAAE,EAAE,WAAW,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,aAAa,CAAC;IACtB,MAAM,EAAE,OAAO,CAAC;CACnB;AAED,qBAAa,cAAe,SAAQ,SAAS;IACzC,OAAO,CAAC,QAAQ,CAAa;IAC7B,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,OAAO,CAAa;IAC5B,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,OAAO,CAAuC;IACtD,OAAO,CAAC,SAAS,CAAyB;IAC1C,OAAO,CAAC,MAAM,CAAqC;IAEnD,SAAgB,eAAe;iBAAyB,MAAM;mBAAa,MAAM;OAAM;IACvF,SAAgB,aAAa,wBAA+B;gBAEhD,EAAE,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,aAAa;IAWnD;;;;OAIG;IACI,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI;IAe7D;;;OAGG;IACI,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAStC;;;OAGG;IACI,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAQvC,IAAW,OAAO,IAAI,MAAM,CAA0B;IACtD,IAAW,SAAS,IAAI,MAAM,CAA4B;IAC1D,IAAW,MAAM,IAAI,MAAM,CAAyB;IACpD,IAAW,QAAQ,IAAI,MAAM,CAA2B;IAIxD;;OAEG;IACI,SAAS,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI;IAW7C,IAAW,MAAM,IAAI,aAAa,CAAyB;IAE3D,wDAAwD;IACxD,IAAW,YAAY,IAAI,MAAM,CAAkC;IAEnE,gDAAgD;IAChD,IAAW,QAAQ,IAAI,aAAa,CAAC,eAAe,CAAC,CAA2B;IAIhF;;;;;OAKG;IACI,YAAY,IAAI,YAAY;IAiCnC;;;;;;;OAOG;IACH,OAAO,CAAC,MAAM;IAwFd;;;;;;;;OAQG;IACH,OAAO,CAAC,MAAM;IAsEd;;;OAGG;IACH,OAAO,CAAC,aAAa;IA8CrB;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAMnB,MAAM,IAAI,sBAAsB;WAazB,QAAQ,CAAC,IAAI,EAAE,sBAAsB,GAAG,cAAc;CAWvE"}