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