@drop-ai/core 0.2.0 → 0.3.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/README.md +655 -237
- 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 +71 -0
- package/dist/analysis/AudioAnalyzer.d.ts.map +1 -0
- package/dist/analysis/AudioAnalyzer.js +569 -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 +104 -0
- package/dist/audio/Auditioner.d.ts.map +1 -0
- package/dist/audio/Auditioner.js +239 -0
- package/dist/audio/Auditioner.js.map +1 -0
- package/dist/audio/BWFMetadata.d.ts +116 -0
- package/dist/audio/BWFMetadata.d.ts.map +1 -0
- package/dist/audio/BWFMetadata.js +394 -0
- package/dist/audio/BWFMetadata.js.map +1 -0
- package/dist/audio/ChannelSplitter.d.ts +37 -0
- package/dist/audio/ChannelSplitter.d.ts.map +1 -0
- package/dist/audio/ChannelSplitter.js +82 -0
- package/dist/audio/ChannelSplitter.js.map +1 -0
- package/dist/audio/ExportAnalyzer.d.ts +39 -0
- package/dist/audio/ExportAnalyzer.d.ts.map +1 -0
- package/dist/audio/ExportAnalyzer.js +76 -0
- package/dist/audio/ExportAnalyzer.js.map +1 -0
- package/dist/audio/LufsNormalizer.d.ts +37 -0
- package/dist/audio/LufsNormalizer.d.ts.map +1 -0
- package/dist/audio/LufsNormalizer.js +217 -0
- package/dist/audio/LufsNormalizer.js.map +1 -0
- package/dist/audio/OfflineExporter.d.ts +1 -6
- package/dist/audio/OfflineExporter.d.ts.map +1 -1
- package/dist/audio/OfflineExporter.js +31 -10
- package/dist/audio/OfflineExporter.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 +21 -0
- package/dist/audio/SampleRateConverter.d.ts.map +1 -0
- package/dist/audio/SampleRateConverter.js +84 -0
- package/dist/audio/SampleRateConverter.js.map +1 -0
- package/dist/audio/SilencePadding.d.ts +29 -0
- package/dist/audio/SilencePadding.d.ts.map +1 -0
- package/dist/audio/SilencePadding.js +86 -0
- package/dist/audio/SilencePadding.js.map +1 -0
- package/dist/audio/SourceCache.d.ts +13 -16
- package/dist/audio/SourceCache.d.ts.map +1 -1
- package/dist/audio/SourceCache.js +21 -33
- package/dist/audio/SourceCache.js.map +1 -1
- package/dist/audio/engine/Declick.d.ts +98 -0
- package/dist/audio/engine/Declick.d.ts.map +1 -0
- package/dist/audio/engine/Declick.js +204 -0
- package/dist/audio/engine/Declick.js.map +1 -0
- package/dist/audio/engine/DiskIO.d.ts +172 -0
- package/dist/audio/engine/DiskIO.d.ts.map +1 -0
- package/dist/audio/engine/DiskIO.js +384 -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 +146 -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.map +1 -1
- package/dist/audio/engine/PlaylistEngine.js +9 -2
- package/dist/audio/engine/PlaylistEngine.js.map +1 -1
- package/dist/audio/engine/PunchRecordManager.d.ts +113 -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 +135 -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 +139 -0
- package/dist/audio/engine/SidechainRouter.d.ts.map +1 -0
- package/dist/audio/engine/SidechainRouter.js +292 -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 +62 -0
- package/dist/audio/export/CDMarkerExporter.d.ts.map +1 -0
- package/dist/audio/export/CDMarkerExporter.js +164 -0
- package/dist/audio/export/CDMarkerExporter.js.map +1 -0
- package/dist/audio/export/ExportGraphBuilder.d.ts +121 -0
- package/dist/audio/export/ExportGraphBuilder.d.ts.map +1 -0
- package/dist/audio/export/ExportGraphBuilder.js +522 -0
- package/dist/audio/export/ExportGraphBuilder.js.map +1 -0
- package/dist/audio/export/ExportPresetManager.d.ts +87 -0
- package/dist/audio/export/ExportPresetManager.d.ts.map +1 -0
- package/dist/audio/export/ExportPresetManager.js +306 -0
- package/dist/audio/export/ExportPresetManager.js.map +1 -0
- 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/FreezeTrackCommand.d.ts.map +1 -1
- package/dist/commands/impl/FreezeTrackCommand.js +37 -36
- package/dist/commands/impl/FreezeTrackCommand.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/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 +27 -0
- package/dist/commands/impl/TrimRegionToPlayheadCommand.d.ts.map +1 -0
- package/dist/commands/impl/TrimRegionToPlayheadCommand.js +69 -0
- package/dist/commands/impl/TrimRegionToPlayheadCommand.js.map +1 -0
- package/dist/commands/impl/TrimRegionToRangeCommand.d.ts +28 -0
- package/dist/commands/impl/TrimRegionToRangeCommand.d.ts.map +1 -0
- package/dist/commands/impl/TrimRegionToRangeCommand.js +69 -0
- package/dist/commands/impl/TrimRegionToRangeCommand.js.map +1 -0
- package/dist/commands/impl/TrimToAdjacentRegionCommand.d.ts +27 -0
- package/dist/commands/impl/TrimToAdjacentRegionCommand.d.ts.map +1 -0
- package/dist/commands/impl/TrimToAdjacentRegionCommand.js +77 -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/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/ExportConfig.d.ts +98 -1
- package/dist/domain/ExportConfig.d.ts.map +1 -1
- package/dist/domain/ExportConfig.js +154 -1
- package/dist/domain/ExportConfig.js.map +1 -1
- package/dist/domain/ExportPreset.d.ts +62 -0
- package/dist/domain/ExportPreset.d.ts.map +1 -0
- package/dist/domain/ExportPreset.js +79 -0
- package/dist/domain/ExportPreset.js.map +1 -0
- 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/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/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/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/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/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/ThawList.d.ts +37 -0
- package/dist/domain/ThawList.d.ts.map +1 -0
- package/dist/domain/ThawList.js +73 -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/TriggerBox.d.ts +123 -0
- package/dist/domain/TriggerBox.d.ts.map +1 -0
- package/dist/domain/TriggerBox.js +430 -0
- package/dist/domain/TriggerBox.js.map +1 -0
- package/dist/domain/VCATrack.d.ts +64 -1
- package/dist/domain/VCATrack.d.ts.map +1 -1
- package/dist/domain/VCATrack.js +128 -1
- package/dist/domain/VCATrack.js.map +1 -1
- package/dist/domain/VideoExportConfig.d.ts +117 -0
- package/dist/domain/VideoExportConfig.d.ts.map +1 -0
- package/dist/domain/VideoExportConfig.js +244 -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/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 +199 -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/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/ThawList.d.ts +100 -0
- package/dist/lib/ThawList.d.ts.map +1 -0
- package/dist/lib/ThawList.js +153 -0
- package/dist/lib/ThawList.js.map +1 -0
- package/dist/midi/MidiFileParser.d.ts +33 -0
- package/dist/midi/MidiFileParser.d.ts.map +1 -0
- package/dist/midi/MidiFileParser.js +246 -0
- package/dist/midi/MidiFileParser.js.map +1 -0
- package/dist/midi/MidiFileWriter.d.ts +31 -0
- package/dist/midi/MidiFileWriter.d.ts.map +1 -0
- package/dist/midi/MidiFileWriter.js +160 -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/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/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 +104 -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 +166 -0
- package/dist/processing/MeterDSP.d.ts.map +1 -0
- package/dist/processing/MeterDSP.js +754 -0
- package/dist/processing/MeterDSP.js.map +1 -0
- package/dist/processing/Panner.d.ts +145 -0
- package/dist/processing/Panner.d.ts.map +1 -0
- package/dist/processing/Panner.js +281 -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/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/SurroundPanner.d.ts +122 -0
- package/dist/processing/SurroundPanner.d.ts.map +1 -0
- package/dist/processing/SurroundPanner.js +376 -0
- package/dist/processing/SurroundPanner.js.map +1 -0
- package/dist/processing/TruePeakLimiter.d.ts +34 -0
- package/dist/processing/TruePeakLimiter.d.ts.map +1 -0
- package/dist/processing/TruePeakLimiter.js +144 -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/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 +42 -0
- package/dist/utils/BwfMetadataWriter.d.ts.map +1 -0
- package/dist/utils/BwfMetadataWriter.js +131 -0
- package/dist/utils/BwfMetadataWriter.js.map +1 -0
- package/dist/utils/FilenameTemplate.d.ts +40 -0
- package/dist/utils/FilenameTemplate.d.ts.map +1 -0
- package/dist/utils/FilenameTemplate.js +78 -0
- package/dist/utils/FilenameTemplate.js.map +1 -0
- 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 +17 -0
- package/dist/utils/Mp4ChapterGenerator.d.ts.map +1 -0
- package/dist/utils/Mp4ChapterGenerator.js +33 -0
- package/dist/utils/Mp4ChapterGenerator.js.map +1 -0
- package/dist/utils/OggEncoder.d.ts +20 -20
- package/dist/utils/OggEncoder.d.ts.map +1 -1
- package/dist/utils/OggEncoder.js +114 -50
- package/dist/utils/OggEncoder.js.map +1 -1
- package/dist/utils/TocGenerator.d.ts +17 -0
- package/dist/utils/TocGenerator.d.ts.map +1 -0
- package/dist/utils/TocGenerator.js +47 -0
- package/dist/utils/TocGenerator.js.map +1 -0
- package/package.json +7 -8
package/dist/domain/VCATrack.js
CHANGED
|
@@ -1,19 +1,31 @@
|
|
|
1
1
|
import { Signal } from '../lib/Signal';
|
|
2
2
|
/**
|
|
3
3
|
* VCA (Voltage Controlled Amplifier) Track
|
|
4
|
-
* Ardour
|
|
4
|
+
* Ardour reference: libs/ardour/vca.cc
|
|
5
5
|
*
|
|
6
6
|
* Virtual fader that controls multiple assigned tracks.
|
|
7
7
|
* Adjusting the VCA fader changes gain on all slave tracks
|
|
8
8
|
* while maintaining their relative volume differences.
|
|
9
|
+
*
|
|
10
|
+
* VCA master logic includes:
|
|
11
|
+
* - Proportional gain application to slave tracks
|
|
12
|
+
* - Mute/solo propagation to slave tracks
|
|
13
|
+
* - Automation enable/disable
|
|
9
14
|
*/
|
|
10
15
|
export class VCATrack {
|
|
11
16
|
constructor(id, name) {
|
|
12
17
|
this._gain = 1.0; // Linear gain (1.0 = 0dB)
|
|
13
18
|
this._slaveTrackIds = new Set();
|
|
19
|
+
// Mute/Solo state
|
|
20
|
+
this._muted = false;
|
|
21
|
+
this._soloed = false;
|
|
22
|
+
// Automation
|
|
23
|
+
this._automationEnabled = false;
|
|
14
24
|
this.gainChanged = new Signal();
|
|
15
25
|
this.slaveAdded = new Signal();
|
|
16
26
|
this.slaveRemoved = new Signal();
|
|
27
|
+
this.muteChanged = new Signal();
|
|
28
|
+
this.soloChanged = new Signal();
|
|
17
29
|
this.id = id;
|
|
18
30
|
this.name = name;
|
|
19
31
|
}
|
|
@@ -65,20 +77,135 @@ export class VCATrack {
|
|
|
65
77
|
get slaveCount() {
|
|
66
78
|
return this._slaveTrackIds.size;
|
|
67
79
|
}
|
|
80
|
+
// ── VCA Master Control Logic ────────────────────────────────────────────
|
|
81
|
+
/**
|
|
82
|
+
* Apply the current VCA gain as a delta to all slave tracks.
|
|
83
|
+
*
|
|
84
|
+
* Each slave track's fader volume is multiplied by the VCA's current
|
|
85
|
+
* linear gain. This preserves relative volume differences between
|
|
86
|
+
* slave tracks while allowing group-level control.
|
|
87
|
+
*
|
|
88
|
+
* @param getTrack Function to look up a Track by its ID.
|
|
89
|
+
* @returns Map of trackId -> the gain delta that was applied.
|
|
90
|
+
*/
|
|
91
|
+
applyGainToSlaves(getTrack) {
|
|
92
|
+
const appliedGains = new Map();
|
|
93
|
+
for (const slaveId of this._slaveTrackIds) {
|
|
94
|
+
const track = getTrack(slaveId);
|
|
95
|
+
if (!track)
|
|
96
|
+
continue;
|
|
97
|
+
// The VCA gain is the linear multiplier applied on top of
|
|
98
|
+
// each slave's own fader setting. We convert the VCA linear
|
|
99
|
+
// gain to dB and add it to the slave's route volume (which
|
|
100
|
+
// is already in dB).
|
|
101
|
+
const vcaGainDb = this.getGainDb();
|
|
102
|
+
const currentVolume = track.route.volume;
|
|
103
|
+
const newVolume = currentVolume + vcaGainDb;
|
|
104
|
+
track.route.volume = newVolume;
|
|
105
|
+
appliedGains.set(slaveId, vcaGainDb);
|
|
106
|
+
}
|
|
107
|
+
return appliedGains;
|
|
108
|
+
}
|
|
109
|
+
// ── Mute / Solo ─────────────────────────────────────────────────────────
|
|
110
|
+
/**
|
|
111
|
+
* Set the VCA mute state.
|
|
112
|
+
* When a VCA is muted, all slave tracks are considered muted
|
|
113
|
+
* regardless of their individual mute state.
|
|
114
|
+
*/
|
|
115
|
+
setMuted(muted) {
|
|
116
|
+
if (this._muted !== muted) {
|
|
117
|
+
this._muted = muted;
|
|
118
|
+
this.muteChanged.emit(muted);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
get muted() {
|
|
122
|
+
return this._muted;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Set the VCA solo state.
|
|
126
|
+
* When a VCA is soloed, all slave tracks are treated as soloed.
|
|
127
|
+
*/
|
|
128
|
+
setSoloed(soloed) {
|
|
129
|
+
if (this._soloed !== soloed) {
|
|
130
|
+
this._soloed = soloed;
|
|
131
|
+
this.soloChanged.emit(soloed);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
get soloed() {
|
|
135
|
+
return this._soloed;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Check if a slave should be audible considering VCA state.
|
|
139
|
+
*
|
|
140
|
+
* A slave is NOT audible if:
|
|
141
|
+
* - The VCA is muted (overrides individual track state)
|
|
142
|
+
* - The slave is not actually assigned to this VCA
|
|
143
|
+
*
|
|
144
|
+
* A slave IS audible if:
|
|
145
|
+
* - The VCA is not muted, or
|
|
146
|
+
* - The VCA is soloed (solo overrides mute for slaves)
|
|
147
|
+
*
|
|
148
|
+
* @param trackId The slave track ID to check.
|
|
149
|
+
* @returns true if the slave should produce audio.
|
|
150
|
+
*/
|
|
151
|
+
isSlaveAudible(trackId) {
|
|
152
|
+
if (!this._slaveTrackIds.has(trackId)) {
|
|
153
|
+
// Not our slave -- we have no opinion; return true
|
|
154
|
+
return true;
|
|
155
|
+
}
|
|
156
|
+
// Solo overrides mute at VCA level
|
|
157
|
+
if (this._soloed) {
|
|
158
|
+
return true;
|
|
159
|
+
}
|
|
160
|
+
// If VCA is muted, slave is not audible
|
|
161
|
+
if (this._muted) {
|
|
162
|
+
return false;
|
|
163
|
+
}
|
|
164
|
+
return true;
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Remove all slave tracks from this VCA.
|
|
168
|
+
*/
|
|
169
|
+
clearSlaves() {
|
|
170
|
+
const slaveIds = Array.from(this._slaveTrackIds);
|
|
171
|
+
for (const id of slaveIds) {
|
|
172
|
+
this._slaveTrackIds.delete(id);
|
|
173
|
+
this.slaveRemoved.emit(id);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
// ── Automation ───────────────────────────────────────────────────────────
|
|
177
|
+
/**
|
|
178
|
+
* Enable or disable automation playback for this VCA.
|
|
179
|
+
* When enabled, the VCA gain may be driven by an automation lane.
|
|
180
|
+
*/
|
|
181
|
+
setAutomationEnabled(enabled) {
|
|
182
|
+
this._automationEnabled = enabled;
|
|
183
|
+
}
|
|
184
|
+
get automationEnabled() {
|
|
185
|
+
return this._automationEnabled;
|
|
186
|
+
}
|
|
187
|
+
// ── Serialization ───────────────────────────────────────────────────────
|
|
68
188
|
toJSON() {
|
|
69
189
|
return {
|
|
70
190
|
id: this.id,
|
|
71
191
|
name: this.name,
|
|
72
192
|
gain: this._gain,
|
|
73
193
|
slaveTrackIds: Array.from(this._slaveTrackIds),
|
|
194
|
+
muted: this._muted,
|
|
195
|
+
soloed: this._soloed,
|
|
196
|
+
automationEnabled: this._automationEnabled,
|
|
74
197
|
};
|
|
75
198
|
}
|
|
76
199
|
static fromJSON(data) {
|
|
200
|
+
var _a, _b, _c;
|
|
77
201
|
const vca = new VCATrack(data.id, data.name);
|
|
78
202
|
vca._gain = data.gain;
|
|
79
203
|
for (const id of data.slaveTrackIds) {
|
|
80
204
|
vca._slaveTrackIds.add(id);
|
|
81
205
|
}
|
|
206
|
+
vca._muted = (_a = data.muted) !== null && _a !== void 0 ? _a : false;
|
|
207
|
+
vca._soloed = (_b = data.soloed) !== null && _b !== void 0 ? _b : false;
|
|
208
|
+
vca._automationEnabled = (_c = data.automationEnabled) !== null && _c !== void 0 ? _c : false;
|
|
82
209
|
return vca;
|
|
83
210
|
}
|
|
84
211
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VCATrack.js","sourceRoot":"","sources":["../../src/domain/VCATrack.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"VCATrack.js","sourceRoot":"","sources":["../../src/domain/VCATrack.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAIvC;;;;;;;;;;;;GAYG;AACH,MAAM,OAAO,QAAQ;IAmBjB,YAAY,EAAU,EAAE,IAAY;QAhB5B,UAAK,GAAW,GAAG,CAAC,CAAC,0BAA0B;QAC/C,mBAAc,GAAiB,IAAI,GAAG,EAAE,CAAC;QAEjD,kBAAkB;QACV,WAAM,GAAY,KAAK,CAAC;QACxB,YAAO,GAAY,KAAK,CAAC;QAEjC,aAAa;QACL,uBAAkB,GAAY,KAAK,CAAC;QAE5B,gBAAW,GAAG,IAAI,MAAM,EAAU,CAAC;QACnC,eAAU,GAAG,IAAI,MAAM,EAAW,CAAC;QACnC,iBAAY,GAAG,IAAI,MAAM,EAAW,CAAC;QACrC,gBAAW,GAAG,IAAI,MAAM,EAAW,CAAC;QACpC,gBAAW,GAAG,IAAI,MAAM,EAAW,CAAC;QAGhD,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACrB,CAAC;IAED,IAAW,IAAI;QACX,OAAO,IAAI,CAAC,KAAK,CAAC;IACtB,CAAC;IAED;;;OAGG;IACI,OAAO,CAAC,IAAY;QACvB,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC;QAC3B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QAC/B,kFAAkF;QAClF,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC;QACzD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClC,OAAO,KAAK,CAAC;IACjB,CAAC;IAED;;OAEG;IACI,SAAS,CAAC,EAAU;QACvB,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;IAC/C,CAAC;IAED;;OAEG;IACI,SAAS;QACZ,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC,CAAC;IACjD,CAAC;IAEM,QAAQ,CAAC,OAAgB;QAC5B,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YACpC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACjC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAClC,CAAC;IACL,CAAC;IAEM,WAAW,CAAC,OAAgB;QAC/B,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YACnC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACpC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACpC,CAAC;IACL,CAAC;IAEM,QAAQ,CAAC,OAAgB;QAC5B,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC5C,CAAC;IAED,IAAW,aAAa;QACpB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC3C,CAAC;IAED,IAAW,UAAU;QACjB,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;IACpC,CAAC;IAED,2EAA2E;IAE3E;;;;;;;;;OASG;IACI,iBAAiB,CACpB,QAA4C;QAE5C,MAAM,YAAY,GAAG,IAAI,GAAG,EAAmB,CAAC;QAEhD,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxC,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;YAChC,IAAI,CAAC,KAAK;gBAAE,SAAS;YAErB,0DAA0D;YAC1D,4DAA4D;YAC5D,2DAA2D;YAC3D,qBAAqB;YACrB,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;YACnC,MAAM,aAAa,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;YACzC,MAAM,SAAS,GAAG,aAAa,GAAG,SAAS,CAAC;YAE5C,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC;YAC/B,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QACzC,CAAC;QAED,OAAO,YAAY,CAAC;IACxB,CAAC;IAED,2EAA2E;IAE3E;;;;OAIG;IACI,QAAQ,CAAC,KAAc;QAC1B,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;YACxB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;YACpB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjC,CAAC;IACL,CAAC;IAED,IAAW,KAAK;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;IAED;;;OAGG;IACI,SAAS,CAAC,MAAe;QAC5B,IAAI,IAAI,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;YAC1B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;YACtB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAClC,CAAC;IACL,CAAC;IAED,IAAW,MAAM;QACb,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IAED;;;;;;;;;;;;;OAaG;IACI,cAAc,CAAC,OAAgB;QAClC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YACpC,mDAAmD;YACnD,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,mCAAmC;QACnC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,wCAAwC;QACxC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;OAEG;IACI,WAAW;QACd,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACjD,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE,CAAC;YACxB,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC/B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC/B,CAAC;IACL,CAAC;IAED,4EAA4E;IAE5E;;;OAGG;IACI,oBAAoB,CAAC,OAAgB;QACxC,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC;IACtC,CAAC;IAED,IAAW,iBAAiB;QACxB,OAAO,IAAI,CAAC,kBAAkB,CAAC;IACnC,CAAC;IAED,2EAA2E;IAEpE,MAAM;QACT,OAAO;YACH,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,IAAI,CAAC,KAAK;YAChB,aAAa,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC;YAC9C,KAAK,EAAE,IAAI,CAAC,MAAM;YAClB,MAAM,EAAE,IAAI,CAAC,OAAO;YACpB,iBAAiB,EAAE,IAAI,CAAC,kBAAkB;SAC7C,CAAC;IACN,CAAC;IAEM,MAAM,CAAC,QAAQ,CAAC,IAAsB;;QACzC,MAAM,GAAG,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7C,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YAClC,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,EAAa,CAAC,CAAC;QAC1C,CAAC;QACD,GAAG,CAAC,MAAM,GAAG,MAAA,IAAI,CAAC,KAAK,mCAAI,KAAK,CAAC;QACjC,GAAG,CAAC,OAAO,GAAG,MAAA,IAAI,CAAC,MAAM,mCAAI,KAAK,CAAC;QACnC,GAAG,CAAC,kBAAkB,GAAG,MAAA,IAAI,CAAC,iBAAiB,mCAAI,KAAK,CAAC;QACzD,OAAO,GAAG,CAAC;IACf,CAAC;CACJ"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { ExportConfig } from './ExportConfig';
|
|
2
|
+
/**
|
|
3
|
+
* Video codec options
|
|
4
|
+
*/
|
|
5
|
+
export declare enum VideoCodec {
|
|
6
|
+
H264 = "h264",
|
|
7
|
+
H265 = "h265",
|
|
8
|
+
VP8 = "vp8",
|
|
9
|
+
VP9 = "vp9"
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Video export presets for common platforms
|
|
13
|
+
*/
|
|
14
|
+
export declare enum VideoPreset {
|
|
15
|
+
YOUTUBE_1080P = "youtube_1080p",
|
|
16
|
+
YOUTUBE_4K = "youtube_4k",
|
|
17
|
+
VIMEO_HD = "vimeo_hd",
|
|
18
|
+
TWITTER = "twitter",
|
|
19
|
+
INSTAGRAM = "instagram",
|
|
20
|
+
CUSTOM = "custom"
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Video visualization types
|
|
24
|
+
*/
|
|
25
|
+
export declare enum VideoVisualizationType {
|
|
26
|
+
WAVEFORM = "waveform",
|
|
27
|
+
SPECTROGRAM = "spectrogram",
|
|
28
|
+
NONE = "none"
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Video export configuration extending base audio export
|
|
32
|
+
* Ardour reference: video export options in Ardour's export dialog
|
|
33
|
+
*/
|
|
34
|
+
export declare class VideoExportConfig extends ExportConfig {
|
|
35
|
+
videoEnabled: boolean;
|
|
36
|
+
videoCodec: VideoCodec;
|
|
37
|
+
videoPreset: VideoPreset;
|
|
38
|
+
videoWidth: number;
|
|
39
|
+
videoHeight: number;
|
|
40
|
+
videoFps: number;
|
|
41
|
+
videoBitrate?: number;
|
|
42
|
+
visualizationType: VideoVisualizationType;
|
|
43
|
+
backgroundColor: string;
|
|
44
|
+
foregroundColor: string;
|
|
45
|
+
showTimecode: boolean;
|
|
46
|
+
showMetadata: boolean;
|
|
47
|
+
metadataText?: string;
|
|
48
|
+
/**
|
|
49
|
+
* Set video enabled state
|
|
50
|
+
*/
|
|
51
|
+
setVideoEnabled(enabled: boolean): void;
|
|
52
|
+
/**
|
|
53
|
+
* Set video codec
|
|
54
|
+
*/
|
|
55
|
+
setVideoCodec(codec: VideoCodec): void;
|
|
56
|
+
/**
|
|
57
|
+
* Set video preset and apply preset settings
|
|
58
|
+
*/
|
|
59
|
+
setVideoPreset(preset: VideoPreset): void;
|
|
60
|
+
/**
|
|
61
|
+
* Set video resolution
|
|
62
|
+
*/
|
|
63
|
+
setVideoResolution(width: number, height: number): void;
|
|
64
|
+
/**
|
|
65
|
+
* Set video FPS
|
|
66
|
+
*/
|
|
67
|
+
setVideoFps(fps: number): void;
|
|
68
|
+
/**
|
|
69
|
+
* Set video bitrate (in kbps)
|
|
70
|
+
*/
|
|
71
|
+
setVideoBitrate(bitrate: number): void;
|
|
72
|
+
/**
|
|
73
|
+
* Set visualization type
|
|
74
|
+
*/
|
|
75
|
+
setVisualizationType(type: VideoVisualizationType): void;
|
|
76
|
+
/**
|
|
77
|
+
* Set background color (hex string)
|
|
78
|
+
*/
|
|
79
|
+
setBackgroundColor(color: string): void;
|
|
80
|
+
/**
|
|
81
|
+
* Set foreground color (hex string)
|
|
82
|
+
*/
|
|
83
|
+
setForegroundColor(color: string): void;
|
|
84
|
+
/**
|
|
85
|
+
* Set timecode overlay visibility
|
|
86
|
+
*/
|
|
87
|
+
setShowTimecode(show: boolean): void;
|
|
88
|
+
/**
|
|
89
|
+
* Set metadata overlay visibility
|
|
90
|
+
*/
|
|
91
|
+
setShowMetadata(show: boolean): void;
|
|
92
|
+
/**
|
|
93
|
+
* Set custom metadata text
|
|
94
|
+
*/
|
|
95
|
+
setMetadataText(text: string): void;
|
|
96
|
+
/**
|
|
97
|
+
* Apply platform-specific preset settings
|
|
98
|
+
*/
|
|
99
|
+
private applyPreset;
|
|
100
|
+
/**
|
|
101
|
+
* Get video file extension based on codec
|
|
102
|
+
*/
|
|
103
|
+
getVideoFileExtension(): string;
|
|
104
|
+
/**
|
|
105
|
+
* Get full video file path
|
|
106
|
+
*/
|
|
107
|
+
getVideoFullPath(): string;
|
|
108
|
+
/**
|
|
109
|
+
* Validate video export configuration
|
|
110
|
+
*/
|
|
111
|
+
validate(): boolean;
|
|
112
|
+
/**
|
|
113
|
+
* Get total frame count for video
|
|
114
|
+
*/
|
|
115
|
+
getVideoFrameCount(): number;
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=VideoExportConfig.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VideoExportConfig.d.ts","sourceRoot":"","sources":["../../src/domain/VideoExportConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAgB,MAAM,gBAAgB,CAAC;AAE5D;;GAEG;AACH,oBAAY,UAAU;IAClB,IAAI,SAAS;IACb,IAAI,SAAS;IACb,GAAG,QAAQ;IACX,GAAG,QAAQ;CACd;AAED;;GAEG;AACH,oBAAY,WAAW;IACnB,aAAa,kBAAkB;IAC/B,UAAU,eAAe;IACzB,QAAQ,aAAa;IACrB,OAAO,YAAY;IACnB,SAAS,cAAc;IACvB,MAAM,WAAW;CACpB;AAED;;GAEG;AACH,oBAAY,sBAAsB;IAC9B,QAAQ,aAAa;IACrB,WAAW,gBAAgB;IAC3B,IAAI,SAAS;CAChB;AAED;;;GAGG;AACH,qBAAa,iBAAkB,SAAQ,YAAY;IAExC,YAAY,EAAE,OAAO,CAAS;IAG9B,UAAU,EAAE,UAAU,CAAmB;IACzC,WAAW,EAAE,WAAW,CAA6B;IAGrD,UAAU,EAAE,MAAM,CAAQ;IAC1B,WAAW,EAAE,MAAM,CAAQ;IAC3B,QAAQ,EAAE,MAAM,CAAM;IAGtB,YAAY,CAAC,EAAE,MAAM,CAAC;IAGtB,iBAAiB,EAAE,sBAAsB,CAAmC;IAC5E,eAAe,EAAE,MAAM,CAAa;IACpC,eAAe,EAAE,MAAM,CAAa;IAGpC,YAAY,EAAE,OAAO,CAAQ;IAC7B,YAAY,EAAE,OAAO,CAAS;IAG9B,YAAY,CAAC,EAAE,MAAM,CAAC;IAE7B;;OAEG;IACI,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAS9C;;OAEG;IACI,aAAa,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAK7C;;OAEG;IACI,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IAMhD;;OAEG;IACI,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAM9D;;OAEG;IACI,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAKrC;;OAEG;IACI,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAK7C;;OAEG;IACI,oBAAoB,CAAC,IAAI,EAAE,sBAAsB,GAAG,IAAI;IAK/D;;OAEG;IACI,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK9C;;OAEG;IACI,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK9C;;OAEG;IACI,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAK3C;;OAEG;IACI,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAK3C;;OAEG;IACI,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAK1C;;OAEG;IACH,OAAO,CAAC,WAAW;IAgDnB;;OAEG;IACI,qBAAqB,IAAI,MAAM;IAatC;;OAEG;IACI,gBAAgB,IAAI,MAAM;IAMjC;;OAEG;IACa,QAAQ,IAAI,OAAO;IAmBnC;;OAEG;IACI,kBAAkB,IAAI,MAAM;CAItC"}
|
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
import { ExportConfig, ExportFormat } from './ExportConfig';
|
|
2
|
+
/**
|
|
3
|
+
* Video codec options
|
|
4
|
+
*/
|
|
5
|
+
export var VideoCodec;
|
|
6
|
+
(function (VideoCodec) {
|
|
7
|
+
VideoCodec["H264"] = "h264";
|
|
8
|
+
VideoCodec["H265"] = "h265";
|
|
9
|
+
VideoCodec["VP8"] = "vp8";
|
|
10
|
+
VideoCodec["VP9"] = "vp9";
|
|
11
|
+
})(VideoCodec || (VideoCodec = {}));
|
|
12
|
+
/**
|
|
13
|
+
* Video export presets for common platforms
|
|
14
|
+
*/
|
|
15
|
+
export var VideoPreset;
|
|
16
|
+
(function (VideoPreset) {
|
|
17
|
+
VideoPreset["YOUTUBE_1080P"] = "youtube_1080p";
|
|
18
|
+
VideoPreset["YOUTUBE_4K"] = "youtube_4k";
|
|
19
|
+
VideoPreset["VIMEO_HD"] = "vimeo_hd";
|
|
20
|
+
VideoPreset["TWITTER"] = "twitter";
|
|
21
|
+
VideoPreset["INSTAGRAM"] = "instagram";
|
|
22
|
+
VideoPreset["CUSTOM"] = "custom";
|
|
23
|
+
})(VideoPreset || (VideoPreset = {}));
|
|
24
|
+
/**
|
|
25
|
+
* Video visualization types
|
|
26
|
+
*/
|
|
27
|
+
export var VideoVisualizationType;
|
|
28
|
+
(function (VideoVisualizationType) {
|
|
29
|
+
VideoVisualizationType["WAVEFORM"] = "waveform";
|
|
30
|
+
VideoVisualizationType["SPECTROGRAM"] = "spectrogram";
|
|
31
|
+
VideoVisualizationType["NONE"] = "none";
|
|
32
|
+
})(VideoVisualizationType || (VideoVisualizationType = {}));
|
|
33
|
+
/**
|
|
34
|
+
* Video export configuration extending base audio export
|
|
35
|
+
* Ardour reference: video export options in Ardour's export dialog
|
|
36
|
+
*/
|
|
37
|
+
export class VideoExportConfig extends ExportConfig {
|
|
38
|
+
constructor() {
|
|
39
|
+
super(...arguments);
|
|
40
|
+
// Video Enable
|
|
41
|
+
this.videoEnabled = false;
|
|
42
|
+
// Video Codec Settings
|
|
43
|
+
this.videoCodec = VideoCodec.H264;
|
|
44
|
+
this.videoPreset = VideoPreset.YOUTUBE_1080P;
|
|
45
|
+
// Resolution Settings
|
|
46
|
+
this.videoWidth = 1920;
|
|
47
|
+
this.videoHeight = 1080;
|
|
48
|
+
this.videoFps = 30;
|
|
49
|
+
// Visualization Settings
|
|
50
|
+
this.visualizationType = VideoVisualizationType.WAVEFORM;
|
|
51
|
+
this.backgroundColor = '#000000';
|
|
52
|
+
this.foregroundColor = '#00ffcc';
|
|
53
|
+
// Overlay Settings
|
|
54
|
+
this.showTimecode = true;
|
|
55
|
+
this.showMetadata = false;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Set video enabled state
|
|
59
|
+
*/
|
|
60
|
+
setVideoEnabled(enabled) {
|
|
61
|
+
this.videoEnabled = enabled;
|
|
62
|
+
// Update format to MP4 when video is enabled
|
|
63
|
+
if (enabled && this.format !== ExportFormat.WAV) {
|
|
64
|
+
this.format = ExportFormat.WAV; // We'll mux to video separately
|
|
65
|
+
}
|
|
66
|
+
this.changed.emit();
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Set video codec
|
|
70
|
+
*/
|
|
71
|
+
setVideoCodec(codec) {
|
|
72
|
+
this.videoCodec = codec;
|
|
73
|
+
this.changed.emit();
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Set video preset and apply preset settings
|
|
77
|
+
*/
|
|
78
|
+
setVideoPreset(preset) {
|
|
79
|
+
this.videoPreset = preset;
|
|
80
|
+
this.applyPreset(preset);
|
|
81
|
+
this.changed.emit();
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Set video resolution
|
|
85
|
+
*/
|
|
86
|
+
setVideoResolution(width, height) {
|
|
87
|
+
this.videoWidth = width;
|
|
88
|
+
this.videoHeight = height;
|
|
89
|
+
this.changed.emit();
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Set video FPS
|
|
93
|
+
*/
|
|
94
|
+
setVideoFps(fps) {
|
|
95
|
+
this.videoFps = fps;
|
|
96
|
+
this.changed.emit();
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Set video bitrate (in kbps)
|
|
100
|
+
*/
|
|
101
|
+
setVideoBitrate(bitrate) {
|
|
102
|
+
this.videoBitrate = bitrate;
|
|
103
|
+
this.changed.emit();
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Set visualization type
|
|
107
|
+
*/
|
|
108
|
+
setVisualizationType(type) {
|
|
109
|
+
this.visualizationType = type;
|
|
110
|
+
this.changed.emit();
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Set background color (hex string)
|
|
114
|
+
*/
|
|
115
|
+
setBackgroundColor(color) {
|
|
116
|
+
this.backgroundColor = color;
|
|
117
|
+
this.changed.emit();
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Set foreground color (hex string)
|
|
121
|
+
*/
|
|
122
|
+
setForegroundColor(color) {
|
|
123
|
+
this.foregroundColor = color;
|
|
124
|
+
this.changed.emit();
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Set timecode overlay visibility
|
|
128
|
+
*/
|
|
129
|
+
setShowTimecode(show) {
|
|
130
|
+
this.showTimecode = show;
|
|
131
|
+
this.changed.emit();
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Set metadata overlay visibility
|
|
135
|
+
*/
|
|
136
|
+
setShowMetadata(show) {
|
|
137
|
+
this.showMetadata = show;
|
|
138
|
+
this.changed.emit();
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Set custom metadata text
|
|
142
|
+
*/
|
|
143
|
+
setMetadataText(text) {
|
|
144
|
+
this.metadataText = text;
|
|
145
|
+
this.changed.emit();
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Apply platform-specific preset settings
|
|
149
|
+
*/
|
|
150
|
+
applyPreset(preset) {
|
|
151
|
+
switch (preset) {
|
|
152
|
+
case VideoPreset.YOUTUBE_1080P:
|
|
153
|
+
this.videoWidth = 1920;
|
|
154
|
+
this.videoHeight = 1080;
|
|
155
|
+
this.videoFps = 30;
|
|
156
|
+
this.videoBitrate = 8000; // 8 Mbps
|
|
157
|
+
this.videoCodec = VideoCodec.H264;
|
|
158
|
+
break;
|
|
159
|
+
case VideoPreset.YOUTUBE_4K:
|
|
160
|
+
this.videoWidth = 3840;
|
|
161
|
+
this.videoHeight = 2160;
|
|
162
|
+
this.videoFps = 60;
|
|
163
|
+
this.videoBitrate = 45000; // 45 Mbps
|
|
164
|
+
this.videoCodec = VideoCodec.H265;
|
|
165
|
+
break;
|
|
166
|
+
case VideoPreset.VIMEO_HD:
|
|
167
|
+
this.videoWidth = 1920;
|
|
168
|
+
this.videoHeight = 1080;
|
|
169
|
+
this.videoFps = 30;
|
|
170
|
+
this.videoBitrate = 10000; // 10 Mbps
|
|
171
|
+
this.videoCodec = VideoCodec.H264;
|
|
172
|
+
break;
|
|
173
|
+
case VideoPreset.TWITTER:
|
|
174
|
+
this.videoWidth = 1280;
|
|
175
|
+
this.videoHeight = 720;
|
|
176
|
+
this.videoFps = 30;
|
|
177
|
+
this.videoBitrate = 5000; // 5 Mbps
|
|
178
|
+
this.videoCodec = VideoCodec.H264;
|
|
179
|
+
break;
|
|
180
|
+
case VideoPreset.INSTAGRAM:
|
|
181
|
+
this.videoWidth = 1080;
|
|
182
|
+
this.videoHeight = 1080;
|
|
183
|
+
this.videoFps = 30;
|
|
184
|
+
this.videoBitrate = 5000; // 5 Mbps
|
|
185
|
+
this.videoCodec = VideoCodec.H264;
|
|
186
|
+
break;
|
|
187
|
+
case VideoPreset.CUSTOM:
|
|
188
|
+
// Keep current settings
|
|
189
|
+
break;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Get video file extension based on codec
|
|
194
|
+
*/
|
|
195
|
+
getVideoFileExtension() {
|
|
196
|
+
switch (this.videoCodec) {
|
|
197
|
+
case VideoCodec.H264:
|
|
198
|
+
case VideoCodec.H265:
|
|
199
|
+
return 'mp4';
|
|
200
|
+
case VideoCodec.VP8:
|
|
201
|
+
case VideoCodec.VP9:
|
|
202
|
+
return 'webm';
|
|
203
|
+
default:
|
|
204
|
+
return 'mp4';
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Get full video file path
|
|
209
|
+
*/
|
|
210
|
+
getVideoFullPath() {
|
|
211
|
+
const ext = this.getVideoFileExtension();
|
|
212
|
+
const folder = this.folder || 'exports';
|
|
213
|
+
return `${folder}/${this.filename}.${ext}`;
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Validate video export configuration
|
|
217
|
+
*/
|
|
218
|
+
validate() {
|
|
219
|
+
// First validate base audio settings
|
|
220
|
+
if (!super.validate()) {
|
|
221
|
+
return false;
|
|
222
|
+
}
|
|
223
|
+
// If video is disabled, base validation is sufficient
|
|
224
|
+
if (!this.videoEnabled) {
|
|
225
|
+
return true;
|
|
226
|
+
}
|
|
227
|
+
// Validate video-specific settings
|
|
228
|
+
if (this.videoWidth <= 0 || this.videoHeight <= 0)
|
|
229
|
+
return false;
|
|
230
|
+
if (this.videoFps <= 0 || this.videoFps > 120)
|
|
231
|
+
return false;
|
|
232
|
+
if (this.videoBitrate !== undefined && this.videoBitrate <= 0)
|
|
233
|
+
return false;
|
|
234
|
+
return true;
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Get total frame count for video
|
|
238
|
+
*/
|
|
239
|
+
getVideoFrameCount() {
|
|
240
|
+
const duration = this.getDuration() / this.sampleRate; // Duration in seconds
|
|
241
|
+
return Math.ceil(duration * this.videoFps);
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
//# sourceMappingURL=VideoExportConfig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VideoExportConfig.js","sourceRoot":"","sources":["../../src/domain/VideoExportConfig.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { Signal } from '../lib/Signal';
|
|
2
|
+
import { ExportStatus } from './ExportStatus';
|
|
3
|
+
/**
|
|
4
|
+
* Video Export Progress Stages
|
|
5
|
+
* Extends base export progress with video-specific stages
|
|
6
|
+
*/
|
|
7
|
+
export declare enum VideoExportStage {
|
|
8
|
+
IDLE = "idle",
|
|
9
|
+
RENDERING_AUDIO = "rendering_audio",
|
|
10
|
+
RENDERING_VIDEO = "rendering_video",
|
|
11
|
+
MUXING = "muxing",
|
|
12
|
+
COMPLETED = "completed",
|
|
13
|
+
FAILED = "failed",
|
|
14
|
+
ABORTED = "aborted"
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Video Export Status
|
|
18
|
+
* Extends ExportStatus to track multi-phase video export:
|
|
19
|
+
* - Phase 1: Audio rendering (40%)
|
|
20
|
+
* - Phase 2: Video frame rendering (40%)
|
|
21
|
+
* - Phase 3: FFmpeg muxing (20%)
|
|
22
|
+
*/
|
|
23
|
+
export declare class VideoExportStatus extends ExportStatus {
|
|
24
|
+
totalFrames: number;
|
|
25
|
+
processedFrames: number;
|
|
26
|
+
ffmpegProgress: number;
|
|
27
|
+
private audioProgress;
|
|
28
|
+
private videoProgress;
|
|
29
|
+
private muxingProgress;
|
|
30
|
+
private _currentStage;
|
|
31
|
+
readonly videoFrameProcessed: Signal<number>;
|
|
32
|
+
readonly ffmpegProgressChanged: Signal<number>;
|
|
33
|
+
readonly stageChanged: Signal<VideoExportStage>;
|
|
34
|
+
constructor();
|
|
35
|
+
/**
|
|
36
|
+
* Get current video export stage
|
|
37
|
+
*/
|
|
38
|
+
get currentStage(): VideoExportStage;
|
|
39
|
+
/**
|
|
40
|
+
* Get overall progress (weighted across all phases)
|
|
41
|
+
* Audio: 40%, Video: 40%, Muxing: 20%
|
|
42
|
+
*/
|
|
43
|
+
get overallProgress(): number;
|
|
44
|
+
/**
|
|
45
|
+
* Initialize video export
|
|
46
|
+
*/
|
|
47
|
+
initVideoExport(totalAudioFrames: number, totalVideoFrames: number, filename: string): void;
|
|
48
|
+
/**
|
|
49
|
+
* Update audio rendering progress
|
|
50
|
+
*/
|
|
51
|
+
updateAudioProgress(processedAudioFrames: number, totalAudioFrames: number): void;
|
|
52
|
+
/**
|
|
53
|
+
* Start video frame rendering phase
|
|
54
|
+
*/
|
|
55
|
+
startVideoRendering(): void;
|
|
56
|
+
/**
|
|
57
|
+
* Update video frame rendering progress
|
|
58
|
+
*/
|
|
59
|
+
updateVideoFrameProgress(processedFrames: number): void;
|
|
60
|
+
/**
|
|
61
|
+
* Start FFmpeg muxing phase
|
|
62
|
+
*/
|
|
63
|
+
startMuxing(): void;
|
|
64
|
+
/**
|
|
65
|
+
* Update FFmpeg muxing progress
|
|
66
|
+
*/
|
|
67
|
+
updateFFmpegProgress(progress: number): void;
|
|
68
|
+
/**
|
|
69
|
+
* Complete video export
|
|
70
|
+
*/
|
|
71
|
+
completeVideoExport(blob: Blob, url: string): void;
|
|
72
|
+
/**
|
|
73
|
+
* Fail video export with error
|
|
74
|
+
*/
|
|
75
|
+
failVideoExport(message: string): void;
|
|
76
|
+
/**
|
|
77
|
+
* Abort video export
|
|
78
|
+
*/
|
|
79
|
+
abortVideoExport(errorOccurred?: boolean): void;
|
|
80
|
+
/**
|
|
81
|
+
* Get stage display name
|
|
82
|
+
*/
|
|
83
|
+
getStageName(): string;
|
|
84
|
+
/**
|
|
85
|
+
* Get progress message for current stage
|
|
86
|
+
*/
|
|
87
|
+
getProgressMessage(): string;
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=VideoExportStatus.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VideoExportStatus.d.ts","sourceRoot":"","sources":["../../src/domain/VideoExportStatus.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvC,OAAO,EAAE,YAAY,EAAkB,MAAM,gBAAgB,CAAC;AAE9D;;;GAGG;AACH,oBAAY,gBAAgB;IACxB,IAAI,SAAS;IACb,eAAe,oBAAoB;IACnC,eAAe,oBAAoB;IACnC,MAAM,WAAW;IACjB,SAAS,cAAc;IACvB,MAAM,WAAW;IACjB,OAAO,YAAY;CACtB;AAED;;;;;;GAMG;AACH,qBAAa,iBAAkB,SAAQ,YAAY;IAExC,WAAW,EAAE,MAAM,CAAK;IACxB,eAAe,EAAE,MAAM,CAAK;IAC5B,cAAc,EAAE,MAAM,CAAK;IAGlC,OAAO,CAAC,aAAa,CAAa;IAClC,OAAO,CAAC,aAAa,CAAa;IAClC,OAAO,CAAC,cAAc,CAAa;IAGnC,OAAO,CAAC,aAAa,CAA2C;IAGhE,SAAgB,mBAAmB,iBAAwB;IAC3D,SAAgB,qBAAqB,iBAAwB;IAC7D,SAAgB,YAAY,2BAAkC;;IAM9D;;OAEG;IACH,IAAW,YAAY,IAAI,gBAAgB,CAE1C;IAED;;;OAGG;IACH,IAAW,eAAe,IAAI,MAAM,CAMnC;IAED;;OAEG;IACI,eAAe,CAClB,gBAAgB,EAAE,MAAM,EACxB,gBAAgB,EAAE,MAAM,EACxB,QAAQ,EAAE,MAAM,GACjB,IAAI;IAgBP;;OAEG;IACI,mBAAmB,CAAC,oBAAoB,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAAG,IAAI;IASxF;;OAEG;IACI,mBAAmB,IAAI,IAAI;IAOlC;;OAEG;IACI,wBAAwB,CAAC,eAAe,EAAE,MAAM,GAAG,IAAI;IAS9D;;OAEG;IACI,WAAW,IAAI,IAAI;IAO1B;;OAEG;IACI,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAMnD;;OAEG;IACI,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAWzD;;OAEG;IACI,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAM7C;;OAEG;IACI,gBAAgB,CAAC,aAAa,GAAE,OAAe,GAAG,IAAI;IAM7D;;OAEG;IACI,YAAY,IAAI,MAAM;IAqB7B;;OAEG;IACI,kBAAkB,IAAI,MAAM;CAkBtC"}
|