@drop-ai/core 0.2.0
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 -0
- package/README.md +316 -0
- package/dist/actions/ActionRegistry.d.ts +33 -0
- package/dist/actions/ActionRegistry.d.ts.map +1 -0
- package/dist/actions/ActionRegistry.js +96 -0
- package/dist/actions/ActionRegistry.js.map +1 -0
- package/dist/actions/types.d.ts +31 -0
- package/dist/actions/types.d.ts.map +1 -0
- package/dist/actions/types.js +11 -0
- package/dist/actions/types.js.map +1 -0
- package/dist/analysis/TransientDetector.d.ts +28 -0
- package/dist/analysis/TransientDetector.d.ts.map +1 -0
- package/dist/analysis/TransientDetector.js +109 -0
- package/dist/analysis/TransientDetector.js.map +1 -0
- package/dist/audio/AudioEngine.d.ts +107 -0
- package/dist/audio/AudioEngine.d.ts.map +1 -0
- package/dist/audio/AudioEngine.js +798 -0
- package/dist/audio/AudioEngine.js.map +1 -0
- package/dist/audio/AudioProvider.d.ts +96 -0
- package/dist/audio/AudioProvider.d.ts.map +1 -0
- package/dist/audio/AudioProvider.js +2 -0
- package/dist/audio/AudioProvider.js.map +1 -0
- package/dist/audio/BufferPool.d.ts +92 -0
- package/dist/audio/BufferPool.d.ts.map +1 -0
- package/dist/audio/BufferPool.js +172 -0
- package/dist/audio/BufferPool.js.map +1 -0
- package/dist/audio/LoudnessUtils.d.ts +18 -0
- package/dist/audio/LoudnessUtils.d.ts.map +1 -0
- package/dist/audio/LoudnessUtils.js +91 -0
- package/dist/audio/LoudnessUtils.js.map +1 -0
- package/dist/audio/MeterUtils.d.ts +37 -0
- package/dist/audio/MeterUtils.d.ts.map +1 -0
- package/dist/audio/MeterUtils.js +71 -0
- package/dist/audio/MeterUtils.js.map +1 -0
- package/dist/audio/OfflineExporter.d.ts +48 -0
- package/dist/audio/OfflineExporter.d.ts.map +1 -0
- package/dist/audio/OfflineExporter.js +202 -0
- package/dist/audio/OfflineExporter.js.map +1 -0
- package/dist/audio/ProcessingGraph.d.ts +152 -0
- package/dist/audio/ProcessingGraph.d.ts.map +1 -0
- package/dist/audio/ProcessingGraph.js +360 -0
- package/dist/audio/ProcessingGraph.js.map +1 -0
- package/dist/audio/SourceCache.d.ts +124 -0
- package/dist/audio/SourceCache.d.ts.map +1 -0
- package/dist/audio/SourceCache.js +205 -0
- package/dist/audio/SourceCache.js.map +1 -0
- package/dist/audio/dto.d.ts +50 -0
- package/dist/audio/dto.d.ts.map +1 -0
- package/dist/audio/dto.js +2 -0
- package/dist/audio/dto.js.map +1 -0
- package/dist/audio/engine/PlaylistEngine.d.ts +19 -0
- package/dist/audio/engine/PlaylistEngine.d.ts.map +1 -0
- package/dist/audio/engine/PlaylistEngine.js +83 -0
- package/dist/audio/engine/PlaylistEngine.js.map +1 -0
- package/dist/automation/AutomationCurve.d.ts +61 -0
- package/dist/automation/AutomationCurve.d.ts.map +1 -0
- package/dist/automation/AutomationCurve.js +198 -0
- package/dist/automation/AutomationCurve.js.map +1 -0
- package/dist/automation/AutomationList.d.ts +185 -0
- package/dist/automation/AutomationList.d.ts.map +1 -0
- package/dist/automation/AutomationList.js +459 -0
- package/dist/automation/AutomationList.js.map +1 -0
- package/dist/automation/AutomationMode.d.ts +17 -0
- package/dist/automation/AutomationMode.d.ts.map +1 -0
- package/dist/automation/AutomationMode.js +18 -0
- package/dist/automation/AutomationMode.js.map +1 -0
- package/dist/automation/ParameterDescriptor.d.ts +65 -0
- package/dist/automation/ParameterDescriptor.d.ts.map +1 -0
- package/dist/automation/ParameterDescriptor.js +113 -0
- package/dist/automation/ParameterDescriptor.js.map +1 -0
- package/dist/automation/PointThinning.d.ts +14 -0
- package/dist/automation/PointThinning.d.ts.map +1 -0
- package/dist/automation/PointThinning.js +52 -0
- package/dist/automation/PointThinning.js.map +1 -0
- package/dist/automation/types.d.ts +14 -0
- package/dist/automation/types.d.ts.map +1 -0
- package/dist/automation/types.js +9 -0
- package/dist/automation/types.js.map +1 -0
- package/dist/commands/Command.d.ts +8 -0
- package/dist/commands/Command.d.ts.map +1 -0
- package/dist/commands/Command.js +2 -0
- package/dist/commands/Command.js.map +1 -0
- package/dist/commands/CommandExecutor.d.ts +36 -0
- package/dist/commands/CommandExecutor.d.ts.map +1 -0
- package/dist/commands/CommandExecutor.js +108 -0
- package/dist/commands/CommandExecutor.js.map +1 -0
- package/dist/commands/CommandHistory.d.ts +155 -0
- package/dist/commands/CommandHistory.d.ts.map +1 -0
- package/dist/commands/CommandHistory.js +316 -0
- package/dist/commands/CommandHistory.js.map +1 -0
- package/dist/commands/CommandRegistry.d.ts +110 -0
- package/dist/commands/CommandRegistry.d.ts.map +1 -0
- package/dist/commands/CommandRegistry.js +91 -0
- package/dist/commands/CommandRegistry.js.map +1 -0
- package/dist/commands/UndoTransaction.d.ts +54 -0
- package/dist/commands/UndoTransaction.d.ts.map +1 -0
- package/dist/commands/UndoTransaction.js +77 -0
- package/dist/commands/UndoTransaction.js.map +1 -0
- package/dist/commands/handlers/AutomationHandler.d.ts +14 -0
- package/dist/commands/handlers/AutomationHandler.d.ts.map +1 -0
- package/dist/commands/handlers/AutomationHandler.js +84 -0
- package/dist/commands/handlers/AutomationHandler.js.map +1 -0
- package/dist/commands/handlers/CommandHandler.d.ts +57 -0
- package/dist/commands/handlers/CommandHandler.d.ts.map +1 -0
- package/dist/commands/handlers/CommandHandler.js +22 -0
- package/dist/commands/handlers/CommandHandler.js.map +1 -0
- package/dist/commands/handlers/ExportHandler.d.ts +14 -0
- package/dist/commands/handlers/ExportHandler.d.ts.map +1 -0
- package/dist/commands/handlers/ExportHandler.js +166 -0
- package/dist/commands/handlers/ExportHandler.js.map +1 -0
- package/dist/commands/handlers/HistoryHandler.d.ts +29 -0
- package/dist/commands/handlers/HistoryHandler.d.ts.map +1 -0
- package/dist/commands/handlers/HistoryHandler.js +124 -0
- package/dist/commands/handlers/HistoryHandler.js.map +1 -0
- package/dist/commands/handlers/IOHandler.d.ts +14 -0
- package/dist/commands/handlers/IOHandler.d.ts.map +1 -0
- package/dist/commands/handlers/IOHandler.js +59 -0
- package/dist/commands/handlers/IOHandler.js.map +1 -0
- package/dist/commands/handlers/MarkerHandler.d.ts +13 -0
- package/dist/commands/handlers/MarkerHandler.d.ts.map +1 -0
- package/dist/commands/handlers/MarkerHandler.js +95 -0
- package/dist/commands/handlers/MarkerHandler.js.map +1 -0
- package/dist/commands/handlers/MidiHandler.d.ts +14 -0
- package/dist/commands/handlers/MidiHandler.d.ts.map +1 -0
- package/dist/commands/handlers/MidiHandler.js +153 -0
- package/dist/commands/handlers/MidiHandler.js.map +1 -0
- package/dist/commands/handlers/MixerSceneHandler.d.ts +12 -0
- package/dist/commands/handlers/MixerSceneHandler.d.ts.map +1 -0
- package/dist/commands/handlers/MixerSceneHandler.js +113 -0
- package/dist/commands/handlers/MixerSceneHandler.js.map +1 -0
- package/dist/commands/handlers/RangeHandler.d.ts +14 -0
- package/dist/commands/handlers/RangeHandler.d.ts.map +1 -0
- package/dist/commands/handlers/RangeHandler.js +108 -0
- package/dist/commands/handlers/RangeHandler.js.map +1 -0
- package/dist/commands/handlers/RegionHandler.d.ts +14 -0
- package/dist/commands/handlers/RegionHandler.d.ts.map +1 -0
- package/dist/commands/handlers/RegionHandler.js +313 -0
- package/dist/commands/handlers/RegionHandler.js.map +1 -0
- package/dist/commands/handlers/SendBusHandler.d.ts +14 -0
- package/dist/commands/handlers/SendBusHandler.d.ts.map +1 -0
- package/dist/commands/handlers/SendBusHandler.js +55 -0
- package/dist/commands/handlers/SendBusHandler.js.map +1 -0
- package/dist/commands/handlers/SessionHandler.d.ts +14 -0
- package/dist/commands/handlers/SessionHandler.d.ts.map +1 -0
- package/dist/commands/handlers/SessionHandler.js +80 -0
- package/dist/commands/handlers/SessionHandler.js.map +1 -0
- package/dist/commands/handlers/TrackGroupHandler.d.ts +18 -0
- package/dist/commands/handlers/TrackGroupHandler.d.ts.map +1 -0
- package/dist/commands/handlers/TrackGroupHandler.js +210 -0
- package/dist/commands/handlers/TrackGroupHandler.js.map +1 -0
- package/dist/commands/handlers/TrackHandler.d.ts +14 -0
- package/dist/commands/handlers/TrackHandler.d.ts.map +1 -0
- package/dist/commands/handlers/TrackHandler.js +241 -0
- package/dist/commands/handlers/TrackHandler.js.map +1 -0
- package/dist/commands/handlers/TransportHandler.d.ts +14 -0
- package/dist/commands/handlers/TransportHandler.d.ts.map +1 -0
- package/dist/commands/handlers/TransportHandler.js +117 -0
- package/dist/commands/handlers/TransportHandler.js.map +1 -0
- package/dist/commands/handlers/index.d.ts +18 -0
- package/dist/commands/handlers/index.d.ts.map +1 -0
- package/dist/commands/handlers/index.js +17 -0
- package/dist/commands/handlers/index.js.map +1 -0
- package/dist/commands/impl/AddAutomationPointCommand.d.ts +20 -0
- package/dist/commands/impl/AddAutomationPointCommand.d.ts.map +1 -0
- package/dist/commands/impl/AddAutomationPointCommand.js +45 -0
- package/dist/commands/impl/AddAutomationPointCommand.js.map +1 -0
- package/dist/commands/impl/AddAuxTrackCommand.d.ts +11 -0
- package/dist/commands/impl/AddAuxTrackCommand.d.ts.map +1 -0
- package/dist/commands/impl/AddAuxTrackCommand.js +23 -0
- package/dist/commands/impl/AddAuxTrackCommand.js.map +1 -0
- package/dist/commands/impl/AddBusTrackCommand.d.ts +11 -0
- package/dist/commands/impl/AddBusTrackCommand.d.ts.map +1 -0
- package/dist/commands/impl/AddBusTrackCommand.js +23 -0
- package/dist/commands/impl/AddBusTrackCommand.js.map +1 -0
- package/dist/commands/impl/AddMarkerCommand.d.ts +13 -0
- package/dist/commands/impl/AddMarkerCommand.d.ts.map +1 -0
- package/dist/commands/impl/AddMarkerCommand.js +25 -0
- package/dist/commands/impl/AddMarkerCommand.js.map +1 -0
- package/dist/commands/impl/AddMidiNoteCommand.d.ts +22 -0
- package/dist/commands/impl/AddMidiNoteCommand.d.ts.map +1 -0
- package/dist/commands/impl/AddMidiNoteCommand.js +45 -0
- package/dist/commands/impl/AddMidiNoteCommand.js.map +1 -0
- package/dist/commands/impl/AddPluginCommand.d.ts +19 -0
- package/dist/commands/impl/AddPluginCommand.d.ts.map +1 -0
- package/dist/commands/impl/AddPluginCommand.js +43 -0
- package/dist/commands/impl/AddPluginCommand.js.map +1 -0
- package/dist/commands/impl/AddRangeCommand.d.ts +19 -0
- package/dist/commands/impl/AddRangeCommand.d.ts.map +1 -0
- package/dist/commands/impl/AddRangeCommand.js +32 -0
- package/dist/commands/impl/AddRangeCommand.js.map +1 -0
- package/dist/commands/impl/AddRegionCommand.d.ts +19 -0
- package/dist/commands/impl/AddRegionCommand.d.ts.map +1 -0
- package/dist/commands/impl/AddRegionCommand.js +58 -0
- package/dist/commands/impl/AddRegionCommand.js.map +1 -0
- package/dist/commands/impl/AddSendBusCommand.d.ts +23 -0
- package/dist/commands/impl/AddSendBusCommand.d.ts.map +1 -0
- package/dist/commands/impl/AddSendBusCommand.js +30 -0
- package/dist/commands/impl/AddSendBusCommand.js.map +1 -0
- package/dist/commands/impl/AddSourceCommand.d.ts +12 -0
- package/dist/commands/impl/AddSourceCommand.d.ts.map +1 -0
- package/dist/commands/impl/AddSourceCommand.js +16 -0
- package/dist/commands/impl/AddSourceCommand.js.map +1 -0
- package/dist/commands/impl/AddTempoChangeCommand.d.ts +15 -0
- package/dist/commands/impl/AddTempoChangeCommand.d.ts.map +1 -0
- package/dist/commands/impl/AddTempoChangeCommand.js +45 -0
- package/dist/commands/impl/AddTempoChangeCommand.js.map +1 -0
- package/dist/commands/impl/AddTrackCommand.d.ts +13 -0
- package/dist/commands/impl/AddTrackCommand.d.ts.map +1 -0
- package/dist/commands/impl/AddTrackCommand.js +26 -0
- package/dist/commands/impl/AddTrackCommand.js.map +1 -0
- package/dist/commands/impl/ConnectIOCommand.d.ts +13 -0
- package/dist/commands/impl/ConnectIOCommand.d.ts.map +1 -0
- package/dist/commands/impl/ConnectIOCommand.js +31 -0
- package/dist/commands/impl/ConnectIOCommand.js.map +1 -0
- package/dist/commands/impl/CopyRegionCommand.d.ts +12 -0
- package/dist/commands/impl/CopyRegionCommand.d.ts.map +1 -0
- package/dist/commands/impl/CopyRegionCommand.js +42 -0
- package/dist/commands/impl/CopyRegionCommand.js.map +1 -0
- package/dist/commands/impl/DisconnectIOCommand.d.ts +13 -0
- package/dist/commands/impl/DisconnectIOCommand.d.ts.map +1 -0
- package/dist/commands/impl/DisconnectIOCommand.js +24 -0
- package/dist/commands/impl/DisconnectIOCommand.js.map +1 -0
- package/dist/commands/impl/DuplicateRegionCommand.d.ts +15 -0
- package/dist/commands/impl/DuplicateRegionCommand.d.ts.map +1 -0
- package/dist/commands/impl/DuplicateRegionCommand.js +49 -0
- package/dist/commands/impl/DuplicateRegionCommand.js.map +1 -0
- package/dist/commands/impl/ExportCommand.d.ts +17 -0
- package/dist/commands/impl/ExportCommand.d.ts.map +1 -0
- package/dist/commands/impl/ExportCommand.js +92 -0
- package/dist/commands/impl/ExportCommand.js.map +1 -0
- package/dist/commands/impl/FreezeTrackCommand.d.ts +25 -0
- package/dist/commands/impl/FreezeTrackCommand.d.ts.map +1 -0
- package/dist/commands/impl/FreezeTrackCommand.js +94 -0
- package/dist/commands/impl/FreezeTrackCommand.js.map +1 -0
- package/dist/commands/impl/GroupRegionsCommand.d.ts +15 -0
- package/dist/commands/impl/GroupRegionsCommand.d.ts.map +1 -0
- package/dist/commands/impl/GroupRegionsCommand.js +28 -0
- package/dist/commands/impl/GroupRegionsCommand.js.map +1 -0
- package/dist/commands/impl/LoadSessionCommand.d.ts +24 -0
- package/dist/commands/impl/LoadSessionCommand.d.ts.map +1 -0
- package/dist/commands/impl/LoadSessionCommand.js +77 -0
- package/dist/commands/impl/LoadSessionCommand.js.map +1 -0
- package/dist/commands/impl/LockRegionCommand.d.ts +16 -0
- package/dist/commands/impl/LockRegionCommand.d.ts.map +1 -0
- package/dist/commands/impl/LockRegionCommand.js +37 -0
- package/dist/commands/impl/LockRegionCommand.js.map +1 -0
- package/dist/commands/impl/MergeRegionsCommand.d.ts +19 -0
- package/dist/commands/impl/MergeRegionsCommand.d.ts.map +1 -0
- package/dist/commands/impl/MergeRegionsCommand.js +85 -0
- package/dist/commands/impl/MergeRegionsCommand.js.map +1 -0
- package/dist/commands/impl/MoveAutomationPointCommand.d.ts +20 -0
- package/dist/commands/impl/MoveAutomationPointCommand.d.ts.map +1 -0
- package/dist/commands/impl/MoveAutomationPointCommand.js +73 -0
- package/dist/commands/impl/MoveAutomationPointCommand.js.map +1 -0
- package/dist/commands/impl/MoveMarkerCommand.d.ts +13 -0
- package/dist/commands/impl/MoveMarkerCommand.d.ts.map +1 -0
- package/dist/commands/impl/MoveMarkerCommand.js +29 -0
- package/dist/commands/impl/MoveMarkerCommand.js.map +1 -0
- package/dist/commands/impl/MoveMidiNoteCommand.d.ts +20 -0
- package/dist/commands/impl/MoveMidiNoteCommand.d.ts.map +1 -0
- package/dist/commands/impl/MoveMidiNoteCommand.js +55 -0
- package/dist/commands/impl/MoveMidiNoteCommand.js.map +1 -0
- package/dist/commands/impl/MoveRegionCommand.d.ts +22 -0
- package/dist/commands/impl/MoveRegionCommand.d.ts.map +1 -0
- package/dist/commands/impl/MoveRegionCommand.js +148 -0
- package/dist/commands/impl/MoveRegionCommand.js.map +1 -0
- package/dist/commands/impl/NewSessionCommand.d.ts +17 -0
- package/dist/commands/impl/NewSessionCommand.d.ts.map +1 -0
- package/dist/commands/impl/NewSessionCommand.js +88 -0
- package/dist/commands/impl/NewSessionCommand.js.map +1 -0
- package/dist/commands/impl/NormalizeRegionCommand.d.ts +24 -0
- package/dist/commands/impl/NormalizeRegionCommand.d.ts.map +1 -0
- package/dist/commands/impl/NormalizeRegionCommand.js +60 -0
- package/dist/commands/impl/NormalizeRegionCommand.js.map +1 -0
- package/dist/commands/impl/PasteRegionCommand.d.ts +18 -0
- package/dist/commands/impl/PasteRegionCommand.d.ts.map +1 -0
- package/dist/commands/impl/PasteRegionCommand.js +66 -0
- package/dist/commands/impl/PasteRegionCommand.js.map +1 -0
- package/dist/commands/impl/RemoveAutomationPointCommand.d.ts +17 -0
- package/dist/commands/impl/RemoveAutomationPointCommand.d.ts.map +1 -0
- package/dist/commands/impl/RemoveAutomationPointCommand.js +69 -0
- package/dist/commands/impl/RemoveAutomationPointCommand.js.map +1 -0
- package/dist/commands/impl/RemoveMarkerCommand.d.ts +14 -0
- package/dist/commands/impl/RemoveMarkerCommand.d.ts.map +1 -0
- package/dist/commands/impl/RemoveMarkerCommand.js +32 -0
- package/dist/commands/impl/RemoveMarkerCommand.js.map +1 -0
- package/dist/commands/impl/RemoveMidiNoteCommand.d.ts +16 -0
- package/dist/commands/impl/RemoveMidiNoteCommand.d.ts.map +1 -0
- package/dist/commands/impl/RemoveMidiNoteCommand.js +38 -0
- package/dist/commands/impl/RemoveMidiNoteCommand.js.map +1 -0
- package/dist/commands/impl/RemovePluginCommand.d.ts +17 -0
- package/dist/commands/impl/RemovePluginCommand.d.ts.map +1 -0
- package/dist/commands/impl/RemovePluginCommand.js +55 -0
- package/dist/commands/impl/RemovePluginCommand.js.map +1 -0
- package/dist/commands/impl/RemoveRangeCommand.d.ts +15 -0
- package/dist/commands/impl/RemoveRangeCommand.d.ts.map +1 -0
- package/dist/commands/impl/RemoveRangeCommand.js +34 -0
- package/dist/commands/impl/RemoveRangeCommand.js.map +1 -0
- package/dist/commands/impl/RemoveRegionCommand.d.ts +17 -0
- package/dist/commands/impl/RemoveRegionCommand.d.ts.map +1 -0
- package/dist/commands/impl/RemoveRegionCommand.js +58 -0
- package/dist/commands/impl/RemoveRegionCommand.js.map +1 -0
- package/dist/commands/impl/RemoveSendBusCommand.d.ts +17 -0
- package/dist/commands/impl/RemoveSendBusCommand.d.ts.map +1 -0
- package/dist/commands/impl/RemoveSendBusCommand.js +34 -0
- package/dist/commands/impl/RemoveSendBusCommand.js.map +1 -0
- package/dist/commands/impl/RemoveTempoChangeCommand.d.ts +11 -0
- package/dist/commands/impl/RemoveTempoChangeCommand.d.ts.map +1 -0
- package/dist/commands/impl/RemoveTempoChangeCommand.js +32 -0
- package/dist/commands/impl/RemoveTempoChangeCommand.js.map +1 -0
- package/dist/commands/impl/RemoveTrackCommand.d.ts +11 -0
- package/dist/commands/impl/RemoveTrackCommand.d.ts.map +1 -0
- package/dist/commands/impl/RemoveTrackCommand.js +28 -0
- package/dist/commands/impl/RemoveTrackCommand.js.map +1 -0
- package/dist/commands/impl/ReorderTrackCommand.d.ts +15 -0
- package/dist/commands/impl/ReorderTrackCommand.d.ts.map +1 -0
- package/dist/commands/impl/ReorderTrackCommand.js +25 -0
- package/dist/commands/impl/ReorderTrackCommand.js.map +1 -0
- package/dist/commands/impl/ResizeRegionCommand.d.ts +18 -0
- package/dist/commands/impl/ResizeRegionCommand.d.ts.map +1 -0
- package/dist/commands/impl/ResizeRegionCommand.js +65 -0
- package/dist/commands/impl/ResizeRegionCommand.js.map +1 -0
- package/dist/commands/impl/ReverseRegionCommand.d.ts +22 -0
- package/dist/commands/impl/ReverseRegionCommand.d.ts.map +1 -0
- package/dist/commands/impl/ReverseRegionCommand.js +50 -0
- package/dist/commands/impl/ReverseRegionCommand.js.map +1 -0
- package/dist/commands/impl/SaveSessionCommand.d.ts +11 -0
- package/dist/commands/impl/SaveSessionCommand.d.ts.map +1 -0
- package/dist/commands/impl/SaveSessionCommand.js +33 -0
- package/dist/commands/impl/SaveSessionCommand.js.map +1 -0
- package/dist/commands/impl/SaveSnapshotCommand.d.ts +15 -0
- package/dist/commands/impl/SaveSnapshotCommand.d.ts.map +1 -0
- package/dist/commands/impl/SaveSnapshotCommand.js +34 -0
- package/dist/commands/impl/SaveSnapshotCommand.js.map +1 -0
- package/dist/commands/impl/SetGridCommand.d.ts +20 -0
- package/dist/commands/impl/SetGridCommand.d.ts.map +1 -0
- package/dist/commands/impl/SetGridCommand.js +35 -0
- package/dist/commands/impl/SetGridCommand.js.map +1 -0
- package/dist/commands/impl/SetLoopRangeCommand.d.ts +18 -0
- package/dist/commands/impl/SetLoopRangeCommand.d.ts.map +1 -0
- package/dist/commands/impl/SetLoopRangeCommand.js +44 -0
- package/dist/commands/impl/SetLoopRangeCommand.js.map +1 -0
- package/dist/commands/impl/SetPluginParameterCommand.d.ts +16 -0
- package/dist/commands/impl/SetPluginParameterCommand.d.ts.map +1 -0
- package/dist/commands/impl/SetPluginParameterCommand.js +49 -0
- package/dist/commands/impl/SetPluginParameterCommand.js.map +1 -0
- package/dist/commands/impl/SetPunchRangeCommand.d.ts +18 -0
- package/dist/commands/impl/SetPunchRangeCommand.d.ts.map +1 -0
- package/dist/commands/impl/SetPunchRangeCommand.js +42 -0
- package/dist/commands/impl/SetPunchRangeCommand.js.map +1 -0
- package/dist/commands/impl/SetRangeCommand.d.ts +27 -0
- package/dist/commands/impl/SetRangeCommand.d.ts.map +1 -0
- package/dist/commands/impl/SetRangeCommand.js +66 -0
- package/dist/commands/impl/SetRangeCommand.js.map +1 -0
- package/dist/commands/impl/SetRegionFadesCommand.d.ts +16 -0
- package/dist/commands/impl/SetRegionFadesCommand.d.ts.map +1 -0
- package/dist/commands/impl/SetRegionFadesCommand.js +46 -0
- package/dist/commands/impl/SetRegionFadesCommand.js.map +1 -0
- package/dist/commands/impl/SetRegionPlaybackRateCommand.d.ts +23 -0
- package/dist/commands/impl/SetRegionPlaybackRateCommand.d.ts.map +1 -0
- package/dist/commands/impl/SetRegionPlaybackRateCommand.js +46 -0
- package/dist/commands/impl/SetRegionPlaybackRateCommand.js.map +1 -0
- package/dist/commands/impl/SetRegionTimeDomainCommand.d.ts +16 -0
- package/dist/commands/impl/SetRegionTimeDomainCommand.d.ts.map +1 -0
- package/dist/commands/impl/SetRegionTimeDomainCommand.js +42 -0
- package/dist/commands/impl/SetRegionTimeDomainCommand.js.map +1 -0
- package/dist/commands/impl/SetSendLevelCommand.d.ts +18 -0
- package/dist/commands/impl/SetSendLevelCommand.d.ts.map +1 -0
- package/dist/commands/impl/SetSendLevelCommand.js +35 -0
- package/dist/commands/impl/SetSendLevelCommand.js.map +1 -0
- package/dist/commands/impl/SetTrackMuteCommand.d.ts +15 -0
- package/dist/commands/impl/SetTrackMuteCommand.d.ts.map +1 -0
- package/dist/commands/impl/SetTrackMuteCommand.js +29 -0
- package/dist/commands/impl/SetTrackMuteCommand.js.map +1 -0
- package/dist/commands/impl/SetTrackPanCommand.d.ts +15 -0
- package/dist/commands/impl/SetTrackPanCommand.d.ts.map +1 -0
- package/dist/commands/impl/SetTrackPanCommand.js +29 -0
- package/dist/commands/impl/SetTrackPanCommand.js.map +1 -0
- package/dist/commands/impl/SetTrackSoloCommand.d.ts +15 -0
- package/dist/commands/impl/SetTrackSoloCommand.d.ts.map +1 -0
- package/dist/commands/impl/SetTrackSoloCommand.js +29 -0
- package/dist/commands/impl/SetTrackSoloCommand.js.map +1 -0
- package/dist/commands/impl/SetTrackVolumeCommand.d.ts +15 -0
- package/dist/commands/impl/SetTrackVolumeCommand.d.ts.map +1 -0
- package/dist/commands/impl/SetTrackVolumeCommand.js +29 -0
- package/dist/commands/impl/SetTrackVolumeCommand.js.map +1 -0
- package/dist/commands/impl/SplitAtPlayheadCommand.d.ts +32 -0
- package/dist/commands/impl/SplitAtPlayheadCommand.d.ts.map +1 -0
- package/dist/commands/impl/SplitAtPlayheadCommand.js +100 -0
- package/dist/commands/impl/SplitAtPlayheadCommand.js.map +1 -0
- package/dist/commands/impl/SplitRegionCommand.d.ts +22 -0
- package/dist/commands/impl/SplitRegionCommand.d.ts.map +1 -0
- package/dist/commands/impl/SplitRegionCommand.js +69 -0
- package/dist/commands/impl/SplitRegionCommand.js.map +1 -0
- package/dist/commands/impl/StripSilenceCommand.d.ts +26 -0
- package/dist/commands/impl/StripSilenceCommand.d.ts.map +1 -0
- package/dist/commands/impl/StripSilenceCommand.js +83 -0
- package/dist/commands/impl/StripSilenceCommand.js.map +1 -0
- package/dist/commands/impl/TimeStretchRegionCommand.d.ts +28 -0
- package/dist/commands/impl/TimeStretchRegionCommand.d.ts.map +1 -0
- package/dist/commands/impl/TimeStretchRegionCommand.js +55 -0
- package/dist/commands/impl/TimeStretchRegionCommand.js.map +1 -0
- package/dist/commands/impl/ToggleLoopCommand.d.ts +12 -0
- package/dist/commands/impl/ToggleLoopCommand.d.ts.map +1 -0
- package/dist/commands/impl/ToggleLoopCommand.js +27 -0
- package/dist/commands/impl/ToggleLoopCommand.js.map +1 -0
- package/dist/commands/impl/TrimRegionCommand.d.ts +22 -0
- package/dist/commands/impl/TrimRegionCommand.d.ts.map +1 -0
- package/dist/commands/impl/TrimRegionCommand.js +92 -0
- package/dist/commands/impl/TrimRegionCommand.js.map +1 -0
- package/dist/commands/impl/UngroupRegionsCommand.d.ts +14 -0
- package/dist/commands/impl/UngroupRegionsCommand.d.ts.map +1 -0
- package/dist/commands/impl/UngroupRegionsCommand.js +28 -0
- package/dist/commands/impl/UngroupRegionsCommand.js.map +1 -0
- package/dist/commands/types.d.ts +1895 -0
- package/dist/commands/types.d.ts.map +1 -0
- package/dist/commands/types.js +1338 -0
- package/dist/commands/types.js.map +1 -0
- package/dist/domain/ABComparison.d.ts +33 -0
- package/dist/domain/ABComparison.d.ts.map +1 -0
- package/dist/domain/ABComparison.js +78 -0
- package/dist/domain/ABComparison.js.map +1 -0
- package/dist/domain/CDMarker.d.ts +36 -0
- package/dist/domain/CDMarker.d.ts.map +1 -0
- package/dist/domain/CDMarker.js +78 -0
- package/dist/domain/CDMarker.js.map +1 -0
- package/dist/domain/ClockMode.d.ts +19 -0
- package/dist/domain/ClockMode.d.ts.map +1 -0
- package/dist/domain/ClockMode.js +65 -0
- package/dist/domain/ClockMode.js.map +1 -0
- package/dist/domain/CrossfadeEngine.d.ts +27 -0
- package/dist/domain/CrossfadeEngine.d.ts.map +1 -0
- package/dist/domain/CrossfadeEngine.js +47 -0
- package/dist/domain/CrossfadeEngine.js.map +1 -0
- package/dist/domain/DragManager.d.ts +21 -0
- package/dist/domain/DragManager.d.ts.map +1 -0
- package/dist/domain/DragManager.js +37 -0
- package/dist/domain/DragManager.js.map +1 -0
- package/dist/domain/EditMode.d.ts +15 -0
- package/dist/domain/EditMode.d.ts.map +1 -0
- package/dist/domain/EditMode.js +16 -0
- package/dist/domain/EditMode.js.map +1 -0
- package/dist/domain/ExportConfig.d.ts +55 -0
- package/dist/domain/ExportConfig.d.ts.map +1 -0
- package/dist/domain/ExportConfig.js +115 -0
- package/dist/domain/ExportConfig.js.map +1 -0
- package/dist/domain/ExportStatus.d.ts +46 -0
- package/dist/domain/ExportStatus.d.ts.map +1 -0
- package/dist/domain/ExportStatus.js +113 -0
- package/dist/domain/ExportStatus.js.map +1 -0
- package/dist/domain/FadeEnvelope.d.ts +31 -0
- package/dist/domain/FadeEnvelope.d.ts.map +1 -0
- package/dist/domain/FadeEnvelope.js +44 -0
- package/dist/domain/FadeEnvelope.js.map +1 -0
- package/dist/domain/GridSettings.d.ts +99 -0
- package/dist/domain/GridSettings.d.ts.map +1 -0
- package/dist/domain/GridSettings.js +213 -0
- package/dist/domain/GridSettings.js.map +1 -0
- package/dist/domain/Marker.d.ts +31 -0
- package/dist/domain/Marker.d.ts.map +1 -0
- package/dist/domain/Marker.js +56 -0
- package/dist/domain/Marker.js.map +1 -0
- package/dist/domain/MeterData.d.ts +26 -0
- package/dist/domain/MeterData.d.ts.map +1 -0
- package/dist/domain/MeterData.js +2 -0
- package/dist/domain/MeterData.js.map +1 -0
- package/dist/domain/MeterType.d.ts +22 -0
- package/dist/domain/MeterType.d.ts.map +1 -0
- package/dist/domain/MeterType.js +24 -0
- package/dist/domain/MeterType.js.map +1 -0
- package/dist/domain/MidiClip.d.ts +56 -0
- package/dist/domain/MidiClip.d.ts.map +1 -0
- package/dist/domain/MidiClip.js +119 -0
- package/dist/domain/MidiClip.js.map +1 -0
- package/dist/domain/MidiNote.d.ts +38 -0
- package/dist/domain/MidiNote.d.ts.map +1 -0
- package/dist/domain/MidiNote.js +82 -0
- package/dist/domain/MidiNote.js.map +1 -0
- package/dist/domain/MidiRegion.d.ts +65 -0
- package/dist/domain/MidiRegion.d.ts.map +1 -0
- package/dist/domain/MidiRegion.js +123 -0
- package/dist/domain/MidiRegion.js.map +1 -0
- package/dist/domain/MixerScene.d.ts +62 -0
- package/dist/domain/MixerScene.d.ts.map +1 -0
- package/dist/domain/MixerScene.js +131 -0
- package/dist/domain/MixerScene.js.map +1 -0
- package/dist/domain/MonitorMode.d.ts +15 -0
- package/dist/domain/MonitorMode.d.ts.map +1 -0
- package/dist/domain/MonitorMode.js +16 -0
- package/dist/domain/MonitorMode.js.map +1 -0
- package/dist/domain/MouseMode.d.ts +25 -0
- package/dist/domain/MouseMode.d.ts.map +1 -0
- package/dist/domain/MouseMode.js +26 -0
- package/dist/domain/MouseMode.js.map +1 -0
- package/dist/domain/OverlapType.d.ts +18 -0
- package/dist/domain/OverlapType.d.ts.map +1 -0
- package/dist/domain/OverlapType.js +19 -0
- package/dist/domain/OverlapType.js.map +1 -0
- package/dist/domain/Playlist.d.ts +83 -0
- package/dist/domain/Playlist.d.ts.map +1 -0
- package/dist/domain/Playlist.js +205 -0
- package/dist/domain/Playlist.js.map +1 -0
- package/dist/domain/Range.d.ts +35 -0
- package/dist/domain/Range.d.ts.map +1 -0
- package/dist/domain/Range.js +59 -0
- package/dist/domain/Range.js.map +1 -0
- package/dist/domain/RecordMode.d.ts +13 -0
- package/dist/domain/RecordMode.d.ts.map +1 -0
- package/dist/domain/RecordMode.js +14 -0
- package/dist/domain/RecordMode.js.map +1 -0
- package/dist/domain/Region.d.ts +96 -0
- package/dist/domain/Region.d.ts.map +1 -0
- package/dist/domain/Region.js +219 -0
- package/dist/domain/Region.js.map +1 -0
- package/dist/domain/RegionClipboard.d.ts +56 -0
- package/dist/domain/RegionClipboard.d.ts.map +1 -0
- package/dist/domain/RegionClipboard.js +70 -0
- package/dist/domain/RegionClipboard.js.map +1 -0
- package/dist/domain/RegionGroup.d.ts +16 -0
- package/dist/domain/RegionGroup.d.ts.map +1 -0
- package/dist/domain/RegionGroup.js +36 -0
- package/dist/domain/RegionGroup.js.map +1 -0
- package/dist/domain/Route.d.ts +104 -0
- package/dist/domain/Route.d.ts.map +1 -0
- package/dist/domain/Route.js +192 -0
- package/dist/domain/Route.js.map +1 -0
- package/dist/domain/RulerType.d.ts +21 -0
- package/dist/domain/RulerType.d.ts.map +1 -0
- package/dist/domain/RulerType.js +22 -0
- package/dist/domain/RulerType.js.map +1 -0
- package/dist/domain/SelectionHistory.d.ts +38 -0
- package/dist/domain/SelectionHistory.d.ts.map +1 -0
- package/dist/domain/SelectionHistory.js +70 -0
- package/dist/domain/SelectionHistory.js.map +1 -0
- package/dist/domain/SendBus.d.ts +28 -0
- package/dist/domain/SendBus.d.ts.map +1 -0
- package/dist/domain/SendBus.js +43 -0
- package/dist/domain/SendBus.js.map +1 -0
- package/dist/domain/Session.d.ts +347 -0
- package/dist/domain/Session.d.ts.map +1 -0
- package/dist/domain/Session.js +965 -0
- package/dist/domain/Session.js.map +1 -0
- package/dist/domain/SidechainConfig.d.ts +51 -0
- package/dist/domain/SidechainConfig.d.ts.map +1 -0
- package/dist/domain/SidechainConfig.js +84 -0
- package/dist/domain/SidechainConfig.js.map +1 -0
- package/dist/domain/Source.d.ts +11 -0
- package/dist/domain/Source.d.ts.map +1 -0
- package/dist/domain/Source.js +11 -0
- package/dist/domain/Source.js.map +1 -0
- package/dist/domain/Take.d.ts +66 -0
- package/dist/domain/Take.d.ts.map +1 -0
- package/dist/domain/Take.js +106 -0
- package/dist/domain/Take.js.map +1 -0
- package/dist/domain/Track.d.ts +58 -0
- package/dist/domain/Track.d.ts.map +1 -0
- package/dist/domain/Track.js +124 -0
- package/dist/domain/Track.js.map +1 -0
- package/dist/domain/TrackGroup.d.ts +39 -0
- package/dist/domain/TrackGroup.d.ts.map +1 -0
- package/dist/domain/TrackGroup.js +86 -0
- package/dist/domain/TrackGroup.js.map +1 -0
- package/dist/domain/TransportFSM.d.ts +188 -0
- package/dist/domain/TransportFSM.d.ts.map +1 -0
- package/dist/domain/TransportFSM.js +412 -0
- package/dist/domain/TransportFSM.js.map +1 -0
- package/dist/domain/TransportMode.d.ts +23 -0
- package/dist/domain/TransportMode.d.ts.map +1 -0
- package/dist/domain/TransportMode.js +38 -0
- package/dist/domain/TransportMode.js.map +1 -0
- package/dist/domain/VCATrack.d.ts +48 -0
- package/dist/domain/VCATrack.d.ts.map +1 -0
- package/dist/domain/VCATrack.js +85 -0
- package/dist/domain/VCATrack.js.map +1 -0
- package/dist/domain/ZoomFocus.d.ts +21 -0
- package/dist/domain/ZoomFocus.d.ts.map +1 -0
- package/dist/domain/ZoomFocus.js +22 -0
- package/dist/domain/ZoomFocus.js.map +1 -0
- package/dist/domain/index.d.ts +11 -0
- package/dist/domain/index.d.ts.map +1 -0
- package/dist/domain/index.js +12 -0
- package/dist/domain/index.js.map +1 -0
- package/dist/domain/temporal/TempoMap.d.ts +68 -0
- package/dist/domain/temporal/TempoMap.d.ts.map +1 -0
- package/dist/domain/temporal/TempoMap.js +151 -0
- package/dist/domain/temporal/TempoMap.js.map +1 -0
- package/dist/domain/temporal/types.d.ts +34 -0
- package/dist/domain/temporal/types.d.ts.map +1 -0
- package/dist/domain/temporal/types.js +54 -0
- package/dist/domain/temporal/types.js.map +1 -0
- package/dist/domain/types.d.ts +26 -0
- package/dist/domain/types.d.ts.map +1 -0
- package/dist/domain/types.js +11 -0
- package/dist/domain/types.js.map +1 -0
- package/dist/errors/DAWErrors.d.ts +107 -0
- package/dist/errors/DAWErrors.d.ts.map +1 -0
- package/dist/errors/DAWErrors.js +159 -0
- package/dist/errors/DAWErrors.js.map +1 -0
- package/dist/index.d.ts +56 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +59 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/Signal.d.ts +28 -0
- package/dist/lib/Signal.d.ts.map +1 -0
- package/dist/lib/Signal.js +34 -0
- package/dist/lib/Signal.js.map +1 -0
- package/dist/midi/MidiInput.d.ts +61 -0
- package/dist/midi/MidiInput.d.ts.map +1 -0
- package/dist/midi/MidiInput.js +153 -0
- package/dist/midi/MidiInput.js.map +1 -0
- package/dist/plugins/AutomatableParameter.d.ts +28 -0
- package/dist/plugins/AutomatableParameter.d.ts.map +1 -0
- package/dist/plugins/AutomatableParameter.js +89 -0
- package/dist/plugins/AutomatableParameter.js.map +1 -0
- package/dist/plugins/Plugin.d.ts +31 -0
- package/dist/plugins/Plugin.d.ts.map +1 -0
- package/dist/plugins/Plugin.js +7 -0
- package/dist/plugins/Plugin.js.map +1 -0
- package/dist/plugins/PluginManager.d.ts +15 -0
- package/dist/plugins/PluginManager.d.ts.map +1 -0
- package/dist/plugins/PluginManager.js +199 -0
- package/dist/plugins/PluginManager.js.map +1 -0
- package/dist/plugins/PluginPreset.d.ts +50 -0
- package/dist/plugins/PluginPreset.d.ts.map +1 -0
- package/dist/plugins/PluginPreset.js +292 -0
- package/dist/plugins/PluginPreset.js.map +1 -0
- package/dist/plugins/impl/AutoPanPlugin.d.ts +28 -0
- package/dist/plugins/impl/AutoPanPlugin.d.ts.map +1 -0
- package/dist/plugins/impl/AutoPanPlugin.js +48 -0
- package/dist/plugins/impl/AutoPanPlugin.js.map +1 -0
- package/dist/plugins/impl/ConvolutionReverbPlugin.d.ts +35 -0
- package/dist/plugins/impl/ConvolutionReverbPlugin.d.ts.map +1 -0
- package/dist/plugins/impl/ConvolutionReverbPlugin.js +65 -0
- package/dist/plugins/impl/ConvolutionReverbPlugin.js.map +1 -0
- package/dist/plugins/impl/DeEsserPlugin.d.ts +35 -0
- package/dist/plugins/impl/DeEsserPlugin.d.ts.map +1 -0
- package/dist/plugins/impl/DeEsserPlugin.js +87 -0
- package/dist/plugins/impl/DeEsserPlugin.js.map +1 -0
- package/dist/plugins/impl/ExpanderPlugin.d.ts +42 -0
- package/dist/plugins/impl/ExpanderPlugin.d.ts.map +1 -0
- package/dist/plugins/impl/ExpanderPlugin.js +105 -0
- package/dist/plugins/impl/ExpanderPlugin.js.map +1 -0
- package/dist/plugins/impl/GenericPlugin.d.ts +20 -0
- package/dist/plugins/impl/GenericPlugin.d.ts.map +1 -0
- package/dist/plugins/impl/GenericPlugin.js +37 -0
- package/dist/plugins/impl/GenericPlugin.js.map +1 -0
- package/dist/plugins/impl/MultibandCompressorPlugin.d.ts +33 -0
- package/dist/plugins/impl/MultibandCompressorPlugin.d.ts.map +1 -0
- package/dist/plugins/impl/MultibandCompressorPlugin.js +169 -0
- package/dist/plugins/impl/MultibandCompressorPlugin.js.map +1 -0
- package/dist/plugins/impl/ParametricEQPlugin.d.ts +25 -0
- package/dist/plugins/impl/ParametricEQPlugin.d.ts.map +1 -0
- package/dist/plugins/impl/ParametricEQPlugin.js +79 -0
- package/dist/plugins/impl/ParametricEQPlugin.js.map +1 -0
- package/dist/plugins/impl/PhaserPlugin.d.ts +29 -0
- package/dist/plugins/impl/PhaserPlugin.d.ts.map +1 -0
- package/dist/plugins/impl/PhaserPlugin.js +50 -0
- package/dist/plugins/impl/PhaserPlugin.js.map +1 -0
- package/dist/plugins/impl/SyncDelayPlugin.d.ts +52 -0
- package/dist/plugins/impl/SyncDelayPlugin.d.ts.map +1 -0
- package/dist/plugins/impl/SyncDelayPlugin.js +95 -0
- package/dist/plugins/impl/SyncDelayPlugin.js.map +1 -0
- package/dist/plugins/impl/TapeSaturationPlugin.d.ts +35 -0
- package/dist/plugins/impl/TapeSaturationPlugin.d.ts.map +1 -0
- package/dist/plugins/impl/TapeSaturationPlugin.js +87 -0
- package/dist/plugins/impl/TapeSaturationPlugin.js.map +1 -0
- package/dist/plugins/impl/TremoloPlugin.d.ts +29 -0
- package/dist/plugins/impl/TremoloPlugin.d.ts.map +1 -0
- package/dist/plugins/impl/TremoloPlugin.js +50 -0
- package/dist/plugins/impl/TremoloPlugin.js.map +1 -0
- package/dist/plugins/impl/VibratoPlugin.d.ts +28 -0
- package/dist/plugins/impl/VibratoPlugin.d.ts.map +1 -0
- package/dist/plugins/impl/VibratoPlugin.js +48 -0
- package/dist/plugins/impl/VibratoPlugin.js.map +1 -0
- package/dist/preferences/KeyBindings.d.ts +38 -0
- package/dist/preferences/KeyBindings.d.ts.map +1 -0
- package/dist/preferences/KeyBindings.js +83 -0
- package/dist/preferences/KeyBindings.js.map +1 -0
- package/dist/preferences/Preferences.d.ts +49 -0
- package/dist/preferences/Preferences.d.ts.map +1 -0
- package/dist/preferences/Preferences.js +93 -0
- package/dist/preferences/Preferences.js.map +1 -0
- package/dist/preferences/index.d.ts +4 -0
- package/dist/preferences/index.d.ts.map +1 -0
- package/dist/preferences/index.js +3 -0
- package/dist/preferences/index.js.map +1 -0
- package/dist/processing/GainProcessor.d.ts +10 -0
- package/dist/processing/GainProcessor.d.ts.map +1 -0
- package/dist/processing/GainProcessor.js +21 -0
- package/dist/processing/GainProcessor.js.map +1 -0
- package/dist/processing/IO.d.ts +15 -0
- package/dist/processing/IO.d.ts.map +1 -0
- package/dist/processing/IO.js +34 -0
- package/dist/processing/IO.js.map +1 -0
- package/dist/processing/MeterProcessor.d.ts +101 -0
- package/dist/processing/MeterProcessor.d.ts.map +1 -0
- package/dist/processing/MeterProcessor.js +195 -0
- package/dist/processing/MeterProcessor.js.map +1 -0
- package/dist/processing/PanProcessor.d.ts +15 -0
- package/dist/processing/PanProcessor.d.ts.map +1 -0
- package/dist/processing/PanProcessor.js +35 -0
- package/dist/processing/PanProcessor.js.map +1 -0
- package/dist/processing/PluginInsert.d.ts +9 -0
- package/dist/processing/PluginInsert.d.ts.map +1 -0
- package/dist/processing/PluginInsert.js +16 -0
- package/dist/processing/PluginInsert.js.map +1 -0
- package/dist/processing/PolarityProcessor.d.ts +25 -0
- package/dist/processing/PolarityProcessor.d.ts.map +1 -0
- package/dist/processing/PolarityProcessor.js +35 -0
- package/dist/processing/PolarityProcessor.js.map +1 -0
- package/dist/processing/Processor.d.ts +31 -0
- package/dist/processing/Processor.d.ts.map +1 -0
- package/dist/processing/Processor.js +45 -0
- package/dist/processing/Processor.js.map +1 -0
- package/dist/processing/SendProcessor.d.ts +55 -0
- package/dist/processing/SendProcessor.d.ts.map +1 -0
- package/dist/processing/SendProcessor.js +97 -0
- package/dist/processing/SendProcessor.js.map +1 -0
- package/dist/storage/AutoSave.d.ts +48 -0
- package/dist/storage/AutoSave.d.ts.map +1 -0
- package/dist/storage/AutoSave.js +108 -0
- package/dist/storage/AutoSave.js.map +1 -0
- package/dist/storage/SessionStorage.d.ts +74 -0
- package/dist/storage/SessionStorage.d.ts.map +1 -0
- package/dist/storage/SessionStorage.js +192 -0
- package/dist/storage/SessionStorage.js.map +1 -0
- package/dist/storage/SessionTemplate.d.ts +22 -0
- package/dist/storage/SessionTemplate.d.ts.map +1 -0
- package/dist/storage/SessionTemplate.js +77 -0
- package/dist/storage/SessionTemplate.js.map +1 -0
- package/dist/utils/AudioBufferToWav.d.ts +28 -0
- package/dist/utils/AudioBufferToWav.d.ts.map +1 -0
- package/dist/utils/AudioBufferToWav.js +110 -0
- package/dist/utils/AudioBufferToWav.js.map +1 -0
- package/dist/utils/DitherProcessor.d.ts +41 -0
- package/dist/utils/DitherProcessor.d.ts.map +1 -0
- package/dist/utils/DitherProcessor.js +78 -0
- package/dist/utils/DitherProcessor.js.map +1 -0
- package/dist/utils/FlacEncoder.d.ts +22 -0
- package/dist/utils/FlacEncoder.d.ts.map +1 -0
- package/dist/utils/FlacEncoder.js +196 -0
- package/dist/utils/FlacEncoder.js.map +1 -0
- package/dist/utils/OggEncoder.d.ts +40 -0
- package/dist/utils/OggEncoder.d.ts.map +1 -0
- package/dist/utils/OggEncoder.js +183 -0
- package/dist/utils/OggEncoder.js.map +1 -0
- package/package.json +67 -0
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SourceCache — an LRU cache for decoded audio buffers keyed by source id.
|
|
3
|
+
*
|
|
4
|
+
* Inspired by Ardour's `SourceFactory` / `Source::DecodeCache`
|
|
5
|
+
* (`libs/ardour/source_factory.cc`).
|
|
6
|
+
*
|
|
7
|
+
* Large sessions can reference hundreds of audio files. Decoding them on
|
|
8
|
+
* demand is expensive, but keeping *every* decoded buffer in memory is not
|
|
9
|
+
* always feasible. `SourceCache` strikes a balance by caching up to a
|
|
10
|
+
* configurable memory limit and evicting least-recently-used entries when
|
|
11
|
+
* the limit is exceeded.
|
|
12
|
+
*
|
|
13
|
+
* This class has **no** external dependencies (no audio framework imports)
|
|
14
|
+
* and can be unit-tested in isolation.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```ts
|
|
18
|
+
* const cache = new SourceCache(256); // 256 MB limit
|
|
19
|
+
*
|
|
20
|
+
* cache.set('kick.wav', decodedBuffer);
|
|
21
|
+
*
|
|
22
|
+
* const buf = cache.get('kick.wav'); // cache hit
|
|
23
|
+
* console.log(cache.getCacheHitRate()); // 1.0
|
|
24
|
+
* ```
|
|
25
|
+
*
|
|
26
|
+
* @module SourceCache
|
|
27
|
+
*/
|
|
28
|
+
/**
|
|
29
|
+
* SourceCache provides an LRU (least-recently-used) cache for
|
|
30
|
+
* {@link AudioBuffer} instances, bounded by a configurable memory limit.
|
|
31
|
+
*/
|
|
32
|
+
export class SourceCache {
|
|
33
|
+
/**
|
|
34
|
+
* @param maxMemoryMB - Maximum cache size in megabytes. Defaults to
|
|
35
|
+
* 512 MB.
|
|
36
|
+
*/
|
|
37
|
+
constructor(maxMemoryMB = 512) {
|
|
38
|
+
/** Map of source id to cache entry. */
|
|
39
|
+
this.cache = new Map();
|
|
40
|
+
/** Running total of cached memory in bytes. */
|
|
41
|
+
this.currentMemoryBytes = 0;
|
|
42
|
+
// -- Statistics ---------------------------------------------------
|
|
43
|
+
/** Number of successful cache lookups. */
|
|
44
|
+
this.hits = 0;
|
|
45
|
+
/** Number of cache misses. */
|
|
46
|
+
this.misses = 0;
|
|
47
|
+
this.maxMemoryBytes = maxMemoryMB * 1024 * 1024;
|
|
48
|
+
}
|
|
49
|
+
// ---------------------------------------------------------------
|
|
50
|
+
// Core API
|
|
51
|
+
// ---------------------------------------------------------------
|
|
52
|
+
/**
|
|
53
|
+
* Retrieve a cached {@link AudioBuffer} by source id.
|
|
54
|
+
*
|
|
55
|
+
* On a hit the entry's `lastAccess` timestamp is refreshed so it is less
|
|
56
|
+
* likely to be evicted.
|
|
57
|
+
*
|
|
58
|
+
* @param sourceId - Unique identifier for the audio source.
|
|
59
|
+
* @returns The cached buffer, or `null` on a miss.
|
|
60
|
+
*/
|
|
61
|
+
get(sourceId) {
|
|
62
|
+
const entry = this.cache.get(sourceId);
|
|
63
|
+
if (entry) {
|
|
64
|
+
entry.lastAccess = Date.now();
|
|
65
|
+
this.hits++;
|
|
66
|
+
return entry.buffer;
|
|
67
|
+
}
|
|
68
|
+
this.misses++;
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Add or replace an {@link AudioBuffer} in the cache.
|
|
73
|
+
*
|
|
74
|
+
* If inserting the buffer would exceed the memory limit, LRU entries are
|
|
75
|
+
* evicted first. If the buffer itself is larger than the entire cache
|
|
76
|
+
* limit it is still stored (after evicting everything), allowing
|
|
77
|
+
* single-buffer lookups to work.
|
|
78
|
+
*
|
|
79
|
+
* @param sourceId - Unique identifier for the audio source.
|
|
80
|
+
* @param buffer - The decoded audio data to cache.
|
|
81
|
+
*/
|
|
82
|
+
set(sourceId, buffer) {
|
|
83
|
+
// If this source is already cached, remove the old entry first
|
|
84
|
+
if (this.cache.has(sourceId)) {
|
|
85
|
+
this.remove(sourceId);
|
|
86
|
+
}
|
|
87
|
+
const sizeBytes = this.estimateBufferSize(buffer);
|
|
88
|
+
// Evict until there is room (or the cache is empty)
|
|
89
|
+
while (this.cache.size > 0 &&
|
|
90
|
+
this.currentMemoryBytes + sizeBytes > this.maxMemoryBytes) {
|
|
91
|
+
this.evictOne();
|
|
92
|
+
}
|
|
93
|
+
const entry = {
|
|
94
|
+
buffer,
|
|
95
|
+
lastAccess: Date.now(),
|
|
96
|
+
sizeBytes,
|
|
97
|
+
};
|
|
98
|
+
this.cache.set(sourceId, entry);
|
|
99
|
+
this.currentMemoryBytes += sizeBytes;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Check whether a source id is present in the cache without affecting
|
|
103
|
+
* access statistics or the LRU order.
|
|
104
|
+
*
|
|
105
|
+
* @param sourceId - The source id to look up.
|
|
106
|
+
*/
|
|
107
|
+
has(sourceId) {
|
|
108
|
+
return this.cache.has(sourceId);
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Explicitly remove a source from the cache.
|
|
112
|
+
*
|
|
113
|
+
* @param sourceId - The source id to remove.
|
|
114
|
+
*/
|
|
115
|
+
remove(sourceId) {
|
|
116
|
+
const entry = this.cache.get(sourceId);
|
|
117
|
+
if (entry) {
|
|
118
|
+
this.currentMemoryBytes -= entry.sizeBytes;
|
|
119
|
+
this.cache.delete(sourceId);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
// ---------------------------------------------------------------
|
|
123
|
+
// Eviction
|
|
124
|
+
// ---------------------------------------------------------------
|
|
125
|
+
/**
|
|
126
|
+
* Evict entries using LRU policy until the current memory usage is at or
|
|
127
|
+
* below the configured limit.
|
|
128
|
+
*
|
|
129
|
+
* This is called automatically by {@link set}, but can also be invoked
|
|
130
|
+
* manually (e.g. after reducing the memory limit at runtime).
|
|
131
|
+
*/
|
|
132
|
+
evict() {
|
|
133
|
+
while (this.cache.size > 0 &&
|
|
134
|
+
this.currentMemoryBytes > this.maxMemoryBytes) {
|
|
135
|
+
this.evictOne();
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Evict the single least-recently-used entry.
|
|
140
|
+
*/
|
|
141
|
+
evictOne() {
|
|
142
|
+
let oldestId = null;
|
|
143
|
+
let oldestAccess = Infinity;
|
|
144
|
+
for (const [id, entry] of this.cache) {
|
|
145
|
+
if (entry.lastAccess < oldestAccess) {
|
|
146
|
+
oldestAccess = entry.lastAccess;
|
|
147
|
+
oldestId = id;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
if (oldestId !== null) {
|
|
151
|
+
this.remove(oldestId);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
// ---------------------------------------------------------------
|
|
155
|
+
// Statistics / diagnostics
|
|
156
|
+
// ---------------------------------------------------------------
|
|
157
|
+
/**
|
|
158
|
+
* Current memory usage in bytes.
|
|
159
|
+
*/
|
|
160
|
+
getMemoryUsage() {
|
|
161
|
+
return this.currentMemoryBytes;
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Current memory usage in megabytes.
|
|
165
|
+
*/
|
|
166
|
+
getMemoryUsageMB() {
|
|
167
|
+
return this.currentMemoryBytes / (1024 * 1024);
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Cache hit rate as a ratio `[0, 1]`.
|
|
171
|
+
*
|
|
172
|
+
* Returns `0` if no lookups have been performed yet.
|
|
173
|
+
*/
|
|
174
|
+
getCacheHitRate() {
|
|
175
|
+
const total = this.hits + this.misses;
|
|
176
|
+
return total === 0 ? 0 : this.hits / total;
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Number of entries currently in the cache.
|
|
180
|
+
*/
|
|
181
|
+
get size() {
|
|
182
|
+
return this.cache.size;
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Remove all entries from the cache and reset statistics.
|
|
186
|
+
*/
|
|
187
|
+
clear() {
|
|
188
|
+
this.cache.clear();
|
|
189
|
+
this.currentMemoryBytes = 0;
|
|
190
|
+
this.hits = 0;
|
|
191
|
+
this.misses = 0;
|
|
192
|
+
}
|
|
193
|
+
// ---------------------------------------------------------------
|
|
194
|
+
// Internals
|
|
195
|
+
// ---------------------------------------------------------------
|
|
196
|
+
/**
|
|
197
|
+
* Estimate the memory footprint of a decoded {@link AudioBuffer}.
|
|
198
|
+
*
|
|
199
|
+
* Each channel is a `Float32Array` (4 bytes per sample).
|
|
200
|
+
*/
|
|
201
|
+
estimateBufferSize(buffer) {
|
|
202
|
+
return buffer.numberOfChannels * buffer.length * Float32Array.BYTES_PER_ELEMENT;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
//# sourceMappingURL=SourceCache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SourceCache.js","sourceRoot":"","sources":["../../src/audio/SourceCache.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { RegionId, SourceId, FrameCount } from '../domain/types';
|
|
2
|
+
import { TimeDomain } from '../domain/temporal/types';
|
|
3
|
+
export interface RegionDTO {
|
|
4
|
+
id: RegionId;
|
|
5
|
+
sourceId: SourceId;
|
|
6
|
+
start: FrameCount;
|
|
7
|
+
length: FrameCount;
|
|
8
|
+
end: FrameCount;
|
|
9
|
+
sourceStart: FrameCount;
|
|
10
|
+
name: string;
|
|
11
|
+
gain: number;
|
|
12
|
+
muted: boolean;
|
|
13
|
+
layer: number;
|
|
14
|
+
fadeIn: FrameCount;
|
|
15
|
+
fadeOut: FrameCount;
|
|
16
|
+
playbackRate: number;
|
|
17
|
+
/** Pitch-preserving time stretch ratio (1.0 = normal) */
|
|
18
|
+
stretch: number;
|
|
19
|
+
/** Pitch shift in semitones (0 = no shift) */
|
|
20
|
+
pitchSemitones: number;
|
|
21
|
+
timeDomain: TimeDomain;
|
|
22
|
+
}
|
|
23
|
+
export interface TrackDTO {
|
|
24
|
+
id: string;
|
|
25
|
+
gain: number;
|
|
26
|
+
pan: number;
|
|
27
|
+
regions: RegionDTO[];
|
|
28
|
+
}
|
|
29
|
+
export interface MidiNoteDTO {
|
|
30
|
+
id: string;
|
|
31
|
+
pitch: number;
|
|
32
|
+
velocity: number;
|
|
33
|
+
startFrame: number;
|
|
34
|
+
durationFrames: number;
|
|
35
|
+
channel: number;
|
|
36
|
+
}
|
|
37
|
+
export interface MidiRegionDTO {
|
|
38
|
+
id: string;
|
|
39
|
+
name: string;
|
|
40
|
+
start: number;
|
|
41
|
+
length: number;
|
|
42
|
+
end: number;
|
|
43
|
+
muted: boolean;
|
|
44
|
+
notes: MidiNoteDTO[];
|
|
45
|
+
}
|
|
46
|
+
export interface AudioWorkletMessage {
|
|
47
|
+
type: string;
|
|
48
|
+
payload?: Record<string, unknown>;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=dto.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dto.d.ts","sourceRoot":"","sources":["../../src/audio/dto.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEtD,MAAM,WAAW,SAAS;IACtB,EAAE,EAAE,QAAQ,CAAC;IACb,QAAQ,EAAE,QAAQ,CAAC;IACnB,KAAK,EAAE,UAAU,CAAC;IAClB,MAAM,EAAE,UAAU,CAAC;IACnB,GAAG,EAAE,UAAU,CAAC;IAChB,WAAW,EAAE,UAAU,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,UAAU,CAAC;IACnB,OAAO,EAAE,UAAU,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,yDAAyD;IACzD,OAAO,EAAE,MAAM,CAAC;IAChB,8CAA8C;IAC9C,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,UAAU,CAAC;CAC1B;AAED,MAAM,WAAW,QAAQ;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,SAAS,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,WAAW,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,mBAAmB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACrC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dto.js","sourceRoot":"","sources":["../../src/audio/dto.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { RegionDTO } from '../dto';
|
|
2
|
+
import { FrameCount } from '../../domain/types';
|
|
3
|
+
/** Fade curve shape, matching Ardour's fade types */
|
|
4
|
+
export declare const enum FadeCurve {
|
|
5
|
+
Linear = 0,
|
|
6
|
+
EqualPower = 1,
|
|
7
|
+
Exponential = 2
|
|
8
|
+
}
|
|
9
|
+
export declare class PlaylistEngine {
|
|
10
|
+
/**
|
|
11
|
+
* Renders a block of audio for a given set of regions.
|
|
12
|
+
* Higher-layer regions take priority — when regions overlap,
|
|
13
|
+
* only the top-most layer's audio is heard at each sample position.
|
|
14
|
+
* Fades are applied per-region before the layer priority check.
|
|
15
|
+
*/
|
|
16
|
+
render(outputLeft: Float32Array, outputRight: Float32Array, startFrame: FrameCount, numFrames: FrameCount, regions: RegionDTO[], getBuffer: (url: string) => AudioBuffer | null): void;
|
|
17
|
+
private renderRegion;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=PlaylistEngine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PlaylistEngine.d.ts","sourceRoot":"","sources":["../../../src/audio/engine/PlaylistEngine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,qDAAqD;AACrD,0BAAkB,SAAS;IACvB,MAAM,IAAI;IACV,UAAU,IAAI;IACd,WAAW,IAAI;CAClB;AAED,qBAAa,cAAc;IACvB;;;;;OAKG;IACI,MAAM,CACT,UAAU,EAAE,YAAY,EACxB,WAAW,EAAE,YAAY,EACzB,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,UAAU,EACrB,OAAO,EAAE,SAAS,EAAE,EACpB,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,WAAW,GAAG,IAAI,GAC/C,IAAI;IAwBP,OAAO,CAAC,YAAY;CAqEvB"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/** Fade curve shape, matching Ardour's fade types */
|
|
2
|
+
export var FadeCurve;
|
|
3
|
+
(function (FadeCurve) {
|
|
4
|
+
FadeCurve[FadeCurve["Linear"] = 0] = "Linear";
|
|
5
|
+
FadeCurve[FadeCurve["EqualPower"] = 1] = "EqualPower";
|
|
6
|
+
FadeCurve[FadeCurve["Exponential"] = 2] = "Exponential";
|
|
7
|
+
})(FadeCurve || (FadeCurve = {}));
|
|
8
|
+
export class PlaylistEngine {
|
|
9
|
+
/**
|
|
10
|
+
* Renders a block of audio for a given set of regions.
|
|
11
|
+
* Higher-layer regions take priority — when regions overlap,
|
|
12
|
+
* only the top-most layer's audio is heard at each sample position.
|
|
13
|
+
* Fades are applied per-region before the layer priority check.
|
|
14
|
+
*/
|
|
15
|
+
render(outputLeft, outputRight, startFrame, numFrames, regions, getBuffer) {
|
|
16
|
+
// 1. Find active regions in this block
|
|
17
|
+
const endFrame = startFrame + numFrames;
|
|
18
|
+
const activeRegions = regions.filter(r => r.start < endFrame && r.end > startFrame && !r.muted);
|
|
19
|
+
// 2. Sort by layer descending (highest layer renders first, takes priority)
|
|
20
|
+
activeRegions.sort((a, b) => b.layer - a.layer);
|
|
21
|
+
// 3. Clear output
|
|
22
|
+
outputLeft.fill(0);
|
|
23
|
+
outputRight.fill(0);
|
|
24
|
+
// 4. Coverage mask: tracks which sample positions are already filled
|
|
25
|
+
// by a higher-layer region. Lower layers only write to uncovered positions.
|
|
26
|
+
const covered = new Uint8Array(numFrames);
|
|
27
|
+
// 5. Render each region (highest layer first)
|
|
28
|
+
for (const region of activeRegions) {
|
|
29
|
+
this.renderRegion(outputLeft, outputRight, startFrame, numFrames, region, getBuffer, covered);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
renderRegion(outL, outR, startFrame, numFrames, region, getBuffer, covered) {
|
|
33
|
+
const buffer = getBuffer(region.sourceId);
|
|
34
|
+
if (!buffer)
|
|
35
|
+
return;
|
|
36
|
+
const bufferDataL = buffer.getChannelData(0);
|
|
37
|
+
const bufferDataR = buffer.numberOfChannels > 1 ? buffer.getChannelData(1) : bufferDataL;
|
|
38
|
+
const renderStart = Math.max(startFrame, region.start);
|
|
39
|
+
const renderEnd = Math.min(startFrame + numFrames, region.end);
|
|
40
|
+
const regionOffset = region.sourceStart + (renderStart - region.start);
|
|
41
|
+
const outOffset = renderStart - startFrame;
|
|
42
|
+
const length = renderEnd - renderStart;
|
|
43
|
+
const playbackRate = region.playbackRate || 1.0;
|
|
44
|
+
for (let i = 0; i < length; i++) {
|
|
45
|
+
const outIdx = outOffset + i;
|
|
46
|
+
// Skip positions already covered by a higher-layer region
|
|
47
|
+
if (covered[outIdx])
|
|
48
|
+
continue;
|
|
49
|
+
// With playbackRate, we need to resample
|
|
50
|
+
const sourcePosition = regionOffset + (i * playbackRate);
|
|
51
|
+
const sampleIdx = Math.floor(sourcePosition);
|
|
52
|
+
const frac = sourcePosition - sampleIdx;
|
|
53
|
+
if (sampleIdx >= bufferDataL.length - 1)
|
|
54
|
+
break;
|
|
55
|
+
// Linear interpolation for resampling
|
|
56
|
+
const sampleL0 = bufferDataL[sampleIdx];
|
|
57
|
+
const sampleL1 = bufferDataL[sampleIdx + 1];
|
|
58
|
+
const sampleR0 = bufferDataR[sampleIdx];
|
|
59
|
+
const sampleR1 = bufferDataR[sampleIdx + 1];
|
|
60
|
+
const interpolatedL = sampleL0 + (sampleL1 - sampleL0) * frac;
|
|
61
|
+
const interpolatedR = sampleR0 + (sampleR1 - sampleR0) * frac;
|
|
62
|
+
// Apply fade envelope
|
|
63
|
+
const currentPos = renderStart + i - region.start;
|
|
64
|
+
let fadeGain = 1.0;
|
|
65
|
+
if (region.fadeIn > 0 && currentPos < region.fadeIn) {
|
|
66
|
+
const t = currentPos / region.fadeIn;
|
|
67
|
+
fadeGain = Math.sqrt(t);
|
|
68
|
+
}
|
|
69
|
+
else if (region.fadeOut > 0 && currentPos >= region.length - region.fadeOut) {
|
|
70
|
+
const distFromEnd = region.length - currentPos;
|
|
71
|
+
const t = Math.max(0, distFromEnd / region.fadeOut);
|
|
72
|
+
fadeGain = Math.sqrt(t);
|
|
73
|
+
}
|
|
74
|
+
const gain = region.gain * fadeGain;
|
|
75
|
+
// Write to output (not additive — top layer wins)
|
|
76
|
+
outL[outIdx] = interpolatedL * gain;
|
|
77
|
+
outR[outIdx] = interpolatedR * gain;
|
|
78
|
+
// Mark this position as covered
|
|
79
|
+
covered[outIdx] = 1;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=PlaylistEngine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PlaylistEngine.js","sourceRoot":"","sources":["../../../src/audio/engine/PlaylistEngine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { AutomationPoint } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Coefficients for a single cubic spline segment.
|
|
4
|
+
* The polynomial is: y = a + b*x + c*x^2 + d*x^3
|
|
5
|
+
* where x is the local offset from the segment start time.
|
|
6
|
+
*/
|
|
7
|
+
export interface SplineCoefficients {
|
|
8
|
+
a: number;
|
|
9
|
+
b: number;
|
|
10
|
+
c: number;
|
|
11
|
+
d: number;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Provides interpolation between automation points, including a CJC Kruger
|
|
15
|
+
* constrained cubic spline algorithm that prevents overshoot.
|
|
16
|
+
*/
|
|
17
|
+
export declare class AutomationCurve {
|
|
18
|
+
/** Cached spline coefficients, one per segment (points.length - 1). */
|
|
19
|
+
private _splineCoeffs;
|
|
20
|
+
/** The points array snapshot used to compute the current coefficients. */
|
|
21
|
+
private _splinePoints;
|
|
22
|
+
/**
|
|
23
|
+
* Calculates the interpolated value between two points at a given time.
|
|
24
|
+
* For non-spline interpolation types, this static method is sufficient.
|
|
25
|
+
* @param start The starting automation point
|
|
26
|
+
* @param end The ending automation point
|
|
27
|
+
* @param time The time to calculate the value for (must be between start.time and end.time)
|
|
28
|
+
* @param _curvature Optional tension/curvature parameter (not yet implemented fully)
|
|
29
|
+
*/
|
|
30
|
+
static getValueAt(start: AutomationPoint, end: AutomationPoint, time: number, _curvature?: number): number;
|
|
31
|
+
/**
|
|
32
|
+
* Recomputes CJC Kruger constrained cubic spline coefficients for the
|
|
33
|
+
* given set of points. Must be called whenever points change if Curved
|
|
34
|
+
* interpolation is in use.
|
|
35
|
+
*
|
|
36
|
+
* The CJC Kruger variant constrains tangent slopes so that the spline
|
|
37
|
+
* is monotone between consecutive data points, preventing overshoot
|
|
38
|
+
* and oscillation artifacts common with natural cubic splines.
|
|
39
|
+
*
|
|
40
|
+
* @param points Sorted automation points array
|
|
41
|
+
*/
|
|
42
|
+
computeSplineCoefficients(points: ReadonlyArray<AutomationPoint>): void;
|
|
43
|
+
/**
|
|
44
|
+
* Returns the spline-interpolated value at the given time.
|
|
45
|
+
* Falls back to the static getValueAt for non-Curved interpolation types.
|
|
46
|
+
*
|
|
47
|
+
* @param points The sorted automation points
|
|
48
|
+
* @param time The time to evaluate
|
|
49
|
+
* @returns The interpolated value, or null if no points exist
|
|
50
|
+
*/
|
|
51
|
+
getValueAt(points: ReadonlyArray<AutomationPoint>, time: number): number | null;
|
|
52
|
+
/**
|
|
53
|
+
* Invalidates cached spline coefficients. Call this when points change.
|
|
54
|
+
*/
|
|
55
|
+
invalidateSpline(): void;
|
|
56
|
+
/**
|
|
57
|
+
* Returns a copy of the current spline coefficients (for inspection/testing).
|
|
58
|
+
*/
|
|
59
|
+
getSplineCoefficients(): ReadonlyArray<SplineCoefficients>;
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=AutomationCurve.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AutomationCurve.d.ts","sourceRoot":"","sources":["../../src/automation/AutomationCurve.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAqB,MAAM,SAAS,CAAC;AAE7D;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IAC/B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACb;AAED;;;GAGG;AACH,qBAAa,eAAe;IACxB,uEAAuE;IACvE,OAAO,CAAC,aAAa,CAA4B;IACjD,0EAA0E;IAC1E,OAAO,CAAC,aAAa,CAAsC;IAE3D;;;;;;;OAOG;WACW,UAAU,CAAC,KAAK,EAAE,eAAe,EAAE,GAAG,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,GAAE,MAAY,GAAG,MAAM;IAiCtH;;;;;;;;;;OAUG;IACI,yBAAyB,CAAC,MAAM,EAAE,aAAa,CAAC,eAAe,CAAC,GAAG,IAAI;IAwF9E;;;;;;;OAOG;IACI,UAAU,CAAC,MAAM,EAAE,aAAa,CAAC,eAAe,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAyCtF;;OAEG;IACI,gBAAgB,IAAI,IAAI;IAK/B;;OAEG;IACI,qBAAqB,IAAI,aAAa,CAAC,kBAAkB,CAAC;CAGpE"}
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
import { InterpolationType } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Provides interpolation between automation points, including a CJC Kruger
|
|
4
|
+
* constrained cubic spline algorithm that prevents overshoot.
|
|
5
|
+
*/
|
|
6
|
+
export class AutomationCurve {
|
|
7
|
+
constructor() {
|
|
8
|
+
/** Cached spline coefficients, one per segment (points.length - 1). */
|
|
9
|
+
this._splineCoeffs = [];
|
|
10
|
+
/** The points array snapshot used to compute the current coefficients. */
|
|
11
|
+
this._splinePoints = [];
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Calculates the interpolated value between two points at a given time.
|
|
15
|
+
* For non-spline interpolation types, this static method is sufficient.
|
|
16
|
+
* @param start The starting automation point
|
|
17
|
+
* @param end The ending automation point
|
|
18
|
+
* @param time The time to calculate the value for (must be between start.time and end.time)
|
|
19
|
+
* @param _curvature Optional tension/curvature parameter (not yet implemented fully)
|
|
20
|
+
*/
|
|
21
|
+
static getValueAt(start, end, time, _curvature = 0.5) {
|
|
22
|
+
if (time <= start.time)
|
|
23
|
+
return start.value;
|
|
24
|
+
if (time >= end.time)
|
|
25
|
+
return end.value;
|
|
26
|
+
// Normalized time (0 to 1)
|
|
27
|
+
const t = (time - start.time) / (end.time - start.time);
|
|
28
|
+
switch (start.interpolation) {
|
|
29
|
+
case InterpolationType.Hold:
|
|
30
|
+
return start.value;
|
|
31
|
+
case InterpolationType.Linear:
|
|
32
|
+
return start.value + t * (end.value - start.value);
|
|
33
|
+
case InterpolationType.Exponential:
|
|
34
|
+
// Safe geometric interpolation (fallback to linear if signs differ or zero)
|
|
35
|
+
if (start.value > 0.0001 && end.value > 0.0001) {
|
|
36
|
+
return start.value * Math.pow(end.value / start.value, t);
|
|
37
|
+
}
|
|
38
|
+
// Fallback to simpler curve: y = x^2 (slow start, fast end)
|
|
39
|
+
const curveT = t * t;
|
|
40
|
+
return start.value + curveT * (end.value - start.value);
|
|
41
|
+
case InterpolationType.Logarithmic:
|
|
42
|
+
// y = sqrt(x) (fast start, slow end)
|
|
43
|
+
const logT = Math.sqrt(t);
|
|
44
|
+
return start.value + logT * (end.value - start.value);
|
|
45
|
+
default:
|
|
46
|
+
return start.value + t * (end.value - start.value);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Recomputes CJC Kruger constrained cubic spline coefficients for the
|
|
51
|
+
* given set of points. Must be called whenever points change if Curved
|
|
52
|
+
* interpolation is in use.
|
|
53
|
+
*
|
|
54
|
+
* The CJC Kruger variant constrains tangent slopes so that the spline
|
|
55
|
+
* is monotone between consecutive data points, preventing overshoot
|
|
56
|
+
* and oscillation artifacts common with natural cubic splines.
|
|
57
|
+
*
|
|
58
|
+
* @param points Sorted automation points array
|
|
59
|
+
*/
|
|
60
|
+
computeSplineCoefficients(points) {
|
|
61
|
+
this._splinePoints = points;
|
|
62
|
+
this._splineCoeffs = [];
|
|
63
|
+
const n = points.length;
|
|
64
|
+
if (n < 2)
|
|
65
|
+
return;
|
|
66
|
+
// Step 1: compute finite-difference slopes delta_k = (y_{k+1} - y_k) / (x_{k+1} - x_k)
|
|
67
|
+
const delta = new Array(n - 1);
|
|
68
|
+
for (let i = 0; i < n - 1; i++) {
|
|
69
|
+
const dx = points[i + 1].time - points[i].time;
|
|
70
|
+
delta[i] = dx === 0 ? 0 : (points[i + 1].value - points[i].value) / dx;
|
|
71
|
+
}
|
|
72
|
+
// Step 2: CJC Kruger constrained tangent slopes
|
|
73
|
+
// For interior points, use harmonic mean when signs agree, else 0.
|
|
74
|
+
// Boundary tangents use one-sided finite difference.
|
|
75
|
+
const m = new Array(n);
|
|
76
|
+
// Boundary slopes
|
|
77
|
+
m[0] = delta[0];
|
|
78
|
+
m[n - 1] = delta[n - 2];
|
|
79
|
+
for (let i = 1; i < n - 1; i++) {
|
|
80
|
+
if (delta[i - 1] * delta[i] <= 0) {
|
|
81
|
+
// Slopes have different signs or one is zero -> constrain to zero
|
|
82
|
+
m[i] = 0;
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
// CJC Kruger: harmonic mean of adjacent slopes
|
|
86
|
+
m[i] = 2 / (1 / delta[i - 1] + 1 / delta[i]);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
// Additional Kruger constraint: ensure monotonicity
|
|
90
|
+
// If delta[i] == 0, the tangents at both ends of that segment must be 0
|
|
91
|
+
for (let i = 0; i < n - 1; i++) {
|
|
92
|
+
if (delta[i] === 0) {
|
|
93
|
+
m[i] = 0;
|
|
94
|
+
m[i + 1] = 0;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
// Clamp boundary slopes to prevent overshoot (Fritsch-Carlson style check)
|
|
98
|
+
for (let i = 0; i < n - 1; i++) {
|
|
99
|
+
if (delta[i] !== 0) {
|
|
100
|
+
const alpha = m[i] / delta[i];
|
|
101
|
+
const beta = m[i + 1] / delta[i];
|
|
102
|
+
// If the vector (alpha, beta) lies outside the circle of radius 3, scale it back
|
|
103
|
+
const mag = Math.sqrt(alpha * alpha + beta * beta);
|
|
104
|
+
if (mag > 3) {
|
|
105
|
+
const tau = 3 / mag;
|
|
106
|
+
m[i] = tau * alpha * delta[i];
|
|
107
|
+
m[i + 1] = tau * beta * delta[i];
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
// Step 3: compute cubic Hermite coefficients per segment
|
|
112
|
+
// Given segment from x_i to x_{i+1} with values y_i, y_{i+1} and slopes m_i, m_{i+1}:
|
|
113
|
+
// Using local variable x = (time - x_i), h = x_{i+1} - x_i
|
|
114
|
+
// Hermite basis -> polynomial coefficients a,b,c,d where y = a + b*x + c*x^2 + d*x^3
|
|
115
|
+
for (let i = 0; i < n - 1; i++) {
|
|
116
|
+
const h = points[i + 1].time - points[i].time;
|
|
117
|
+
const y0 = points[i].value;
|
|
118
|
+
const y1 = points[i + 1].value;
|
|
119
|
+
const m0 = m[i];
|
|
120
|
+
const m1 = m[i + 1];
|
|
121
|
+
if (h === 0) {
|
|
122
|
+
// Degenerate segment (coincident times)
|
|
123
|
+
this._splineCoeffs.push({ a: y0, b: 0, c: 0, d: 0 });
|
|
124
|
+
continue;
|
|
125
|
+
}
|
|
126
|
+
// Hermite to power basis conversion:
|
|
127
|
+
// a = y0
|
|
128
|
+
// b = m0
|
|
129
|
+
// c = (3*(y1-y0)/h - 2*m0 - m1) / h
|
|
130
|
+
// d = (2*(y0-y1)/h + m0 + m1) / h^2
|
|
131
|
+
const a = y0;
|
|
132
|
+
const b = m0;
|
|
133
|
+
const c = (3 * (y1 - y0) / h - 2 * m0 - m1) / h;
|
|
134
|
+
const d = (2 * (y0 - y1) / h + m0 + m1) / (h * h);
|
|
135
|
+
this._splineCoeffs.push({ a, b, c, d });
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Returns the spline-interpolated value at the given time.
|
|
140
|
+
* Falls back to the static getValueAt for non-Curved interpolation types.
|
|
141
|
+
*
|
|
142
|
+
* @param points The sorted automation points
|
|
143
|
+
* @param time The time to evaluate
|
|
144
|
+
* @returns The interpolated value, or null if no points exist
|
|
145
|
+
*/
|
|
146
|
+
getValueAt(points, time) {
|
|
147
|
+
const n = points.length;
|
|
148
|
+
if (n === 0)
|
|
149
|
+
return null;
|
|
150
|
+
if (time <= points[0].time)
|
|
151
|
+
return points[0].value;
|
|
152
|
+
if (time >= points[n - 1].time)
|
|
153
|
+
return points[n - 1].value;
|
|
154
|
+
// Find the segment containing `time` via binary search
|
|
155
|
+
let lo = 0;
|
|
156
|
+
let hi = n - 1;
|
|
157
|
+
while (lo < hi - 1) {
|
|
158
|
+
const mid = (lo + hi) >> 1;
|
|
159
|
+
if (points[mid].time <= time) {
|
|
160
|
+
lo = mid;
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
hi = mid;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
const start = points[lo];
|
|
167
|
+
const end = points[hi];
|
|
168
|
+
// For non-Curved types, delegate to the static method
|
|
169
|
+
if (start.interpolation !== InterpolationType.Curved) {
|
|
170
|
+
return AutomationCurve.getValueAt(start, end, time);
|
|
171
|
+
}
|
|
172
|
+
// Curved: use precomputed spline coefficients
|
|
173
|
+
if (this._splineCoeffs.length === 0 || this._splinePoints !== points) {
|
|
174
|
+
this.computeSplineCoefficients(points);
|
|
175
|
+
}
|
|
176
|
+
if (lo < this._splineCoeffs.length) {
|
|
177
|
+
const coeff = this._splineCoeffs[lo];
|
|
178
|
+
const x = time - start.time;
|
|
179
|
+
return coeff.a + coeff.b * x + coeff.c * x * x + coeff.d * x * x * x;
|
|
180
|
+
}
|
|
181
|
+
// Fallback
|
|
182
|
+
return AutomationCurve.getValueAt(start, end, time);
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Invalidates cached spline coefficients. Call this when points change.
|
|
186
|
+
*/
|
|
187
|
+
invalidateSpline() {
|
|
188
|
+
this._splineCoeffs = [];
|
|
189
|
+
this._splinePoints = [];
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Returns a copy of the current spline coefficients (for inspection/testing).
|
|
193
|
+
*/
|
|
194
|
+
getSplineCoefficients() {
|
|
195
|
+
return [...this._splineCoeffs];
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
//# sourceMappingURL=AutomationCurve.js.map
|