@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,520 @@
|
|
|
1
|
+
import { ExportFormat, ExportSampleFormat } from '../../domain/ExportConfig';
|
|
2
|
+
import { DitherType } from '../../utils/DitherProcessor';
|
|
3
|
+
/**
|
|
4
|
+
* Builds a dynamic processing chain for audio export.
|
|
5
|
+
*
|
|
6
|
+
* Instead of a fixed pipeline (as in OfflineExporter), ExportGraphBuilder
|
|
7
|
+
* assembles an ordered sequence of ExportNode instances based on the
|
|
8
|
+
* ExportConfig. Custom nodes can be inserted at any position to extend
|
|
9
|
+
* the chain without modifying the core logic.
|
|
10
|
+
*/
|
|
11
|
+
export class ExportGraphBuilder {
|
|
12
|
+
constructor(config) {
|
|
13
|
+
this._nodes = [];
|
|
14
|
+
this._config = config;
|
|
15
|
+
this._sampleRate = config.sampleRate;
|
|
16
|
+
this._channelCount = config.exportMasterOnly ? 2 : 2; // default stereo
|
|
17
|
+
this.buildFromConfig(config);
|
|
18
|
+
}
|
|
19
|
+
// ------------------------------------------------------------------ graph
|
|
20
|
+
/**
|
|
21
|
+
* Build the processing graph from an ExportConfig.
|
|
22
|
+
* Clears any existing nodes and re-creates the chain.
|
|
23
|
+
*/
|
|
24
|
+
buildFromConfig(config) {
|
|
25
|
+
var _a, _b, _c, _d, _e;
|
|
26
|
+
this._nodes = [];
|
|
27
|
+
this._config = config;
|
|
28
|
+
this._sampleRate = config.sampleRate;
|
|
29
|
+
// 1. Silence trim (before everything else)
|
|
30
|
+
if (config.trimSilence) {
|
|
31
|
+
this._nodes.push(ExportGraphBuilder.createSilenceTrimNode(-60));
|
|
32
|
+
}
|
|
33
|
+
// 2. Normalization
|
|
34
|
+
if (config.normalize) {
|
|
35
|
+
const mode = (_a = config.normalizeMode) !== null && _a !== void 0 ? _a : 'peak';
|
|
36
|
+
const targetLevel = mode === 'lufs'
|
|
37
|
+
? ((_b = config.targetLufs) !== null && _b !== void 0 ? _b : -14)
|
|
38
|
+
: ((_c = config.targetPeakDb) !== null && _c !== void 0 ? _c : -1);
|
|
39
|
+
this._nodes.push(ExportGraphBuilder.createNormalizeNode(mode, targetLevel));
|
|
40
|
+
}
|
|
41
|
+
// 3. True-peak limiter
|
|
42
|
+
if (config.truePeakLimit) {
|
|
43
|
+
this._nodes.push(ExportGraphBuilder.createTruePeakLimiterNode((_d = config.truePeakCeiling) !== null && _d !== void 0 ? _d : -1.0));
|
|
44
|
+
}
|
|
45
|
+
// 4. Dithering (only when reducing bit depth below 32-bit float)
|
|
46
|
+
if (config.ditherType && config.ditherType !== DitherType.NONE) {
|
|
47
|
+
const targetBits = config.sampleFormat === ExportSampleFormat.INT16 ? 16
|
|
48
|
+
: config.sampleFormat === ExportSampleFormat.INT24 ? 24
|
|
49
|
+
: 32;
|
|
50
|
+
if (targetBits < 32) {
|
|
51
|
+
const ditherTypeMap = {
|
|
52
|
+
[DitherType.NONE]: 'none',
|
|
53
|
+
[DitherType.TPDF]: 'triangular',
|
|
54
|
+
[DitherType.SHAPED]: 'shaped',
|
|
55
|
+
};
|
|
56
|
+
this._nodes.push(ExportGraphBuilder.createDitherNode((_e = ditherTypeMap[config.ditherType]) !== null && _e !== void 0 ? _e : 'none', targetBits));
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
// 5. Final analyzer (captures stats of the processed audio)
|
|
60
|
+
this._nodes.push(ExportGraphBuilder.createAnalyzerNode());
|
|
61
|
+
}
|
|
62
|
+
// -------------------------------------------------------- node management
|
|
63
|
+
/**
|
|
64
|
+
* Add a node to the graph.
|
|
65
|
+
* @param node The node to insert.
|
|
66
|
+
* @param position Optional zero-based index. Appends if omitted.
|
|
67
|
+
*/
|
|
68
|
+
addNode(node, position) {
|
|
69
|
+
if (position !== undefined && position >= 0 && position <= this._nodes.length) {
|
|
70
|
+
this._nodes.splice(position, 0, node);
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
this._nodes.push(node);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Remove a node by id.
|
|
78
|
+
*/
|
|
79
|
+
removeNode(id) {
|
|
80
|
+
this._nodes = this._nodes.filter(n => n.id !== id);
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Get the current ordered list of nodes (read-only copy).
|
|
84
|
+
*/
|
|
85
|
+
getNodes() {
|
|
86
|
+
return [...this._nodes];
|
|
87
|
+
}
|
|
88
|
+
// --------------------------------------------------------------- process
|
|
89
|
+
/**
|
|
90
|
+
* Process multi-channel audio through every node in sequence.
|
|
91
|
+
*/
|
|
92
|
+
async processBuffer(inputBuffer) {
|
|
93
|
+
let buffer = inputBuffer;
|
|
94
|
+
for (const node of this._nodes) {
|
|
95
|
+
buffer = await node.process(buffer, this._sampleRate);
|
|
96
|
+
}
|
|
97
|
+
return buffer;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Encode the processed buffer into a Blob according to the config format.
|
|
101
|
+
* This is a lightweight wrapper that delegates to format-specific logic.
|
|
102
|
+
*/
|
|
103
|
+
async encode(buffer) {
|
|
104
|
+
const format = this._config.format;
|
|
105
|
+
const sampleRate = this._sampleRate;
|
|
106
|
+
switch (format) {
|
|
107
|
+
case ExportFormat.WAV:
|
|
108
|
+
case 'wav':
|
|
109
|
+
return this._encodeWav(buffer, sampleRate, this._config.sampleFormat);
|
|
110
|
+
case ExportFormat.FLAC:
|
|
111
|
+
case 'flac':
|
|
112
|
+
return this._encodeRaw(buffer, 'audio/flac');
|
|
113
|
+
case ExportFormat.OGG:
|
|
114
|
+
case 'ogg':
|
|
115
|
+
return this._encodeRaw(buffer, 'audio/ogg');
|
|
116
|
+
case ExportFormat.MP3:
|
|
117
|
+
case 'mp3':
|
|
118
|
+
return this._encodeRaw(buffer, 'audio/mp3');
|
|
119
|
+
default:
|
|
120
|
+
return this._encodeWav(buffer, sampleRate, this._config.sampleFormat);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
// ===================================================================
|
|
124
|
+
// Built-in node factories
|
|
125
|
+
// ===================================================================
|
|
126
|
+
/**
|
|
127
|
+
* Create a normalization node.
|
|
128
|
+
* @param mode 'peak' or 'lufs'
|
|
129
|
+
* @param targetLevel Target level in dB (peak) or LUFS
|
|
130
|
+
*/
|
|
131
|
+
static createNormalizeNode(mode, targetLevel) {
|
|
132
|
+
return {
|
|
133
|
+
id: `normalize-${mode}`,
|
|
134
|
+
type: 'normalize',
|
|
135
|
+
process(buffer, _sampleRate) {
|
|
136
|
+
if (mode === 'peak') {
|
|
137
|
+
// Peak normalization
|
|
138
|
+
let maxPeak = 0;
|
|
139
|
+
for (const ch of buffer) {
|
|
140
|
+
for (let i = 0; i < ch.length; i++) {
|
|
141
|
+
const abs = Math.abs(ch[i]);
|
|
142
|
+
if (abs > maxPeak)
|
|
143
|
+
maxPeak = abs;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
if (maxPeak === 0)
|
|
147
|
+
return buffer;
|
|
148
|
+
const targetLinear = Math.pow(10, targetLevel / 20);
|
|
149
|
+
const gain = targetLinear / maxPeak;
|
|
150
|
+
for (const ch of buffer) {
|
|
151
|
+
for (let i = 0; i < ch.length; i++) {
|
|
152
|
+
ch[i] *= gain;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
// Simplified LUFS-style normalization
|
|
158
|
+
// Compute integrated loudness using K-weighted RMS approximation
|
|
159
|
+
let sumSquared = 0;
|
|
160
|
+
let totalSamples = 0;
|
|
161
|
+
for (const ch of buffer) {
|
|
162
|
+
for (let i = 0; i < ch.length; i++) {
|
|
163
|
+
sumSquared += ch[i] * ch[i];
|
|
164
|
+
}
|
|
165
|
+
totalSamples += ch.length;
|
|
166
|
+
}
|
|
167
|
+
if (totalSamples === 0 || sumSquared === 0)
|
|
168
|
+
return buffer;
|
|
169
|
+
const rms = Math.sqrt(sumSquared / totalSamples);
|
|
170
|
+
const currentLufs = 20 * Math.log10(rms) - 0.691; // simplified K-weighting offset
|
|
171
|
+
const gainDb = targetLevel - currentLufs;
|
|
172
|
+
const gainLinear = Math.pow(10, gainDb / 20);
|
|
173
|
+
for (const ch of buffer) {
|
|
174
|
+
for (let i = 0; i < ch.length; i++) {
|
|
175
|
+
ch[i] *= gainLinear;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
return buffer;
|
|
180
|
+
},
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Create a true-peak limiter node.
|
|
185
|
+
* @param ceiling Maximum true-peak level in dBTP (e.g. -1.0)
|
|
186
|
+
*/
|
|
187
|
+
static createTruePeakLimiterNode(ceiling) {
|
|
188
|
+
return {
|
|
189
|
+
id: 'true-peak-limiter',
|
|
190
|
+
type: 'limiter',
|
|
191
|
+
process(buffer, _sampleRate) {
|
|
192
|
+
const ceilingLinear = Math.pow(10, ceiling / 20);
|
|
193
|
+
const attack = 0.001; // ~1 ms in samples (simplified)
|
|
194
|
+
const release = 0.050; // ~50 ms
|
|
195
|
+
for (const ch of buffer) {
|
|
196
|
+
let envelope = 0;
|
|
197
|
+
for (let i = 0; i < ch.length; i++) {
|
|
198
|
+
const abs = Math.abs(ch[i]);
|
|
199
|
+
// Simple peak follower
|
|
200
|
+
if (abs > envelope) {
|
|
201
|
+
envelope = abs + attack * (abs - envelope);
|
|
202
|
+
}
|
|
203
|
+
else {
|
|
204
|
+
envelope = abs + (1 - release) * (envelope - abs);
|
|
205
|
+
}
|
|
206
|
+
// Apply gain reduction when envelope exceeds ceiling
|
|
207
|
+
if (envelope > ceilingLinear) {
|
|
208
|
+
ch[i] *= ceilingLinear / envelope;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
return buffer;
|
|
213
|
+
},
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Create a dither node.
|
|
218
|
+
* @param type 'none', 'triangular', or 'shaped'
|
|
219
|
+
* @param bitDepth Target bit depth (16 or 24)
|
|
220
|
+
*/
|
|
221
|
+
static createDitherNode(type, bitDepth) {
|
|
222
|
+
return {
|
|
223
|
+
id: `dither-${type}-${bitDepth}`,
|
|
224
|
+
type: 'dither',
|
|
225
|
+
process(buffer, _sampleRate) {
|
|
226
|
+
if (type === 'none')
|
|
227
|
+
return buffer;
|
|
228
|
+
const quantizationStep = 1.0 / Math.pow(2, bitDepth - 1);
|
|
229
|
+
const scale = 1.0 / quantizationStep;
|
|
230
|
+
for (const ch of buffer) {
|
|
231
|
+
let previousError = 0;
|
|
232
|
+
for (let i = 0; i < ch.length; i++) {
|
|
233
|
+
const r1 = Math.random();
|
|
234
|
+
const r2 = Math.random();
|
|
235
|
+
const dither = (r1 - r2) * quantizationStep;
|
|
236
|
+
if (type === 'shaped') {
|
|
237
|
+
const shaped = ch[i] + dither - previousError * 0.5;
|
|
238
|
+
const quantized = Math.round(shaped * scale) / scale;
|
|
239
|
+
previousError = quantized - ch[i];
|
|
240
|
+
ch[i] = quantized;
|
|
241
|
+
}
|
|
242
|
+
else {
|
|
243
|
+
// triangular (TPDF)
|
|
244
|
+
const quantized = Math.round((ch[i] + dither) * scale) / scale;
|
|
245
|
+
ch[i] = quantized;
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
return buffer;
|
|
250
|
+
},
|
|
251
|
+
};
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* Create a silence-trimming node.
|
|
255
|
+
* Removes leading and trailing silence below a threshold.
|
|
256
|
+
* @param thresholdDb Silence threshold in dBFS (e.g. -60)
|
|
257
|
+
*/
|
|
258
|
+
static createSilenceTrimNode(thresholdDb) {
|
|
259
|
+
return {
|
|
260
|
+
id: 'silence-trim',
|
|
261
|
+
type: 'silence_trim',
|
|
262
|
+
process(buffer, _sampleRate) {
|
|
263
|
+
if (buffer.length === 0 || buffer[0].length === 0)
|
|
264
|
+
return buffer;
|
|
265
|
+
const thresholdLinear = Math.pow(10, thresholdDb / 20);
|
|
266
|
+
const length = buffer[0].length;
|
|
267
|
+
// Find first sample above threshold (across all channels)
|
|
268
|
+
let startSample = 0;
|
|
269
|
+
outer_start: for (let i = 0; i < length; i++) {
|
|
270
|
+
for (const ch of buffer) {
|
|
271
|
+
if (Math.abs(ch[i]) > thresholdLinear) {
|
|
272
|
+
startSample = i;
|
|
273
|
+
break outer_start;
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
// Find last sample above threshold
|
|
278
|
+
let endSample = length - 1;
|
|
279
|
+
outer_end: for (let i = length - 1; i >= startSample; i--) {
|
|
280
|
+
for (const ch of buffer) {
|
|
281
|
+
if (Math.abs(ch[i]) > thresholdLinear) {
|
|
282
|
+
endSample = i;
|
|
283
|
+
break outer_end;
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
// If no signal found at all, return a single-sample silence
|
|
288
|
+
if (startSample > endSample) {
|
|
289
|
+
return buffer.map(() => new Float32Array(1));
|
|
290
|
+
}
|
|
291
|
+
const trimmedLength = endSample - startSample + 1;
|
|
292
|
+
return buffer.map(ch => ch.slice(startSample, startSample + trimmedLength));
|
|
293
|
+
},
|
|
294
|
+
};
|
|
295
|
+
}
|
|
296
|
+
/**
|
|
297
|
+
* Create a gain node.
|
|
298
|
+
* @param gainDb Gain in decibels
|
|
299
|
+
*/
|
|
300
|
+
static createGainNode(gainDb) {
|
|
301
|
+
return {
|
|
302
|
+
id: `gain-${gainDb}dB`,
|
|
303
|
+
type: 'gain',
|
|
304
|
+
process(buffer, _sampleRate) {
|
|
305
|
+
const gainLinear = Math.pow(10, gainDb / 20);
|
|
306
|
+
for (const ch of buffer) {
|
|
307
|
+
for (let i = 0; i < ch.length; i++) {
|
|
308
|
+
ch[i] *= gainLinear;
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
return buffer;
|
|
312
|
+
},
|
|
313
|
+
};
|
|
314
|
+
}
|
|
315
|
+
/**
|
|
316
|
+
* Create a sample-rate conversion node.
|
|
317
|
+
* Uses linear interpolation for simplicity; a production implementation
|
|
318
|
+
* would use windowed sinc interpolation.
|
|
319
|
+
* @param fromRate Source sample rate
|
|
320
|
+
* @param toRate Target sample rate
|
|
321
|
+
*/
|
|
322
|
+
static createSampleRateConverter(fromRate, toRate) {
|
|
323
|
+
return {
|
|
324
|
+
id: `src-${fromRate}-${toRate}`,
|
|
325
|
+
type: 'sample_rate_convert',
|
|
326
|
+
process(buffer, _sampleRate) {
|
|
327
|
+
if (fromRate === toRate)
|
|
328
|
+
return buffer;
|
|
329
|
+
const ratio = fromRate / toRate;
|
|
330
|
+
const newLength = Math.round(buffer[0].length / ratio);
|
|
331
|
+
const result = [];
|
|
332
|
+
for (const ch of buffer) {
|
|
333
|
+
const output = new Float32Array(newLength);
|
|
334
|
+
for (let i = 0; i < newLength; i++) {
|
|
335
|
+
const srcPos = i * ratio;
|
|
336
|
+
const idx = Math.floor(srcPos);
|
|
337
|
+
const frac = srcPos - idx;
|
|
338
|
+
if (idx + 1 < ch.length) {
|
|
339
|
+
// Linear interpolation
|
|
340
|
+
output[i] = ch[idx] * (1 - frac) + ch[idx + 1] * frac;
|
|
341
|
+
}
|
|
342
|
+
else if (idx < ch.length) {
|
|
343
|
+
output[i] = ch[idx];
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
result.push(output);
|
|
347
|
+
}
|
|
348
|
+
return result;
|
|
349
|
+
},
|
|
350
|
+
};
|
|
351
|
+
}
|
|
352
|
+
/**
|
|
353
|
+
* Create an analyzer node that measures audio characteristics
|
|
354
|
+
* without modifying the signal (pass-through).
|
|
355
|
+
*/
|
|
356
|
+
static createAnalyzerNode() {
|
|
357
|
+
let analysis = {
|
|
358
|
+
peakDb: -Infinity,
|
|
359
|
+
rmsDb: -Infinity,
|
|
360
|
+
lufs: -Infinity,
|
|
361
|
+
truePeakDb: -Infinity,
|
|
362
|
+
dcOffset: 0,
|
|
363
|
+
clippedSamples: 0,
|
|
364
|
+
};
|
|
365
|
+
const node = {
|
|
366
|
+
id: 'analyzer',
|
|
367
|
+
type: 'analyzer',
|
|
368
|
+
process(buffer, _sampleRate) {
|
|
369
|
+
let maxPeak = 0;
|
|
370
|
+
let sumSquared = 0;
|
|
371
|
+
let totalSamples = 0;
|
|
372
|
+
let dcSum = 0;
|
|
373
|
+
let clipped = 0;
|
|
374
|
+
let truePeak = 0;
|
|
375
|
+
for (const ch of buffer) {
|
|
376
|
+
for (let i = 0; i < ch.length; i++) {
|
|
377
|
+
const sample = ch[i];
|
|
378
|
+
const abs = Math.abs(sample);
|
|
379
|
+
if (abs > maxPeak)
|
|
380
|
+
maxPeak = abs;
|
|
381
|
+
sumSquared += sample * sample;
|
|
382
|
+
dcSum += sample;
|
|
383
|
+
totalSamples++;
|
|
384
|
+
if (abs >= 1.0)
|
|
385
|
+
clipped++;
|
|
386
|
+
// Simplified true-peak detection via 4x oversampling estimation
|
|
387
|
+
// In production, this would use proper FIR interpolation
|
|
388
|
+
if (i > 0) {
|
|
389
|
+
const interpolated = Math.abs((ch[i - 1] + ch[i]) / 2);
|
|
390
|
+
if (interpolated > truePeak)
|
|
391
|
+
truePeak = interpolated;
|
|
392
|
+
}
|
|
393
|
+
if (abs > truePeak)
|
|
394
|
+
truePeak = abs;
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
const rms = totalSamples > 0 ? Math.sqrt(sumSquared / totalSamples) : 0;
|
|
398
|
+
const dc = totalSamples > 0 ? dcSum / totalSamples : 0;
|
|
399
|
+
analysis = {
|
|
400
|
+
peakDb: maxPeak > 0 ? 20 * Math.log10(maxPeak) : -Infinity,
|
|
401
|
+
rmsDb: rms > 0 ? 20 * Math.log10(rms) : -Infinity,
|
|
402
|
+
lufs: rms > 0 ? 20 * Math.log10(rms) - 0.691 : -Infinity,
|
|
403
|
+
truePeakDb: truePeak > 0 ? 20 * Math.log10(truePeak) : -Infinity,
|
|
404
|
+
dcOffset: dc,
|
|
405
|
+
clippedSamples: clipped,
|
|
406
|
+
};
|
|
407
|
+
// Pass through unmodified
|
|
408
|
+
return buffer;
|
|
409
|
+
},
|
|
410
|
+
getAnalysis() {
|
|
411
|
+
return Object.assign({}, analysis);
|
|
412
|
+
},
|
|
413
|
+
};
|
|
414
|
+
return node;
|
|
415
|
+
}
|
|
416
|
+
// ===================================================================
|
|
417
|
+
// Private helpers
|
|
418
|
+
// ===================================================================
|
|
419
|
+
/**
|
|
420
|
+
* Encode multi-channel Float32Array[] as a WAV Blob.
|
|
421
|
+
* Supports int16, int24, and float32.
|
|
422
|
+
*/
|
|
423
|
+
_encodeWav(buffer, sampleRate, sampleFormat) {
|
|
424
|
+
var _a, _b, _c, _d;
|
|
425
|
+
const numChannels = buffer.length;
|
|
426
|
+
const numSamples = (_b = (_a = buffer[0]) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0;
|
|
427
|
+
let bytesPerSample;
|
|
428
|
+
let audioFormat; // 1 = PCM integer, 3 = IEEE float
|
|
429
|
+
switch (sampleFormat) {
|
|
430
|
+
case ExportSampleFormat.INT16:
|
|
431
|
+
bytesPerSample = 2;
|
|
432
|
+
audioFormat = 1;
|
|
433
|
+
break;
|
|
434
|
+
case ExportSampleFormat.INT24:
|
|
435
|
+
bytesPerSample = 3;
|
|
436
|
+
audioFormat = 1;
|
|
437
|
+
break;
|
|
438
|
+
case ExportSampleFormat.FLOAT32:
|
|
439
|
+
default:
|
|
440
|
+
bytesPerSample = 4;
|
|
441
|
+
audioFormat = 3;
|
|
442
|
+
break;
|
|
443
|
+
}
|
|
444
|
+
const blockAlign = numChannels * bytesPerSample;
|
|
445
|
+
const dataSize = numSamples * blockAlign;
|
|
446
|
+
const headerSize = 44;
|
|
447
|
+
const arrayBuffer = new ArrayBuffer(headerSize + dataSize);
|
|
448
|
+
const view = new DataView(arrayBuffer);
|
|
449
|
+
// RIFF header
|
|
450
|
+
this._writeString(view, 0, 'RIFF');
|
|
451
|
+
view.setUint32(4, 36 + dataSize, true);
|
|
452
|
+
this._writeString(view, 8, 'WAVE');
|
|
453
|
+
// fmt chunk
|
|
454
|
+
this._writeString(view, 12, 'fmt ');
|
|
455
|
+
view.setUint32(16, 16, true); // chunk size
|
|
456
|
+
view.setUint16(20, audioFormat, true); // audio format
|
|
457
|
+
view.setUint16(22, numChannels, true);
|
|
458
|
+
view.setUint32(24, sampleRate, true);
|
|
459
|
+
view.setUint32(28, sampleRate * blockAlign, true); // byte rate
|
|
460
|
+
view.setUint16(32, blockAlign, true);
|
|
461
|
+
view.setUint16(34, bytesPerSample * 8, true);
|
|
462
|
+
// data chunk
|
|
463
|
+
this._writeString(view, 36, 'data');
|
|
464
|
+
view.setUint32(40, dataSize, true);
|
|
465
|
+
// Interleave and write samples
|
|
466
|
+
let offset = headerSize;
|
|
467
|
+
for (let i = 0; i < numSamples; i++) {
|
|
468
|
+
for (let ch = 0; ch < numChannels; ch++) {
|
|
469
|
+
const sample = (_d = (_c = buffer[ch]) === null || _c === void 0 ? void 0 : _c[i]) !== null && _d !== void 0 ? _d : 0;
|
|
470
|
+
switch (sampleFormat) {
|
|
471
|
+
case ExportSampleFormat.INT16: {
|
|
472
|
+
const clamped = Math.max(-1, Math.min(1, sample));
|
|
473
|
+
const int16 = clamped < 0 ? clamped * 0x8000 : clamped * 0x7FFF;
|
|
474
|
+
view.setInt16(offset, int16, true);
|
|
475
|
+
offset += 2;
|
|
476
|
+
break;
|
|
477
|
+
}
|
|
478
|
+
case ExportSampleFormat.INT24: {
|
|
479
|
+
const clamped = Math.max(-1, Math.min(1, sample));
|
|
480
|
+
const int24 = Math.round(clamped * 0x7FFFFF);
|
|
481
|
+
view.setUint8(offset, int24 & 0xFF);
|
|
482
|
+
view.setUint8(offset + 1, (int24 >> 8) & 0xFF);
|
|
483
|
+
view.setUint8(offset + 2, (int24 >> 16) & 0xFF);
|
|
484
|
+
offset += 3;
|
|
485
|
+
break;
|
|
486
|
+
}
|
|
487
|
+
case ExportSampleFormat.FLOAT32:
|
|
488
|
+
default:
|
|
489
|
+
view.setFloat32(offset, sample, true);
|
|
490
|
+
offset += 4;
|
|
491
|
+
break;
|
|
492
|
+
}
|
|
493
|
+
}
|
|
494
|
+
}
|
|
495
|
+
return new Blob([arrayBuffer], { type: 'audio/wav' });
|
|
496
|
+
}
|
|
497
|
+
/**
|
|
498
|
+
* Wrap raw Float32 data in a generic Blob (placeholder for formats
|
|
499
|
+
* that require external encoders such as MP3, OGG, FLAC).
|
|
500
|
+
*/
|
|
501
|
+
_encodeRaw(buffer, mimeType) {
|
|
502
|
+
var _a, _b, _c, _d;
|
|
503
|
+
// Interleave channels into a single Float32Array
|
|
504
|
+
const numChannels = buffer.length;
|
|
505
|
+
const numSamples = (_b = (_a = buffer[0]) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0;
|
|
506
|
+
const interleaved = new Float32Array(numChannels * numSamples);
|
|
507
|
+
for (let i = 0; i < numSamples; i++) {
|
|
508
|
+
for (let ch = 0; ch < numChannels; ch++) {
|
|
509
|
+
interleaved[i * numChannels + ch] = (_d = (_c = buffer[ch]) === null || _c === void 0 ? void 0 : _c[i]) !== null && _d !== void 0 ? _d : 0;
|
|
510
|
+
}
|
|
511
|
+
}
|
|
512
|
+
return new Blob([interleaved.buffer], { type: mimeType });
|
|
513
|
+
}
|
|
514
|
+
_writeString(view, offset, str) {
|
|
515
|
+
for (let i = 0; i < str.length; i++) {
|
|
516
|
+
view.setUint8(offset + i, str.charCodeAt(i));
|
|
517
|
+
}
|
|
518
|
+
}
|
|
519
|
+
}
|
|
520
|
+
//# sourceMappingURL=ExportGraphBuilder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExportGraphBuilder.js","sourceRoot":"","sources":["../../../src/audio/export/ExportGraphBuilder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { Signal } from '../../lib/Signal';
|
|
2
|
+
import { ExportFormat, ExportSampleFormat, NormalizeMode } from '../../domain/ExportConfig';
|
|
3
|
+
import { DitherType } from '../../utils/DitherProcessor';
|
|
4
|
+
/**
|
|
5
|
+
* A partial export configuration used in presets.
|
|
6
|
+
* Mirrors the relevant fields from ExportConfig.
|
|
7
|
+
*/
|
|
8
|
+
export interface ExportPresetConfig {
|
|
9
|
+
format?: ExportFormat;
|
|
10
|
+
sampleFormat?: ExportSampleFormat;
|
|
11
|
+
sampleRate?: number;
|
|
12
|
+
bitrate?: number;
|
|
13
|
+
quality?: number;
|
|
14
|
+
ditherType?: DitherType;
|
|
15
|
+
normalize?: boolean;
|
|
16
|
+
normalizeMode?: NormalizeMode;
|
|
17
|
+
targetPeakDb?: number;
|
|
18
|
+
targetLufs?: number;
|
|
19
|
+
truePeakLimit?: boolean;
|
|
20
|
+
truePeakCeiling?: number;
|
|
21
|
+
exportMasterOnly?: boolean;
|
|
22
|
+
stemExport?: boolean;
|
|
23
|
+
splitMono?: boolean;
|
|
24
|
+
filenameTemplate?: string;
|
|
25
|
+
silencePaddingStart?: number;
|
|
26
|
+
silencePaddingEnd?: number;
|
|
27
|
+
trimSilence?: boolean;
|
|
28
|
+
exportCdMarkers?: boolean;
|
|
29
|
+
cdMarkerFormat?: 'cue' | 'toc' | 'mp4ch';
|
|
30
|
+
bwfMetadata?: boolean;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* A saved export configuration snapshot for quick recall.
|
|
34
|
+
*/
|
|
35
|
+
export interface ExportPreset {
|
|
36
|
+
id: string;
|
|
37
|
+
name: string;
|
|
38
|
+
version: number;
|
|
39
|
+
config: ExportPresetConfig;
|
|
40
|
+
createdAt: string;
|
|
41
|
+
updatedAt: string;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Manages a collection of export presets, both user-created and built-in.
|
|
45
|
+
*/
|
|
46
|
+
export declare class ExportPresetManager {
|
|
47
|
+
private _presets;
|
|
48
|
+
/** Emitted whenever the preset list or any preset changes. */
|
|
49
|
+
readonly presetsChanged: Signal<void>;
|
|
50
|
+
constructor();
|
|
51
|
+
/**
|
|
52
|
+
* Create a new preset from the given config.
|
|
53
|
+
*/
|
|
54
|
+
addPreset(name: string, config: ExportPresetConfig): ExportPreset;
|
|
55
|
+
/**
|
|
56
|
+
* Update an existing preset's configuration.
|
|
57
|
+
*/
|
|
58
|
+
updatePreset(id: string, config: ExportPresetConfig): void;
|
|
59
|
+
/**
|
|
60
|
+
* Remove a preset by id.
|
|
61
|
+
*/
|
|
62
|
+
removePreset(id: string): void;
|
|
63
|
+
/**
|
|
64
|
+
* Get a single preset by id.
|
|
65
|
+
*/
|
|
66
|
+
getPreset(id: string): ExportPreset | undefined;
|
|
67
|
+
/**
|
|
68
|
+
* Get all presets, sorted by name.
|
|
69
|
+
*/
|
|
70
|
+
getAllPresets(): ExportPreset[];
|
|
71
|
+
/**
|
|
72
|
+
* Returns the built-in default presets covering common export workflows.
|
|
73
|
+
*/
|
|
74
|
+
static getDefaultPresets(): ExportPreset[];
|
|
75
|
+
/**
|
|
76
|
+
* Serialize the preset manager to a JSON string for persistence.
|
|
77
|
+
*/
|
|
78
|
+
serialize(): string;
|
|
79
|
+
/**
|
|
80
|
+
* Deserialize from a JSON string and return a new ExportPresetManager.
|
|
81
|
+
* User presets from the JSON are merged on top of the defaults.
|
|
82
|
+
*/
|
|
83
|
+
static deserialize(json: string): ExportPresetManager;
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=ExportPresetManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExportPresetManager.d.ts","sourceRoot":"","sources":["../../../src/audio/export/ExportPresetManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC5F,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAEzD;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IAC/B,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,YAAY,CAAC,EAAE,kBAAkB,CAAC;IAClC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,cAAc,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,OAAO,CAAC;IACzC,WAAW,CAAC,EAAE,OAAO,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,kBAAkB,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACrB;AAUD;;GAEG;AACH,qBAAa,mBAAmB;IAC5B,OAAO,CAAC,QAAQ,CAA4B;IAE5C,8DAA8D;IAC9D,SAAgB,cAAc,eAAsB;;IAapD;;OAEG;IACI,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,GAAG,YAAY;IAexE;;OAEG;IACI,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,GAAG,IAAI;IAYjE;;OAEG;IACI,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAQrC;;OAEG;IACI,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAKtD;;OAEG;IACI,aAAa,IAAI,YAAY,EAAE;IAQtC;;OAEG;IACH,MAAM,CAAC,iBAAiB,IAAI,YAAY,EAAE;IAmM1C;;OAEG;IACI,SAAS,IAAI,MAAM;IAQ1B;;;OAGG;IACH,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,mBAAmB;CA0BxD"}
|