@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,374 @@
1
+ import { Processor } 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 var SpeakerLayout;
17
+ (function (SpeakerLayout) {
18
+ SpeakerLayout["STEREO"] = "STEREO";
19
+ SpeakerLayout["QUAD"] = "QUAD";
20
+ SpeakerLayout["SURROUND_5_1"] = "5.1";
21
+ SpeakerLayout["SURROUND_7_1"] = "7.1";
22
+ })(SpeakerLayout || (SpeakerLayout = {}));
23
+ export class SurroundPanner extends Processor {
24
+ constructor(id, layout) {
25
+ super(id, 'Surround Panner');
26
+ this._azimuth = 0; // Source horizontal angle in degrees
27
+ this._elevation = 0; // Source vertical angle in degrees
28
+ this._spread = 0; // Source spread (0 = point, 1 = omni)
29
+ this._lfeLevel = 0; // LFE send level (0-1)
30
+ this._layout = SpeakerLayout.STEREO;
31
+ this._speakers = [];
32
+ this._gains = new Float32Array(0);
33
+ this.positionChanged = new Signal();
34
+ this.layoutChanged = new Signal();
35
+ const initialLayout = layout !== null && layout !== void 0 ? layout : SpeakerLayout.STEREO;
36
+ this._speakers = this.setupSpeakers(initialLayout);
37
+ this._layout = initialLayout;
38
+ this._gains = new Float32Array(this._speakers.length);
39
+ this.computeGains();
40
+ }
41
+ // ── Position control ────────────────────────────────────────────────────
42
+ /**
43
+ * Set the source position.
44
+ * @param azimuth Horizontal angle in degrees (-180 to 180).
45
+ * @param elevation Vertical angle in degrees (-90 to 90). Defaults to current.
46
+ */
47
+ setPosition(azimuth, elevation) {
48
+ const clampedAz = Math.max(-180, Math.min(180, azimuth));
49
+ const clampedEl = elevation !== undefined
50
+ ? Math.max(-90, Math.min(90, elevation))
51
+ : this._elevation;
52
+ if (this._azimuth !== clampedAz || this._elevation !== clampedEl) {
53
+ this._azimuth = clampedAz;
54
+ this._elevation = clampedEl;
55
+ this.computeGains();
56
+ this.positionChanged.emit({ azimuth: this._azimuth, elevation: this._elevation });
57
+ this.stateChanged.emit();
58
+ }
59
+ }
60
+ /**
61
+ * Set the source spread.
62
+ * @param spread 0 = point source, 1 = omnidirectional.
63
+ */
64
+ setSpread(spread) {
65
+ const clamped = Math.max(0, Math.min(1, spread));
66
+ if (this._spread !== clamped) {
67
+ this._spread = clamped;
68
+ this.computeGains();
69
+ this.stateChanged.emit();
70
+ }
71
+ }
72
+ /**
73
+ * Set the LFE send level.
74
+ * @param level 0 to 1.
75
+ */
76
+ setLFELevel(level) {
77
+ const clamped = Math.max(0, Math.min(1, level));
78
+ if (this._lfeLevel !== clamped) {
79
+ this._lfeLevel = clamped;
80
+ this.stateChanged.emit();
81
+ }
82
+ }
83
+ get azimuth() { return this._azimuth; }
84
+ get elevation() { return this._elevation; }
85
+ get spread() { return this._spread; }
86
+ get lfeLevel() { return this._lfeLevel; }
87
+ // ── Layout ──────────────────────────────────────────────────────────────
88
+ /**
89
+ * Set the speaker layout. Recomputes speaker positions and gains.
90
+ */
91
+ setLayout(layout) {
92
+ if (this._layout !== layout) {
93
+ this._layout = layout;
94
+ this._speakers = this.setupSpeakers(layout);
95
+ this._gains = new Float32Array(this._speakers.length);
96
+ this.computeGains();
97
+ this.layoutChanged.emit(layout);
98
+ this.stateChanged.emit();
99
+ }
100
+ }
101
+ get layout() { return this._layout; }
102
+ /** Number of output channels for the current layout. */
103
+ get channelCount() { return this._speakers.length; }
104
+ /** Speaker positions for the current layout. */
105
+ get speakers() { return this._speakers; }
106
+ // ── Gain computation ────────────────────────────────────────────────────
107
+ /**
108
+ * Compute per-channel gains based on the current source position,
109
+ * spread, and layout using VBAP.
110
+ *
111
+ * @returns Float32Array of linear gains, one per speaker/channel.
112
+ */
113
+ computeGains() {
114
+ const hasElevation = this._elevation !== 0;
115
+ let rawGains;
116
+ if (hasElevation) {
117
+ rawGains = this.vbap3D(this._azimuth, this._elevation);
118
+ }
119
+ else {
120
+ rawGains = this.vbap2D(this._azimuth);
121
+ }
122
+ // Apply spread: interpolate between point-source gains and uniform (omni)
123
+ if (this._spread > 0) {
124
+ const uniformGain = 1.0 / Math.sqrt(this._speakers.length);
125
+ for (let i = 0; i < rawGains.length; i++) {
126
+ rawGains[i] = rawGains[i] * (1 - this._spread) + uniformGain * this._spread;
127
+ }
128
+ }
129
+ // For 5.1 and 7.1 layouts, apply LFE level to the LFE channel
130
+ if (this._layout === SpeakerLayout.SURROUND_5_1 || this._layout === SpeakerLayout.SURROUND_7_1) {
131
+ const lfeIndex = this.getLFEChannelIndex();
132
+ if (lfeIndex >= 0 && lfeIndex < rawGains.length) {
133
+ rawGains[lfeIndex] = this._lfeLevel;
134
+ }
135
+ }
136
+ // Store and return
137
+ this._gains = rawGains;
138
+ return new Float32Array(rawGains);
139
+ }
140
+ // ── VBAP algorithms ─────────────────────────────────────────────────────
141
+ /**
142
+ * 2D VBAP: Vector Base Amplitude Panning in the horizontal plane.
143
+ *
144
+ * For each adjacent speaker pair, computes the amplitude split
145
+ * based on the angular position of the source relative to both speakers.
146
+ *
147
+ * @param azimuth Source azimuth in degrees (-180 to 180).
148
+ */
149
+ vbap2D(azimuth) {
150
+ const gains = new Float32Array(this._speakers.length);
151
+ const speakerCount = this._speakers.length;
152
+ if (speakerCount === 0)
153
+ return gains;
154
+ // Special case: stereo uses simple equal-power panning
155
+ if (this._layout === SpeakerLayout.STEREO) {
156
+ // Normalize azimuth: -180..180 -> -1..1 for L/R
157
+ const normalized = Math.max(-1, Math.min(1, azimuth / 180));
158
+ const pan01 = (normalized + 1) / 2; // 0 = left, 1 = right
159
+ const angle = pan01 * Math.PI / 2;
160
+ gains[0] = Math.cos(angle); // Left
161
+ gains[1] = Math.sin(angle); // Right
162
+ return gains;
163
+ }
164
+ // Convert source azimuth to radians
165
+ const sourceRad = (azimuth * Math.PI) / 180;
166
+ // Get non-LFE speaker indices and their azimuths
167
+ const activeSpeakers = [];
168
+ for (let i = 0; i < speakerCount; i++) {
169
+ // Skip LFE channel in VBAP calculations
170
+ if (this._speakers[i].label === 'LFE')
171
+ continue;
172
+ activeSpeakers.push({
173
+ index: i,
174
+ azimuthRad: (this._speakers[i].azimuth * Math.PI) / 180,
175
+ });
176
+ }
177
+ // Sort speakers by azimuth
178
+ activeSpeakers.sort((a, b) => a.azimuthRad - b.azimuthRad);
179
+ if (activeSpeakers.length === 0)
180
+ return gains;
181
+ if (activeSpeakers.length === 1) {
182
+ gains[activeSpeakers[0].index] = 1.0;
183
+ return gains;
184
+ }
185
+ // Find the two speakers that bracket the source angle
186
+ let found = false;
187
+ for (let i = 0; i < activeSpeakers.length; i++) {
188
+ const next = (i + 1) % activeSpeakers.length;
189
+ let az1 = activeSpeakers[i].azimuthRad;
190
+ let az2 = activeSpeakers[next].azimuthRad;
191
+ // Handle wrap-around
192
+ let span = az2 - az1;
193
+ if (span <= 0)
194
+ span += 2 * Math.PI;
195
+ let sourceOffset = sourceRad - az1;
196
+ if (sourceOffset < 0)
197
+ sourceOffset += 2 * Math.PI;
198
+ if (sourceOffset <= span) {
199
+ // Source is between speakers i and next
200
+ const t = span > 0 ? sourceOffset / span : 0;
201
+ // Equal-power crossfade between the two speakers
202
+ const angle = t * Math.PI / 2;
203
+ const g2 = Math.sin(angle);
204
+ const g1 = Math.cos(angle);
205
+ gains[activeSpeakers[i].index] = g1;
206
+ gains[activeSpeakers[next].index] = g2;
207
+ found = true;
208
+ break;
209
+ }
210
+ }
211
+ // Fallback: if no pair found, use closest speaker
212
+ if (!found) {
213
+ let minDist = Infinity;
214
+ let closest = 0;
215
+ for (const sp of activeSpeakers) {
216
+ let dist = Math.abs(sourceRad - sp.azimuthRad);
217
+ if (dist > Math.PI)
218
+ dist = 2 * Math.PI - dist;
219
+ if (dist < minDist) {
220
+ minDist = dist;
221
+ closest = sp.index;
222
+ }
223
+ }
224
+ gains[closest] = 1.0;
225
+ }
226
+ return gains;
227
+ }
228
+ /**
229
+ * 3D VBAP: Vector Base Amplitude Panning with elevation.
230
+ *
231
+ * Extends 2D VBAP by considering the vertical angle to distribute
232
+ * energy across speakers at different elevations.
233
+ *
234
+ * @param azimuth Source azimuth in degrees.
235
+ * @param elevation Source elevation in degrees.
236
+ */
237
+ vbap3D(azimuth, elevation) {
238
+ const gains = new Float32Array(this._speakers.length);
239
+ const speakerCount = this._speakers.length;
240
+ if (speakerCount === 0)
241
+ return gains;
242
+ // Convert source position to Cartesian unit vector
243
+ const srcAzRad = (azimuth * Math.PI) / 180;
244
+ const srcElRad = (elevation * Math.PI) / 180;
245
+ const srcX = Math.cos(srcElRad) * Math.cos(srcAzRad);
246
+ const srcY = Math.cos(srcElRad) * Math.sin(srcAzRad);
247
+ const srcZ = Math.sin(srcElRad);
248
+ // Compute dot product with each speaker's direction vector.
249
+ // This gives a measure of how "close" the source is to each speaker.
250
+ const dotProducts = [];
251
+ let totalWeight = 0;
252
+ for (let i = 0; i < speakerCount; i++) {
253
+ if (this._speakers[i].label === 'LFE') {
254
+ dotProducts.push(0);
255
+ continue;
256
+ }
257
+ const spAzRad = (this._speakers[i].azimuth * Math.PI) / 180;
258
+ const spElRad = (this._speakers[i].elevation * Math.PI) / 180;
259
+ const spX = Math.cos(spElRad) * Math.cos(spAzRad);
260
+ const spY = Math.cos(spElRad) * Math.sin(spAzRad);
261
+ const spZ = Math.sin(spElRad);
262
+ // Dot product (cosine of angle between source and speaker)
263
+ let dot = srcX * spX + srcY * spY + srcZ * spZ;
264
+ // Clamp to [0, 1] - speakers behind the source get no signal
265
+ dot = Math.max(0, dot);
266
+ // Square the dot product for sharper localization
267
+ dot = dot * dot;
268
+ dotProducts.push(dot);
269
+ totalWeight += dot;
270
+ }
271
+ // Normalize and apply
272
+ if (totalWeight > 0) {
273
+ for (let i = 0; i < speakerCount; i++) {
274
+ // Use sqrt for energy preservation (VBAP convention)
275
+ gains[i] = Math.sqrt(dotProducts[i] / totalWeight);
276
+ }
277
+ }
278
+ else {
279
+ // Fallback: equal distribution across all non-LFE speakers
280
+ let nonLfeCount = 0;
281
+ for (let i = 0; i < speakerCount; i++) {
282
+ if (this._speakers[i].label !== 'LFE')
283
+ nonLfeCount++;
284
+ }
285
+ if (nonLfeCount > 0) {
286
+ const equalGain = 1.0 / Math.sqrt(nonLfeCount);
287
+ for (let i = 0; i < speakerCount; i++) {
288
+ if (this._speakers[i].label !== 'LFE') {
289
+ gains[i] = equalGain;
290
+ }
291
+ }
292
+ }
293
+ }
294
+ return gains;
295
+ }
296
+ // ── Speaker setup ───────────────────────────────────────────────────────
297
+ /**
298
+ * Setup default speaker positions for a given layout.
299
+ * Angles follow the ITU-R BS.775 and ITU-R BS.2051 standards.
300
+ */
301
+ setupSpeakers(layout) {
302
+ switch (layout) {
303
+ case SpeakerLayout.STEREO:
304
+ return [
305
+ { azimuth: -30, elevation: 0, distance: 1, label: 'L' },
306
+ { azimuth: 30, elevation: 0, distance: 1, label: 'R' },
307
+ ];
308
+ case SpeakerLayout.QUAD:
309
+ return [
310
+ { azimuth: -45, elevation: 0, distance: 1, label: 'FL' },
311
+ { azimuth: 45, elevation: 0, distance: 1, label: 'FR' },
312
+ { azimuth: -135, elevation: 0, distance: 1, label: 'RL' },
313
+ { azimuth: 135, elevation: 0, distance: 1, label: 'RR' },
314
+ ];
315
+ case SpeakerLayout.SURROUND_5_1:
316
+ return [
317
+ { azimuth: -30, elevation: 0, distance: 1, label: 'FL' },
318
+ { azimuth: 30, elevation: 0, distance: 1, label: 'FR' },
319
+ { azimuth: 0, elevation: 0, distance: 1, label: 'C' },
320
+ { azimuth: 0, elevation: -90, distance: 1, label: 'LFE' },
321
+ { azimuth: -110, elevation: 0, distance: 1, label: 'RL' },
322
+ { azimuth: 110, elevation: 0, distance: 1, label: 'RR' },
323
+ ];
324
+ case SpeakerLayout.SURROUND_7_1:
325
+ return [
326
+ { azimuth: -30, elevation: 0, distance: 1, label: 'FL' },
327
+ { azimuth: 30, elevation: 0, distance: 1, label: 'FR' },
328
+ { azimuth: 0, elevation: 0, distance: 1, label: 'C' },
329
+ { azimuth: 0, elevation: -90, distance: 1, label: 'LFE' },
330
+ { azimuth: -135, elevation: 0, distance: 1, label: 'RL' },
331
+ { azimuth: 135, elevation: 0, distance: 1, label: 'RR' },
332
+ { azimuth: -90, elevation: 0, distance: 1, label: 'SL' },
333
+ { azimuth: 90, elevation: 0, distance: 1, label: 'SR' },
334
+ ];
335
+ default:
336
+ return [
337
+ { azimuth: -30, elevation: 0, distance: 1, label: 'L' },
338
+ { azimuth: 30, elevation: 0, distance: 1, label: 'R' },
339
+ ];
340
+ }
341
+ }
342
+ /**
343
+ * Get the index of the LFE channel in the current layout.
344
+ * Returns -1 if the layout has no LFE channel.
345
+ */
346
+ getLFEChannelIndex() {
347
+ return this._speakers.findIndex(s => s.label === 'LFE');
348
+ }
349
+ // ── Serialization ───────────────────────────────────────────────────────
350
+ toJSON() {
351
+ return {
352
+ id: this.id,
353
+ name: this.name,
354
+ azimuth: this._azimuth,
355
+ elevation: this._elevation,
356
+ spread: this._spread,
357
+ lfeLevel: this._lfeLevel,
358
+ layout: this._layout,
359
+ active: this.active,
360
+ };
361
+ }
362
+ static fromJSON(data) {
363
+ const panner = new SurroundPanner(data.id, data.layout);
364
+ panner.name = data.name;
365
+ panner._azimuth = data.azimuth;
366
+ panner._elevation = data.elevation;
367
+ panner._spread = data.spread;
368
+ panner._lfeLevel = data.lfeLevel;
369
+ panner.active = data.active;
370
+ panner.computeGains();
371
+ return panner;
372
+ }
373
+ }
374
+ //# sourceMappingURL=SurroundPanner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SurroundPanner.js","sourceRoot":"","sources":["../../src/processing/SurroundPanner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * True Peak Limiter
3
+ *
4
+ * Implements:
5
+ * 1. 4x oversampling via windowed sinc interpolation
6
+ * 2. True peak measurement per ITU-R BS.1770-4 Annex 2
7
+ * 3. Brick-wall limiting with lookahead and release
8
+ */
9
+ /**
10
+ * Measure the true peak of a mono channel using 4x oversampling.
11
+ * Returns peak in linear scale.
12
+ */
13
+ export declare function measureTruePeak(samples: Float32Array): number;
14
+ /**
15
+ * Measure true peak in dBTP for a mono channel.
16
+ */
17
+ export declare function measureTruePeakDbTP(samples: Float32Array): number;
18
+ /**
19
+ * Apply brick-wall true peak limiting to an AudioBuffer.
20
+ * Modifies the buffer in-place.
21
+ *
22
+ * The limiter uses a simple gain reduction approach:
23
+ * 1. Find the true peak of the entire buffer
24
+ * 2. If it exceeds the ceiling, apply uniform gain reduction
25
+ * 3. For per-sample limiting, use a lookahead envelope follower
26
+ *
27
+ * @param buffer Audio buffer to limit (modified in-place)
28
+ * @param ceilingDbTP Target ceiling in dBTP (e.g., -1.0)
29
+ * @returns true if limiting was applied
30
+ */
31
+ export declare function applyTruePeakLimiter(buffer: AudioBuffer, ceilingDbTP?: number): boolean;
32
+ //# sourceMappingURL=TruePeakLimiter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TruePeakLimiter.d.ts","sourceRoot":"","sources":["../../src/processing/TruePeakLimiter.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAqBH;;;GAGG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,CAwB7D;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,CAGjE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,WAAW,EAAE,WAAW,GAAE,MAAa,GAAG,OAAO,CA0E7F"}
@@ -0,0 +1,142 @@
1
+ /**
2
+ * True Peak Limiter
3
+ *
4
+ * Implements:
5
+ * 1. 4x oversampling via windowed sinc interpolation
6
+ * 2. True peak measurement per ITU-R BS.1770-4 Annex 2
7
+ * 3. Brick-wall limiting with lookahead and release
8
+ */
9
+ /**
10
+ * 4x oversampling FIR coefficients (half-band low-pass, 12-tap).
11
+ * These approximate a windowed sinc interpolation filter for 4x upsampling.
12
+ */
13
+ const OVERSAMPLE_TAPS = [
14
+ 0.0017089843750,
15
+ -0.0291748046875,
16
+ -0.0189208984375,
17
+ 0.0708618164062,
18
+ 0.3031005859375,
19
+ 0.4736328125000,
20
+ 0.3031005859375,
21
+ 0.0708618164062,
22
+ -0.0189208984375,
23
+ -0.0291748046875,
24
+ 0.0017089843750,
25
+ 0.0000000000000,
26
+ ];
27
+ /**
28
+ * Measure the true peak of a mono channel using 4x oversampling.
29
+ * Returns peak in linear scale.
30
+ */
31
+ export function measureTruePeak(samples) {
32
+ const taps = OVERSAMPLE_TAPS;
33
+ const numTaps = taps.length;
34
+ const halfTaps = Math.floor(numTaps / 2);
35
+ let maxPeak = 0;
36
+ // For each input sample, compute 4 interpolated values
37
+ for (let i = 0; i < samples.length; i++) {
38
+ for (let phase = 0; phase < 4; phase++) {
39
+ let sum = 0;
40
+ for (let t = 0; t < numTaps; t++) {
41
+ const srcIdx = i - halfTaps + t;
42
+ if (srcIdx >= 0 && srcIdx < samples.length) {
43
+ // Phase-offset tap selection for polyphase decomposition
44
+ sum += samples[srcIdx] * taps[t];
45
+ }
46
+ }
47
+ const abs = Math.abs(sum);
48
+ if (abs > maxPeak)
49
+ maxPeak = abs;
50
+ }
51
+ }
52
+ return maxPeak;
53
+ }
54
+ /**
55
+ * Measure true peak in dBTP for a mono channel.
56
+ */
57
+ export function measureTruePeakDbTP(samples) {
58
+ const peak = measureTruePeak(samples);
59
+ return peak > 0 ? 20 * Math.log10(peak) : -Infinity;
60
+ }
61
+ /**
62
+ * Apply brick-wall true peak limiting to an AudioBuffer.
63
+ * Modifies the buffer in-place.
64
+ *
65
+ * The limiter uses a simple gain reduction approach:
66
+ * 1. Find the true peak of the entire buffer
67
+ * 2. If it exceeds the ceiling, apply uniform gain reduction
68
+ * 3. For per-sample limiting, use a lookahead envelope follower
69
+ *
70
+ * @param buffer Audio buffer to limit (modified in-place)
71
+ * @param ceilingDbTP Target ceiling in dBTP (e.g., -1.0)
72
+ * @returns true if limiting was applied
73
+ */
74
+ export function applyTruePeakLimiter(buffer, ceilingDbTP = -1.0) {
75
+ const ceilingLinear = Math.pow(10, ceilingDbTP / 20);
76
+ const numChannels = buffer.numberOfChannels;
77
+ // Measure true peak across all channels
78
+ let globalTruePeak = 0;
79
+ for (let ch = 0; ch < numChannels; ch++) {
80
+ const data = buffer.getChannelData(ch);
81
+ const peak = measureTruePeak(data);
82
+ if (peak > globalTruePeak)
83
+ globalTruePeak = peak;
84
+ }
85
+ // If already below ceiling, nothing to do
86
+ if (globalTruePeak <= ceilingLinear) {
87
+ return false;
88
+ }
89
+ // Lookahead limiter parameters
90
+ const sampleRate = buffer.sampleRate;
91
+ const lookaheadMs = 5; // 5ms lookahead
92
+ const releaseMs = 100; // 100ms release
93
+ const lookaheadSamples = Math.ceil(sampleRate * lookaheadMs / 1000);
94
+ const releaseCoeff = Math.exp(-1.0 / (sampleRate * releaseMs / 1000));
95
+ // Compute per-sample gain envelope based on peak detection
96
+ const length = buffer.length;
97
+ const gainEnvelope = new Float32Array(length);
98
+ gainEnvelope.fill(1.0);
99
+ // First pass: find per-sample peaks across channels
100
+ const peaks = new Float32Array(length);
101
+ for (let ch = 0; ch < numChannels; ch++) {
102
+ const data = buffer.getChannelData(ch);
103
+ for (let i = 0; i < length; i++) {
104
+ const abs = Math.abs(data[i]);
105
+ if (abs > peaks[i])
106
+ peaks[i] = abs;
107
+ }
108
+ }
109
+ // Second pass: compute gain reduction with lookahead
110
+ let currentGain = 1.0;
111
+ for (let i = length - 1; i >= 0; i--) {
112
+ // Look ahead to find the peak that's coming
113
+ let futureMax = 0;
114
+ const lookEnd = Math.min(i + lookaheadSamples, length);
115
+ for (let j = i; j < lookEnd; j++) {
116
+ if (peaks[j] > futureMax)
117
+ futureMax = peaks[j];
118
+ }
119
+ // Desired gain for this sample
120
+ let desiredGain = 1.0;
121
+ if (futureMax > ceilingLinear) {
122
+ desiredGain = ceilingLinear / futureMax;
123
+ }
124
+ // Smooth gain changes (attack = instant, release = smooth)
125
+ if (desiredGain < currentGain) {
126
+ currentGain = desiredGain; // instant attack
127
+ }
128
+ else {
129
+ currentGain = desiredGain + releaseCoeff * (currentGain - desiredGain);
130
+ }
131
+ gainEnvelope[i] = currentGain;
132
+ }
133
+ // Apply gain envelope to all channels
134
+ for (let ch = 0; ch < numChannels; ch++) {
135
+ const data = buffer.getChannelData(ch);
136
+ for (let i = 0; i < length; i++) {
137
+ data[i] *= gainEnvelope[i];
138
+ }
139
+ }
140
+ return true;
141
+ }
142
+ //# sourceMappingURL=TruePeakLimiter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TruePeakLimiter.js","sourceRoot":"","sources":["../../src/processing/TruePeakLimiter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import { ExportPreset } from '../domain/ExportPreset';
2
+ /**
3
+ * IndexedDB storage for export presets.
4
+ * Follows the same pattern as SessionStorage.
5
+ */
6
+ export declare class ExportPresetStorage {
7
+ private static instance;
8
+ private dbPromise;
9
+ private constructor();
10
+ static getInstance(): ExportPresetStorage;
11
+ private openDB;
12
+ /**
13
+ * Save a user preset.
14
+ */
15
+ savePreset(preset: ExportPreset): Promise<void>;
16
+ /**
17
+ * Load a preset by ID.
18
+ */
19
+ loadPreset(id: string): Promise<ExportPreset | null>;
20
+ /**
21
+ * List all saved user presets.
22
+ */
23
+ listPresets(): Promise<ExportPreset[]>;
24
+ /**
25
+ * Get all presets (built-in + user).
26
+ */
27
+ getAllPresets(): Promise<ExportPreset[]>;
28
+ /**
29
+ * Delete a user preset by ID.
30
+ */
31
+ deletePreset(id: string): Promise<void>;
32
+ }
33
+ //# sourceMappingURL=ExportPresetStorage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExportPresetStorage.d.ts","sourceRoot":"","sources":["../../src/storage/ExportPresetStorage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,YAAY,EAAqB,MAAM,wBAAwB,CAAC;AAM/F;;;GAGG;AACH,qBAAa,mBAAmB;IAC5B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAsB;IAC7C,OAAO,CAAC,SAAS,CAAqC;IAEtD,OAAO;WAEO,WAAW,IAAI,mBAAmB;IAOhD,OAAO,CAAC,MAAM;IA2Cd;;OAEG;IACU,UAAU,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAY5D;;OAEG;IACU,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAajE;;OAEG;IACU,WAAW,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IAanD;;OAEG;IACU,aAAa,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IAMrD;;OAEG;IACU,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CASvD"}