@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.
Files changed (301) hide show
  1. package/README.md +655 -237
  2. package/dist/actions/ActionRegistry.d.ts.map +1 -1
  3. package/dist/actions/ActionRegistry.js +7 -2
  4. package/dist/actions/ActionRegistry.js.map +1 -1
  5. package/dist/actions/types.d.ts +7 -1
  6. package/dist/actions/types.d.ts.map +1 -1
  7. package/dist/analysis/AudioAnalyzer.d.ts +71 -0
  8. package/dist/analysis/AudioAnalyzer.d.ts.map +1 -0
  9. package/dist/analysis/AudioAnalyzer.js +569 -0
  10. package/dist/analysis/AudioAnalyzer.js.map +1 -0
  11. package/dist/audio/AudioEngine.d.ts +14 -1
  12. package/dist/audio/AudioEngine.d.ts.map +1 -1
  13. package/dist/audio/AudioEngine.js +115 -35
  14. package/dist/audio/AudioEngine.js.map +1 -1
  15. package/dist/audio/Auditioner.d.ts +104 -0
  16. package/dist/audio/Auditioner.d.ts.map +1 -0
  17. package/dist/audio/Auditioner.js +239 -0
  18. package/dist/audio/Auditioner.js.map +1 -0
  19. package/dist/audio/BWFMetadata.d.ts +116 -0
  20. package/dist/audio/BWFMetadata.d.ts.map +1 -0
  21. package/dist/audio/BWFMetadata.js +394 -0
  22. package/dist/audio/BWFMetadata.js.map +1 -0
  23. package/dist/audio/ChannelSplitter.d.ts +37 -0
  24. package/dist/audio/ChannelSplitter.d.ts.map +1 -0
  25. package/dist/audio/ChannelSplitter.js +82 -0
  26. package/dist/audio/ChannelSplitter.js.map +1 -0
  27. package/dist/audio/ExportAnalyzer.d.ts +39 -0
  28. package/dist/audio/ExportAnalyzer.d.ts.map +1 -0
  29. package/dist/audio/ExportAnalyzer.js +76 -0
  30. package/dist/audio/ExportAnalyzer.js.map +1 -0
  31. package/dist/audio/LufsNormalizer.d.ts +37 -0
  32. package/dist/audio/LufsNormalizer.d.ts.map +1 -0
  33. package/dist/audio/LufsNormalizer.js +217 -0
  34. package/dist/audio/LufsNormalizer.js.map +1 -0
  35. package/dist/audio/OfflineExporter.d.ts +1 -6
  36. package/dist/audio/OfflineExporter.d.ts.map +1 -1
  37. package/dist/audio/OfflineExporter.js +31 -10
  38. package/dist/audio/OfflineExporter.js.map +1 -1
  39. package/dist/audio/RoutingGraph.d.ts +134 -0
  40. package/dist/audio/RoutingGraph.d.ts.map +1 -0
  41. package/dist/audio/RoutingGraph.js +547 -0
  42. package/dist/audio/RoutingGraph.js.map +1 -0
  43. package/dist/audio/SampleRateConverter.d.ts +21 -0
  44. package/dist/audio/SampleRateConverter.d.ts.map +1 -0
  45. package/dist/audio/SampleRateConverter.js +84 -0
  46. package/dist/audio/SampleRateConverter.js.map +1 -0
  47. package/dist/audio/SilencePadding.d.ts +29 -0
  48. package/dist/audio/SilencePadding.d.ts.map +1 -0
  49. package/dist/audio/SilencePadding.js +86 -0
  50. package/dist/audio/SilencePadding.js.map +1 -0
  51. package/dist/audio/SourceCache.d.ts +13 -16
  52. package/dist/audio/SourceCache.d.ts.map +1 -1
  53. package/dist/audio/SourceCache.js +21 -33
  54. package/dist/audio/SourceCache.js.map +1 -1
  55. package/dist/audio/engine/Declick.d.ts +98 -0
  56. package/dist/audio/engine/Declick.d.ts.map +1 -0
  57. package/dist/audio/engine/Declick.js +204 -0
  58. package/dist/audio/engine/Declick.js.map +1 -0
  59. package/dist/audio/engine/DiskIO.d.ts +172 -0
  60. package/dist/audio/engine/DiskIO.d.ts.map +1 -0
  61. package/dist/audio/engine/DiskIO.js +384 -0
  62. package/dist/audio/engine/DiskIO.js.map +1 -0
  63. package/dist/audio/engine/LatencyCompensator.d.ts +46 -0
  64. package/dist/audio/engine/LatencyCompensator.d.ts.map +1 -0
  65. package/dist/audio/engine/LatencyCompensator.js +84 -0
  66. package/dist/audio/engine/LatencyCompensator.js.map +1 -0
  67. package/dist/audio/engine/MultiTrackRecorder.d.ts +146 -0
  68. package/dist/audio/engine/MultiTrackRecorder.d.ts.map +1 -0
  69. package/dist/audio/engine/MultiTrackRecorder.js +359 -0
  70. package/dist/audio/engine/MultiTrackRecorder.js.map +1 -0
  71. package/dist/audio/engine/PlaylistEngine.d.ts.map +1 -1
  72. package/dist/audio/engine/PlaylistEngine.js +9 -2
  73. package/dist/audio/engine/PlaylistEngine.js.map +1 -1
  74. package/dist/audio/engine/PunchRecordManager.d.ts +113 -0
  75. package/dist/audio/engine/PunchRecordManager.d.ts.map +1 -0
  76. package/dist/audio/engine/PunchRecordManager.js +191 -0
  77. package/dist/audio/engine/PunchRecordManager.js.map +1 -0
  78. package/dist/audio/engine/RoutingGraph.d.ts +135 -0
  79. package/dist/audio/engine/RoutingGraph.d.ts.map +1 -0
  80. package/dist/audio/engine/RoutingGraph.js +436 -0
  81. package/dist/audio/engine/RoutingGraph.js.map +1 -0
  82. package/dist/audio/engine/SidechainRouter.d.ts +139 -0
  83. package/dist/audio/engine/SidechainRouter.d.ts.map +1 -0
  84. package/dist/audio/engine/SidechainRouter.js +292 -0
  85. package/dist/audio/engine/SidechainRouter.js.map +1 -0
  86. package/dist/audio/engine/XrunTracker.d.ts +71 -0
  87. package/dist/audio/engine/XrunTracker.d.ts.map +1 -0
  88. package/dist/audio/engine/XrunTracker.js +118 -0
  89. package/dist/audio/engine/XrunTracker.js.map +1 -0
  90. package/dist/audio/export/CDMarkerExporter.d.ts +62 -0
  91. package/dist/audio/export/CDMarkerExporter.d.ts.map +1 -0
  92. package/dist/audio/export/CDMarkerExporter.js +164 -0
  93. package/dist/audio/export/CDMarkerExporter.js.map +1 -0
  94. package/dist/audio/export/ExportGraphBuilder.d.ts +121 -0
  95. package/dist/audio/export/ExportGraphBuilder.d.ts.map +1 -0
  96. package/dist/audio/export/ExportGraphBuilder.js +522 -0
  97. package/dist/audio/export/ExportGraphBuilder.js.map +1 -0
  98. package/dist/audio/export/ExportPresetManager.d.ts +87 -0
  99. package/dist/audio/export/ExportPresetManager.d.ts.map +1 -0
  100. package/dist/audio/export/ExportPresetManager.js +306 -0
  101. package/dist/audio/export/ExportPresetManager.js.map +1 -0
  102. package/dist/commands/handlers/RegionHandler.d.ts.map +1 -1
  103. package/dist/commands/handlers/RegionHandler.js +25 -1
  104. package/dist/commands/handlers/RegionHandler.js.map +1 -1
  105. package/dist/commands/handlers/TrackHandler.js +1 -1
  106. package/dist/commands/handlers/TrackHandler.js.map +1 -1
  107. package/dist/commands/impl/FreezeTrackCommand.d.ts.map +1 -1
  108. package/dist/commands/impl/FreezeTrackCommand.js +37 -36
  109. package/dist/commands/impl/FreezeTrackCommand.js.map +1 -1
  110. package/dist/commands/impl/SetRegionTimeDomainCommand.d.ts.map +1 -1
  111. package/dist/commands/impl/SetRegionTimeDomainCommand.js +3 -3
  112. package/dist/commands/impl/SetRegionTimeDomainCommand.js.map +1 -1
  113. package/dist/commands/impl/ToggleLoopCommand.d.ts +1 -0
  114. package/dist/commands/impl/ToggleLoopCommand.d.ts.map +1 -1
  115. package/dist/commands/impl/ToggleLoopCommand.js +10 -0
  116. package/dist/commands/impl/ToggleLoopCommand.js.map +1 -1
  117. package/dist/commands/impl/TrimRegionCommand.d.ts +14 -1
  118. package/dist/commands/impl/TrimRegionCommand.d.ts.map +1 -1
  119. package/dist/commands/impl/TrimRegionCommand.js +138 -33
  120. package/dist/commands/impl/TrimRegionCommand.js.map +1 -1
  121. package/dist/commands/impl/TrimRegionToPlayheadCommand.d.ts +27 -0
  122. package/dist/commands/impl/TrimRegionToPlayheadCommand.d.ts.map +1 -0
  123. package/dist/commands/impl/TrimRegionToPlayheadCommand.js +69 -0
  124. package/dist/commands/impl/TrimRegionToPlayheadCommand.js.map +1 -0
  125. package/dist/commands/impl/TrimRegionToRangeCommand.d.ts +28 -0
  126. package/dist/commands/impl/TrimRegionToRangeCommand.d.ts.map +1 -0
  127. package/dist/commands/impl/TrimRegionToRangeCommand.js +69 -0
  128. package/dist/commands/impl/TrimRegionToRangeCommand.js.map +1 -0
  129. package/dist/commands/impl/TrimToAdjacentRegionCommand.d.ts +27 -0
  130. package/dist/commands/impl/TrimToAdjacentRegionCommand.d.ts.map +1 -0
  131. package/dist/commands/impl/TrimToAdjacentRegionCommand.js +77 -0
  132. package/dist/commands/impl/TrimToAdjacentRegionCommand.js.map +1 -0
  133. package/dist/commands/types.d.ts +19 -0
  134. package/dist/commands/types.d.ts.map +1 -1
  135. package/dist/commands/types.js +21 -0
  136. package/dist/commands/types.js.map +1 -1
  137. package/dist/domain/Crossfade.d.ts +78 -0
  138. package/dist/domain/Crossfade.d.ts.map +1 -0
  139. package/dist/domain/Crossfade.js +216 -0
  140. package/dist/domain/Crossfade.js.map +1 -0
  141. package/dist/domain/ExportConfig.d.ts +98 -1
  142. package/dist/domain/ExportConfig.d.ts.map +1 -1
  143. package/dist/domain/ExportConfig.js +154 -1
  144. package/dist/domain/ExportConfig.js.map +1 -1
  145. package/dist/domain/ExportPreset.d.ts +62 -0
  146. package/dist/domain/ExportPreset.d.ts.map +1 -0
  147. package/dist/domain/ExportPreset.js +79 -0
  148. package/dist/domain/ExportPreset.js.map +1 -0
  149. package/dist/domain/ImportStatus.d.ts +40 -0
  150. package/dist/domain/ImportStatus.d.ts.map +1 -0
  151. package/dist/domain/ImportStatus.js +86 -0
  152. package/dist/domain/ImportStatus.js.map +1 -0
  153. package/dist/domain/Playlist.d.ts +72 -0
  154. package/dist/domain/Playlist.d.ts.map +1 -1
  155. package/dist/domain/Playlist.js +231 -6
  156. package/dist/domain/Playlist.js.map +1 -1
  157. package/dist/domain/Region.d.ts +76 -0
  158. package/dist/domain/Region.d.ts.map +1 -1
  159. package/dist/domain/Region.js +234 -1
  160. package/dist/domain/Region.js.map +1 -1
  161. package/dist/domain/Route.d.ts +43 -3
  162. package/dist/domain/Route.d.ts.map +1 -1
  163. package/dist/domain/Route.js +92 -6
  164. package/dist/domain/Route.js.map +1 -1
  165. package/dist/domain/Session.d.ts +31 -0
  166. package/dist/domain/Session.d.ts.map +1 -1
  167. package/dist/domain/Session.js +70 -0
  168. package/dist/domain/Session.js.map +1 -1
  169. package/dist/domain/Source.d.ts +145 -1
  170. package/dist/domain/Source.d.ts.map +1 -1
  171. package/dist/domain/Source.js +144 -1
  172. package/dist/domain/Source.js.map +1 -1
  173. package/dist/domain/ThawList.d.ts +37 -0
  174. package/dist/domain/ThawList.d.ts.map +1 -0
  175. package/dist/domain/ThawList.js +73 -0
  176. package/dist/domain/ThawList.js.map +1 -0
  177. package/dist/domain/Track.d.ts +93 -1
  178. package/dist/domain/Track.d.ts.map +1 -1
  179. package/dist/domain/Track.js +136 -0
  180. package/dist/domain/Track.js.map +1 -1
  181. package/dist/domain/TriggerBox.d.ts +123 -0
  182. package/dist/domain/TriggerBox.d.ts.map +1 -0
  183. package/dist/domain/TriggerBox.js +430 -0
  184. package/dist/domain/TriggerBox.js.map +1 -0
  185. package/dist/domain/VCATrack.d.ts +64 -1
  186. package/dist/domain/VCATrack.d.ts.map +1 -1
  187. package/dist/domain/VCATrack.js +128 -1
  188. package/dist/domain/VCATrack.js.map +1 -1
  189. package/dist/domain/VideoExportConfig.d.ts +117 -0
  190. package/dist/domain/VideoExportConfig.d.ts.map +1 -0
  191. package/dist/domain/VideoExportConfig.js +244 -0
  192. package/dist/domain/VideoExportConfig.js.map +1 -0
  193. package/dist/domain/VideoExportStatus.d.ts +89 -0
  194. package/dist/domain/VideoExportStatus.d.ts.map +1 -0
  195. package/dist/domain/VideoExportStatus.js +192 -0
  196. package/dist/domain/VideoExportStatus.js.map +1 -0
  197. package/dist/domain/VideoMetadata.d.ts +46 -0
  198. package/dist/domain/VideoMetadata.d.ts.map +1 -0
  199. package/dist/domain/VideoMetadata.js +2 -0
  200. package/dist/domain/VideoMetadata.js.map +1 -0
  201. package/dist/domain/index.d.ts +5 -0
  202. package/dist/domain/index.d.ts.map +1 -1
  203. package/dist/domain/index.js +5 -0
  204. package/dist/domain/index.js.map +1 -1
  205. package/dist/domain/temporal/TempoMap.d.ts +199 -2
  206. package/dist/domain/temporal/TempoMap.d.ts.map +1 -1
  207. package/dist/domain/temporal/TempoMap.js +464 -30
  208. package/dist/domain/temporal/TempoMap.js.map +1 -1
  209. package/dist/index.d.ts +43 -1
  210. package/dist/index.d.ts.map +1 -1
  211. package/dist/index.js +32 -1
  212. package/dist/index.js.map +1 -1
  213. package/dist/lib/ThawList.d.ts +100 -0
  214. package/dist/lib/ThawList.d.ts.map +1 -0
  215. package/dist/lib/ThawList.js +153 -0
  216. package/dist/lib/ThawList.js.map +1 -0
  217. package/dist/midi/MidiFileParser.d.ts +33 -0
  218. package/dist/midi/MidiFileParser.d.ts.map +1 -0
  219. package/dist/midi/MidiFileParser.js +246 -0
  220. package/dist/midi/MidiFileParser.js.map +1 -0
  221. package/dist/midi/MidiFileWriter.d.ts +31 -0
  222. package/dist/midi/MidiFileWriter.d.ts.map +1 -0
  223. package/dist/midi/MidiFileWriter.js +160 -0
  224. package/dist/midi/MidiFileWriter.js.map +1 -0
  225. package/dist/midi/MidiImporter.d.ts +37 -0
  226. package/dist/midi/MidiImporter.d.ts.map +1 -0
  227. package/dist/midi/MidiImporter.js +62 -0
  228. package/dist/midi/MidiImporter.js.map +1 -0
  229. package/dist/plugins/PluginPresetManager.d.ts +86 -0
  230. package/dist/plugins/PluginPresetManager.d.ts.map +1 -0
  231. package/dist/plugins/PluginPresetManager.js +140 -0
  232. package/dist/plugins/PluginPresetManager.js.map +1 -0
  233. package/dist/processing/IO.d.ts +15 -1
  234. package/dist/processing/IO.d.ts.map +1 -1
  235. package/dist/processing/IO.js +29 -1
  236. package/dist/processing/IO.js.map +1 -1
  237. package/dist/processing/InternalSend.d.ts +104 -0
  238. package/dist/processing/InternalSend.d.ts.map +1 -0
  239. package/dist/processing/InternalSend.js +175 -0
  240. package/dist/processing/InternalSend.js.map +1 -0
  241. package/dist/processing/MeterDSP.d.ts +166 -0
  242. package/dist/processing/MeterDSP.d.ts.map +1 -0
  243. package/dist/processing/MeterDSP.js +754 -0
  244. package/dist/processing/MeterDSP.js.map +1 -0
  245. package/dist/processing/Panner.d.ts +145 -0
  246. package/dist/processing/Panner.d.ts.map +1 -0
  247. package/dist/processing/Panner.js +281 -0
  248. package/dist/processing/Panner.js.map +1 -0
  249. package/dist/processing/PluginInsert.d.ts +56 -1
  250. package/dist/processing/PluginInsert.d.ts.map +1 -1
  251. package/dist/processing/PluginInsert.js +180 -2
  252. package/dist/processing/PluginInsert.js.map +1 -1
  253. package/dist/processing/Processor.d.ts +38 -0
  254. package/dist/processing/Processor.d.ts.map +1 -1
  255. package/dist/processing/Processor.js +60 -1
  256. package/dist/processing/Processor.js.map +1 -1
  257. package/dist/processing/SurroundPanner.d.ts +122 -0
  258. package/dist/processing/SurroundPanner.d.ts.map +1 -0
  259. package/dist/processing/SurroundPanner.js +376 -0
  260. package/dist/processing/SurroundPanner.js.map +1 -0
  261. package/dist/processing/TruePeakLimiter.d.ts +34 -0
  262. package/dist/processing/TruePeakLimiter.d.ts.map +1 -0
  263. package/dist/processing/TruePeakLimiter.js +144 -0
  264. package/dist/processing/TruePeakLimiter.js.map +1 -0
  265. package/dist/storage/ExportPresetStorage.d.ts +33 -0
  266. package/dist/storage/ExportPresetStorage.d.ts.map +1 -0
  267. package/dist/storage/ExportPresetStorage.js +121 -0
  268. package/dist/storage/ExportPresetStorage.js.map +1 -0
  269. package/dist/storage/SessionArchive.d.ts +73 -0
  270. package/dist/storage/SessionArchive.d.ts.map +1 -0
  271. package/dist/storage/SessionArchive.js +211 -0
  272. package/dist/storage/SessionArchive.js.map +1 -0
  273. package/dist/storage/SessionTemplate.d.ts +74 -5
  274. package/dist/storage/SessionTemplate.d.ts.map +1 -1
  275. package/dist/storage/SessionTemplate.js +247 -53
  276. package/dist/storage/SessionTemplate.js.map +1 -1
  277. package/dist/utils/BwfMetadataWriter.d.ts +42 -0
  278. package/dist/utils/BwfMetadataWriter.d.ts.map +1 -0
  279. package/dist/utils/BwfMetadataWriter.js +131 -0
  280. package/dist/utils/BwfMetadataWriter.js.map +1 -0
  281. package/dist/utils/FilenameTemplate.d.ts +40 -0
  282. package/dist/utils/FilenameTemplate.d.ts.map +1 -0
  283. package/dist/utils/FilenameTemplate.js +78 -0
  284. package/dist/utils/FilenameTemplate.js.map +1 -0
  285. package/dist/utils/Logger.d.ts +28 -0
  286. package/dist/utils/Logger.d.ts.map +1 -0
  287. package/dist/utils/Logger.js +46 -0
  288. package/dist/utils/Logger.js.map +1 -0
  289. package/dist/utils/Mp4ChapterGenerator.d.ts +17 -0
  290. package/dist/utils/Mp4ChapterGenerator.d.ts.map +1 -0
  291. package/dist/utils/Mp4ChapterGenerator.js +33 -0
  292. package/dist/utils/Mp4ChapterGenerator.js.map +1 -0
  293. package/dist/utils/OggEncoder.d.ts +20 -20
  294. package/dist/utils/OggEncoder.d.ts.map +1 -1
  295. package/dist/utils/OggEncoder.js +114 -50
  296. package/dist/utils/OggEncoder.js.map +1 -1
  297. package/dist/utils/TocGenerator.d.ts +17 -0
  298. package/dist/utils/TocGenerator.d.ts.map +1 -0
  299. package/dist/utils/TocGenerator.js +47 -0
  300. package/dist/utils/TocGenerator.js.map +1 -0
  301. package/package.json +7 -8
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Filename Template Parser
3
+ * Ardour reference: libs/ardour/export_filename.h
4
+ *
5
+ * Supported tokens:
6
+ * %s - Session name
7
+ * %n - Timespan name (range/region name)
8
+ * %d - Date (YYYY-MM-DD)
9
+ * %t - Time (HH-MM-SS)
10
+ * %f - Format (wav/mp3/ogg/flac)
11
+ * %r - Revision number (auto-increment)
12
+ * %b - Bit depth / bitrate
13
+ * %c - Channel config (stereo/mono)
14
+ * %T - Track name (for stem export)
15
+ */
16
+ /**
17
+ * Resolve a filename template string into an actual filename.
18
+ */
19
+ export function resolveFilenameTemplate(template, context) {
20
+ var _a;
21
+ const now = new Date();
22
+ const dateStr = [
23
+ now.getFullYear(),
24
+ String(now.getMonth() + 1).padStart(2, '0'),
25
+ String(now.getDate()).padStart(2, '0'),
26
+ ].join('-');
27
+ const timeStr = [
28
+ String(now.getHours()).padStart(2, '0'),
29
+ String(now.getMinutes()).padStart(2, '0'),
30
+ String(now.getSeconds()).padStart(2, '0'),
31
+ ].join('-');
32
+ let result = template;
33
+ result = result.replace(/%s/g, sanitizeFilename(context.sessionName || 'Untitled'));
34
+ result = result.replace(/%n/g, sanitizeFilename(context.timespanName || 'export'));
35
+ result = result.replace(/%d/g, dateStr);
36
+ result = result.replace(/%t/g, timeStr);
37
+ result = result.replace(/%f/g, context.format || 'wav');
38
+ result = result.replace(/%r/g, String((_a = context.revision) !== null && _a !== void 0 ? _a : 1).padStart(3, '0'));
39
+ result = result.replace(/%b/g, context.bitDepthOrRate || '');
40
+ result = result.replace(/%c/g, context.channelConfig || 'stereo');
41
+ result = result.replace(/%T/g, sanitizeFilename(context.trackName || ''));
42
+ // Remove double separators and trailing separators
43
+ result = result.replace(/_{2,}/g, '_');
44
+ result = result.replace(/-{2,}/g, '-');
45
+ result = result.replace(/[_-]$/, '');
46
+ return result || 'export';
47
+ }
48
+ /**
49
+ * Sanitize a string for use in filenames.
50
+ */
51
+ function sanitizeFilename(name) {
52
+ return name.replace(/[^a-zA-Z0-9가-힣ぁ-んァ-ヶー一-龥_\- ]/g, '_').trim();
53
+ }
54
+ /**
55
+ * Get a human-readable preview of what tokens will resolve to.
56
+ */
57
+ export function previewFilenameTemplate(template, context) {
58
+ const resolved = resolveFilenameTemplate(template, context);
59
+ const ext = context.format || 'wav';
60
+ return `${resolved}.${ext}`;
61
+ }
62
+ /**
63
+ * List all supported tokens with descriptions.
64
+ */
65
+ export function getTemplateTokens() {
66
+ return [
67
+ { token: '%s', description: 'Session name' },
68
+ { token: '%n', description: 'Timespan / range name' },
69
+ { token: '%d', description: 'Date (YYYY-MM-DD)' },
70
+ { token: '%t', description: 'Time (HH-MM-SS)' },
71
+ { token: '%f', description: 'Format (wav/mp3/ogg/flac)' },
72
+ { token: '%r', description: 'Revision number' },
73
+ { token: '%b', description: 'Bit depth or bitrate' },
74
+ { token: '%c', description: 'Channel config (stereo/mono)' },
75
+ { token: '%T', description: 'Track name (stem export)' },
76
+ ];
77
+ }
78
+ //# sourceMappingURL=FilenameTemplate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FilenameTemplate.js","sourceRoot":"","sources":["../../src/utils/FilenameTemplate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Lightweight logger with configurable log levels.
3
+ *
4
+ * Prevents verbose debug/info messages from reaching the console in
5
+ * production while still allowing warnings and errors through.
6
+ *
7
+ * Default level is WARN — set to DEBUG during development via
8
+ * `logger.setLevel(LogLevel.DEBUG)`.
9
+ */
10
+ export declare enum LogLevel {
11
+ DEBUG = 0,
12
+ INFO = 1,
13
+ WARN = 2,
14
+ ERROR = 3,
15
+ NONE = 4
16
+ }
17
+ declare class Logger {
18
+ private level;
19
+ setLevel(level: LogLevel): void;
20
+ getLevel(): LogLevel;
21
+ debug(tag: string, ...args: unknown[]): void;
22
+ info(tag: string, ...args: unknown[]): void;
23
+ warn(tag: string, ...args: unknown[]): void;
24
+ error(tag: string, ...args: unknown[]): void;
25
+ }
26
+ export declare const logger: Logger;
27
+ export {};
28
+ //# sourceMappingURL=Logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Logger.d.ts","sourceRoot":"","sources":["../../src/utils/Logger.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,oBAAY,QAAQ;IAChB,KAAK,IAAI;IACT,IAAI,IAAI;IACR,IAAI,IAAI;IACR,KAAK,IAAI;IACT,IAAI,IAAI;CACX;AAED,cAAM,MAAM;IACR,OAAO,CAAC,KAAK,CAA2B;IAExC,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IAI/B,QAAQ,IAAI,QAAQ;IAIpB,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAI5C,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAI3C,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAI3C,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;CAG/C;AAED,eAAO,MAAM,MAAM,QAAe,CAAC"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Lightweight logger with configurable log levels.
3
+ *
4
+ * Prevents verbose debug/info messages from reaching the console in
5
+ * production while still allowing warnings and errors through.
6
+ *
7
+ * Default level is WARN — set to DEBUG during development via
8
+ * `logger.setLevel(LogLevel.DEBUG)`.
9
+ */
10
+ export var LogLevel;
11
+ (function (LogLevel) {
12
+ LogLevel[LogLevel["DEBUG"] = 0] = "DEBUG";
13
+ LogLevel[LogLevel["INFO"] = 1] = "INFO";
14
+ LogLevel[LogLevel["WARN"] = 2] = "WARN";
15
+ LogLevel[LogLevel["ERROR"] = 3] = "ERROR";
16
+ LogLevel[LogLevel["NONE"] = 4] = "NONE";
17
+ })(LogLevel || (LogLevel = {}));
18
+ class Logger {
19
+ constructor() {
20
+ this.level = LogLevel.WARN;
21
+ }
22
+ setLevel(level) {
23
+ this.level = level;
24
+ }
25
+ getLevel() {
26
+ return this.level;
27
+ }
28
+ debug(tag, ...args) {
29
+ if (this.level <= LogLevel.DEBUG)
30
+ console.debug(`[${tag}]`, ...args);
31
+ }
32
+ info(tag, ...args) {
33
+ if (this.level <= LogLevel.INFO)
34
+ console.info(`[${tag}]`, ...args);
35
+ }
36
+ warn(tag, ...args) {
37
+ if (this.level <= LogLevel.WARN)
38
+ console.warn(`[${tag}]`, ...args);
39
+ }
40
+ error(tag, ...args) {
41
+ if (this.level <= LogLevel.ERROR)
42
+ console.error(`[${tag}]`, ...args);
43
+ }
44
+ }
45
+ export const logger = new Logger();
46
+ //# sourceMappingURL=Logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Logger.js","sourceRoot":"","sources":["../../src/utils/Logger.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,CAAN,IAAY,QAMX;AAND,WAAY,QAAQ;IAChB,yCAAS,CAAA;IACT,uCAAQ,CAAA;IACR,uCAAQ,CAAA;IACR,yCAAS,CAAA;IACT,uCAAQ,CAAA;AACZ,CAAC,EANW,QAAQ,KAAR,QAAQ,QAMnB;AAED,MAAM,MAAM;IAAZ;QACY,UAAK,GAAa,QAAQ,CAAC,IAAI,CAAC;IAyB5C,CAAC;IAvBG,QAAQ,CAAC,KAAe;QACpB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACvB,CAAC;IAED,QAAQ;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,GAAW,EAAE,GAAG,IAAe;QACjC,IAAI,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK;YAAE,OAAO,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IACzE,CAAC;IAED,IAAI,CAAC,GAAW,EAAE,GAAG,IAAe;QAChC,IAAI,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC,IAAI;YAAE,OAAO,CAAC,IAAI,CAAC,IAAI,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IACvE,CAAC;IAED,IAAI,CAAC,GAAW,EAAE,GAAG,IAAe;QAChC,IAAI,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC,IAAI;YAAE,OAAO,CAAC,IAAI,CAAC,IAAI,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IACvE,CAAC;IAED,KAAK,CAAC,GAAW,EAAE,GAAG,IAAe;QACjC,IAAI,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK;YAAE,OAAO,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IACzE,CAAC;CACJ;AAED,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * MP4 Chapter Generator
3
+ * Ardour reference: libs/ardour/export_handler.cc (MP4CH format)
4
+ *
5
+ * Generates Nero-style MP4 chapter metadata (used by ffmpeg -i chapters.txt).
6
+ * Format: CHAPTER01=HH:MM:SS.mmm / CHAPTER01NAME=Title
7
+ */
8
+ import { CDMarker } from '../domain/CDMarker';
9
+ /**
10
+ * Generate MP4 chapter markers in Nero chapter format.
11
+ *
12
+ * @param markers CD markers
13
+ * @param sampleRate Audio sample rate
14
+ * @returns Chapter metadata string
15
+ */
16
+ export declare function generateMp4Chapters(markers: CDMarker[], sampleRate: number): string;
17
+ //# sourceMappingURL=Mp4ChapterGenerator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Mp4ChapterGenerator.d.ts","sourceRoot":"","sources":["../../src/utils/Mp4ChapterGenerator.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAC/B,OAAO,EAAE,QAAQ,EAAE,EACnB,UAAU,EAAE,MAAM,GACnB,MAAM,CAsBR"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * MP4 Chapter Generator
3
+ * Ardour reference: libs/ardour/export_handler.cc (MP4CH format)
4
+ *
5
+ * Generates Nero-style MP4 chapter metadata (used by ffmpeg -i chapters.txt).
6
+ * Format: CHAPTER01=HH:MM:SS.mmm / CHAPTER01NAME=Title
7
+ */
8
+ /**
9
+ * Generate MP4 chapter markers in Nero chapter format.
10
+ *
11
+ * @param markers CD markers
12
+ * @param sampleRate Audio sample rate
13
+ * @returns Chapter metadata string
14
+ */
15
+ export function generateMp4Chapters(markers, sampleRate) {
16
+ const sorted = [...markers].sort((a, b) => a.index - b.index);
17
+ const lines = [];
18
+ for (let i = 0; i < sorted.length; i++) {
19
+ const marker = sorted[i];
20
+ const chNum = String(i + 1).padStart(2, '0');
21
+ // Convert position to HH:MM:SS.mmm
22
+ const totalSeconds = marker.position / sampleRate;
23
+ const hours = Math.floor(totalSeconds / 3600);
24
+ const minutes = Math.floor((totalSeconds % 3600) / 60);
25
+ const seconds = Math.floor(totalSeconds % 60);
26
+ const millis = Math.floor((totalSeconds % 1) * 1000);
27
+ const timeStr = `${String(hours).padStart(2, '0')}:${String(minutes).padStart(2, '0')}:${String(seconds).padStart(2, '0')}.${String(millis).padStart(3, '0')}`;
28
+ lines.push(`CHAPTER${chNum}=${timeStr}`);
29
+ lines.push(`CHAPTER${chNum}NAME=${marker.title || `Chapter ${i + 1}`}`);
30
+ }
31
+ return lines.join('\n');
32
+ }
33
+ //# sourceMappingURL=Mp4ChapterGenerator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Mp4ChapterGenerator.js","sourceRoot":"","sources":["../../src/utils/Mp4ChapterGenerator.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CAC/B,OAAmB,EACnB,UAAkB;IAElB,MAAM,MAAM,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IAC9D,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACzB,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAE7C,mCAAmC;QACnC,MAAM,YAAY,GAAG,MAAM,CAAC,QAAQ,GAAG,UAAU,CAAC;QAClD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;QAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QACvD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,EAAE,CAAC,CAAC;QAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QAErD,MAAM,OAAO,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;QAE/J,KAAK,CAAC,IAAI,CAAC,UAAU,KAAK,IAAI,OAAO,EAAE,CAAC,CAAC;QACzC,KAAK,CAAC,IAAI,CAAC,UAAU,KAAK,QAAQ,MAAM,CAAC,KAAK,IAAI,WAAW,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;IAC5E,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC"}
@@ -1,32 +1,32 @@
1
1
  /**
2
- * OGG PCM Encoder (Placeholder NOT true Vorbis/Opus)
3
- * Ardour 참조: libs/ardour/export_format_specification.cc (OGG format)
2
+ * OGG Encoder — Real OGG Opus encoding via MediaRecorder API,
3
+ * with PCM-in-OGG container fallback for environments without MediaRecorder.
4
4
  *
5
- * WARNING: This is a simplified placeholder encoder. It produces an OGG container
6
- * with raw PCM data inside Vorbis-style headers, but does NOT perform actual
7
- * Vorbis or Opus lossy compression. The output is NOT valid OGG Vorbis and most
8
- * players will fail to decode it.
5
+ * Ardour reference: libs/ardour/export_format_specification.cc (OGG format)
9
6
  *
10
- * TODO: Replace with a real encoder. Options include:
11
- * - Browser MediaRecorder API with 'audio/ogg; codecs=opus' (requires live encoding)
12
- * - WebAssembly-based libvorbis/libopus port (e.g., opus-media-recorder, ogg-vorbis-encoder-js)
13
- * - Server-side encoding via FFmpeg
14
- *
15
- * The quality parameter is accepted for API compatibility but has no effect on
16
- * compression since no lossy encoding is performed.
7
+ * The browser's MediaRecorder with 'audio/ogg; codecs=opus' produces
8
+ * valid OGG Opus files that can be played by all modern browsers and players.
9
+ * Quality parameter maps to Opus bitrate (64-320 kbps).
17
10
  */
18
11
  export declare class OggEncoder {
19
12
  /**
20
- * Encode AudioBuffer to an OGG-wrapped PCM Blob.
21
- *
22
- * NOTE: This does NOT produce valid OGG Vorbis. The MIME type is set to
23
- * 'application/octet-stream' to avoid misleading players/browsers into
24
- * attempting Vorbis decoding. See class-level comment for replacement plans.
13
+ * Encode AudioBuffer to OGG Blob.
14
+ * Uses MediaRecorder (OGG Opus) when available, falls back to PCM container.
25
15
  *
26
16
  * @param buffer Audio data to encode
27
- * @param quality Ignored accepted for API compatibility only
17
+ * @param quality Quality 0.0-1.0, maps to Opus bitrate
18
+ */
19
+ static encode(buffer: AudioBuffer, quality?: number): Promise<Blob>;
20
+ /**
21
+ * Encode using MediaRecorder API with OGG Opus codec.
22
+ * This produces real, valid OGG Opus files.
23
+ */
24
+ private static encodeWithMediaRecorder;
25
+ /**
26
+ * Fallback: PCM data in OGG container.
27
+ * This is NOT valid OGG Vorbis/Opus, but provides basic container structure.
28
28
  */
29
- static encode(buffer: AudioBuffer, quality?: number): Blob;
29
+ private static encodePcmFallback;
30
30
  private static interleave;
31
31
  private static float32ToInt16;
32
32
  private static buildOggPage;
@@ -1 +1 @@
1
- {"version":3,"file":"OggEncoder.d.ts","sourceRoot":"","sources":["../../src/utils/OggEncoder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,UAAU;IACnB;;;;;;;;;OASG;WACW,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,GAAE,MAAY,GAAG,IAAI;IA8CtE,OAAO,CAAC,MAAM,CAAC,UAAU;IAazB,OAAO,CAAC,MAAM,CAAC,cAAc;IAS7B,OAAO,CAAC,MAAM,CAAC,YAAY;IA+C3B,OAAO,CAAC,MAAM,CAAC,aAAa;IA2B5B,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAkBjC,OAAO,CAAC,MAAM,CAAC,aAAa;IAY5B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAA4B;IAEnD,OAAO,CAAC,MAAM,CAAC,WAAW;IAa1B,OAAO,CAAC,MAAM,CAAC,KAAK;CAQvB"}
1
+ {"version":3,"file":"OggEncoder.d.ts","sourceRoot":"","sources":["../../src/utils/OggEncoder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,qBAAa,UAAU;IACnB;;;;;;OAMG;WACiB,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,GAAE,MAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAcrF;;;OAGG;mBACkB,uBAAuB;IA4E5C;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAkChC,OAAO,CAAC,MAAM,CAAC,UAAU;IAazB,OAAO,CAAC,MAAM,CAAC,cAAc;IAS7B,OAAO,CAAC,MAAM,CAAC,YAAY;IAqC3B,OAAO,CAAC,MAAM,CAAC,aAAa;IAoB5B,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAejC,OAAO,CAAC,MAAM,CAAC,aAAa;IAQ5B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAA4B;IAEnD,OAAO,CAAC,MAAM,CAAC,WAAW;IAa1B,OAAO,CAAC,MAAM,CAAC,KAAK;CAQvB"}
@@ -1,46 +1,117 @@
1
1
  /**
2
- * OGG PCM Encoder (Placeholder NOT true Vorbis/Opus)
3
- * Ardour 참조: libs/ardour/export_format_specification.cc (OGG format)
2
+ * OGG Encoder — Real OGG Opus encoding via MediaRecorder API,
3
+ * with PCM-in-OGG container fallback for environments without MediaRecorder.
4
4
  *
5
- * WARNING: This is a simplified placeholder encoder. It produces an OGG container
6
- * with raw PCM data inside Vorbis-style headers, but does NOT perform actual
7
- * Vorbis or Opus lossy compression. The output is NOT valid OGG Vorbis and most
8
- * players will fail to decode it.
5
+ * Ardour reference: libs/ardour/export_format_specification.cc (OGG format)
9
6
  *
10
- * TODO: Replace with a real encoder. Options include:
11
- * - Browser MediaRecorder API with 'audio/ogg; codecs=opus' (requires live encoding)
12
- * - WebAssembly-based libvorbis/libopus port (e.g., opus-media-recorder, ogg-vorbis-encoder-js)
13
- * - Server-side encoding via FFmpeg
14
- *
15
- * The quality parameter is accepted for API compatibility but has no effect on
16
- * compression since no lossy encoding is performed.
7
+ * The browser's MediaRecorder with 'audio/ogg; codecs=opus' produces
8
+ * valid OGG Opus files that can be played by all modern browsers and players.
9
+ * Quality parameter maps to Opus bitrate (64-320 kbps).
17
10
  */
18
11
  export class OggEncoder {
19
12
  /**
20
- * Encode AudioBuffer to an OGG-wrapped PCM Blob.
21
- *
22
- * NOTE: This does NOT produce valid OGG Vorbis. The MIME type is set to
23
- * 'application/octet-stream' to avoid misleading players/browsers into
24
- * attempting Vorbis decoding. See class-level comment for replacement plans.
13
+ * Encode AudioBuffer to OGG Blob.
14
+ * Uses MediaRecorder (OGG Opus) when available, falls back to PCM container.
25
15
  *
26
16
  * @param buffer Audio data to encode
27
- * @param quality Ignored accepted for API compatibility only
17
+ * @param quality Quality 0.0-1.0, maps to Opus bitrate
18
+ */
19
+ static async encode(buffer, quality = 0.5) {
20
+ // Try real encoding first
21
+ if (typeof MediaRecorder !== 'undefined' && typeof OfflineAudioContext !== 'undefined') {
22
+ try {
23
+ return await this.encodeWithMediaRecorder(buffer, quality);
24
+ }
25
+ catch (e) {
26
+ console.warn('[OggEncoder] MediaRecorder encoding failed, falling back to PCM:', e);
27
+ }
28
+ }
29
+ // Fallback: PCM-in-OGG container
30
+ return this.encodePcmFallback(buffer, quality);
31
+ }
32
+ /**
33
+ * Encode using MediaRecorder API with OGG Opus codec.
34
+ * This produces real, valid OGG Opus files.
35
+ */
36
+ static async encodeWithMediaRecorder(buffer, quality) {
37
+ const sampleRate = buffer.sampleRate;
38
+ const numChannels = buffer.numberOfChannels;
39
+ // Map quality 0.0-1.0 to bitrate 64-320 kbps
40
+ const bitrate = Math.round(64000 + quality * (320000 - 64000));
41
+ // Create an OfflineAudioContext to render the buffer through a MediaStreamDestination
42
+ // We need a real-time context for MediaRecorder
43
+ const ctx = new AudioContext({ sampleRate });
44
+ try {
45
+ const destination = ctx.createMediaStreamDestination();
46
+ const source = ctx.createBufferSource();
47
+ source.buffer = buffer;
48
+ source.connect(destination);
49
+ // Check if OGG Opus is supported
50
+ const mimeType = MediaRecorder.isTypeSupported('audio/ogg; codecs=opus')
51
+ ? 'audio/ogg; codecs=opus'
52
+ : MediaRecorder.isTypeSupported('audio/ogg')
53
+ ? 'audio/ogg'
54
+ : null;
55
+ if (!mimeType) {
56
+ throw new Error('OGG encoding not supported by MediaRecorder');
57
+ }
58
+ const recorder = new MediaRecorder(destination.stream, {
59
+ mimeType,
60
+ audioBitsPerSecond: bitrate,
61
+ });
62
+ const chunks = [];
63
+ return new Promise((resolve, reject) => {
64
+ recorder.ondataavailable = (e) => {
65
+ if (e.data.size > 0) {
66
+ chunks.push(e.data);
67
+ }
68
+ };
69
+ recorder.onstop = () => {
70
+ ctx.close();
71
+ const blob = new Blob(chunks, { type: 'audio/ogg' });
72
+ resolve(blob);
73
+ };
74
+ recorder.onerror = (e) => {
75
+ ctx.close();
76
+ reject(e);
77
+ };
78
+ recorder.start();
79
+ source.start(0);
80
+ // Stop after buffer duration + small padding
81
+ const durationMs = (buffer.length / sampleRate) * 1000;
82
+ setTimeout(() => {
83
+ try {
84
+ if (recorder.state === 'recording') {
85
+ recorder.stop();
86
+ }
87
+ // Stop all tracks on the stream
88
+ destination.stream.getTracks().forEach(t => t.stop());
89
+ }
90
+ catch (_a) {
91
+ // ignore
92
+ }
93
+ }, durationMs + 100);
94
+ });
95
+ }
96
+ catch (e) {
97
+ ctx.close();
98
+ throw e;
99
+ }
100
+ }
101
+ /**
102
+ * Fallback: PCM data in OGG container.
103
+ * This is NOT valid OGG Vorbis/Opus, but provides basic container structure.
28
104
  */
29
- static encode(buffer, quality = 0.5) {
105
+ static encodePcmFallback(buffer, quality) {
30
106
  const numChannels = buffer.numberOfChannels;
31
107
  const sampleRate = buffer.sampleRate;
32
108
  const interleaved = this.interleave(buffer);
33
- // Convert to Int16 for OGG (standard for Vorbis-like encoding)
34
109
  const int16Data = this.float32ToInt16(interleaved);
35
- // Build OGG pages
36
110
  const pages = [];
37
111
  const serialNumber = Math.floor(Math.random() * 0xFFFFFFFF);
38
- // Page 1: ID header
39
112
  pages.push(this.buildIdHeader(numChannels, sampleRate, quality, serialNumber));
40
- // Page 2: Comment header
41
113
  pages.push(this.buildCommentHeader(serialNumber));
42
- // Page 3+: Audio data pages
43
- const pageSize = 4096; // samples per page
114
+ const pageSize = 4096;
44
115
  const bytesPerSample = 2 * numChannels;
45
116
  let granulePosition = 0;
46
117
  let pageSequence = 2;
@@ -53,8 +124,7 @@ export class OggEncoder {
53
124
  const isLastPage = offset + chunkSize >= int16Data.byteLength;
54
125
  pages.push(this.buildDataPage(chunk, serialNumber, pageSequence++, granulePosition, isLastPage));
55
126
  }
56
- // NOTE: MIME type is 'application/octet-stream' because this is NOT valid OGG Vorbis.
57
- // Using 'audio/ogg' would cause browsers/players to attempt Vorbis decoding and fail.
127
+ // Use application/octet-stream since PCM fallback isn't valid OGG Vorbis
58
128
  return new Blob(pages, { type: 'application/octet-stream' });
59
129
  }
60
130
  static interleave(buffer) {
@@ -78,7 +148,6 @@ export class OggEncoder {
78
148
  return result.buffer;
79
149
  }
80
150
  static buildOggPage(headerType, granulePosition, serialNumber, pageSequence, data) {
81
- // Segment table
82
151
  const segments = [];
83
152
  let remaining = data.length;
84
153
  while (remaining >= 255) {
@@ -89,71 +158,67 @@ export class OggEncoder {
89
158
  const headerSize = 27 + segments.length;
90
159
  const page = new Uint8Array(headerSize + data.length);
91
160
  const view = new DataView(page.buffer);
92
- // Capture pattern
93
161
  page[0] = 0x4F;
94
162
  page[1] = 0x67;
95
163
  page[2] = 0x67;
96
164
  page[3] = 0x53; // "OggS"
97
- page[4] = 0; // version
165
+ page[4] = 0;
98
166
  page[5] = headerType;
99
- // Granule position (64-bit)
100
167
  view.setUint32(6, granulePosition & 0xFFFFFFFF, true);
101
168
  view.setUint32(10, Math.floor(granulePosition / 0x100000000) & 0xFFFFFFFF, true);
102
169
  view.setUint32(14, serialNumber, true);
103
170
  view.setUint32(18, pageSequence, true);
104
- view.setUint32(22, 0, true); // checksum (simplified)
171
+ view.setUint32(22, 0, true);
105
172
  page[26] = segments.length;
106
173
  for (let i = 0; i < segments.length; i++) {
107
174
  page[27 + i] = segments[i];
108
175
  }
109
176
  page.set(data, headerSize);
110
- // Calculate CRC32 and set it
111
177
  const crc = this.crc32(page);
112
178
  view.setUint32(22, crc, true);
113
179
  return page;
114
180
  }
115
181
  static buildIdHeader(channels, sampleRate, quality, serialNumber) {
116
- // Vorbis ID header
117
182
  const data = new Uint8Array(30);
118
183
  const view = new DataView(data.buffer);
119
- data[0] = 0x01; // packet type: ID
184
+ data[0] = 0x01;
120
185
  data[1] = 0x76;
121
186
  data[2] = 0x6F;
122
187
  data[3] = 0x72;
123
188
  data[4] = 0x62;
124
189
  data[5] = 0x69;
125
- data[6] = 0x73; // "vorbis"
126
- view.setUint32(7, 0, true); // version
190
+ data[6] = 0x73;
191
+ view.setUint32(7, 0, true);
127
192
  data[11] = channels;
128
193
  view.setUint32(12, sampleRate, true);
129
194
  const nominalBitrate = Math.floor(64000 + quality * (320000 - 64000));
130
- view.setInt32(16, nominalBitrate, true); // max bitrate
131
- view.setInt32(20, nominalBitrate, true); // nominal bitrate
132
- view.setInt32(24, nominalBitrate, true); // min bitrate
133
- data[28] = 0x08; // blocksize (256/2048)
134
- data[29] = 0x01; // framing
135
- return this.buildOggPage(0x02, 0, serialNumber, 0, data); // BOS flag
195
+ view.setInt32(16, nominalBitrate, true);
196
+ view.setInt32(20, nominalBitrate, true);
197
+ view.setInt32(24, nominalBitrate, true);
198
+ data[28] = 0x08;
199
+ data[29] = 0x01;
200
+ return this.buildOggPage(0x02, 0, serialNumber, 0, data);
136
201
  }
137
202
  static buildCommentHeader(serialNumber) {
138
203
  const vendor = 'drop.ai Web DAW';
139
204
  const vendorBytes = new TextEncoder().encode(vendor);
140
205
  const data = new Uint8Array(7 + 4 + vendorBytes.length + 4 + 1);
141
206
  const view = new DataView(data.buffer);
142
- data[0] = 0x03; // packet type: comment
207
+ data[0] = 0x03;
143
208
  data[1] = 0x76;
144
209
  data[2] = 0x6F;
145
210
  data[3] = 0x72;
146
211
  data[4] = 0x62;
147
212
  data[5] = 0x69;
148
- data[6] = 0x73; // "vorbis"
213
+ data[6] = 0x73;
149
214
  view.setUint32(7, vendorBytes.length, true);
150
215
  data.set(vendorBytes, 11);
151
- view.setUint32(11 + vendorBytes.length, 0, true); // no user comments
152
- data[11 + vendorBytes.length + 4] = 0x01; // framing
216
+ view.setUint32(11 + vendorBytes.length, 0, true);
217
+ data[11 + vendorBytes.length + 4] = 0x01;
153
218
  return this.buildOggPage(0x00, 0, serialNumber, 1, data);
154
219
  }
155
220
  static buildDataPage(audioData, serialNumber, pageSequence, granulePosition, isLast) {
156
- const headerType = isLast ? 0x04 : 0x00; // EOS flag if last
221
+ const headerType = isLast ? 0x04 : 0x00;
157
222
  return this.buildOggPage(headerType, granulePosition, serialNumber, pageSequence, audioData);
158
223
  }
159
224
  static getCrcTable() {
@@ -178,6 +243,5 @@ export class OggEncoder {
178
243
  return crc;
179
244
  }
180
245
  }
181
- // OGG CRC32 lookup table (polynomial 0x04C11DB7)
182
246
  OggEncoder.crcTable = null;
183
247
  //# sourceMappingURL=OggEncoder.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"OggEncoder.js","sourceRoot":"","sources":["../../src/utils/OggEncoder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"OggEncoder.js","sourceRoot":"","sources":["../../src/utils/OggEncoder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * TOC (Table of Contents) Generator for CD burning
3
+ * Ardour reference: libs/ardour/export_handler.cc (TOC format output)
4
+ *
5
+ * Generates cdrdao-compatible TOC files from CD markers.
6
+ */
7
+ import { CDMarker } from '../domain/CDMarker';
8
+ /**
9
+ * Generate a cdrdao-compatible TOC file from CD markers.
10
+ *
11
+ * @param markers Sorted CD markers
12
+ * @param sampleRate Audio sample rate
13
+ * @param filename Audio filename
14
+ * @returns TOC file content string
15
+ */
16
+ export declare function generateTocSheet(markers: CDMarker[], sampleRate: number, filename?: string): string;
17
+ //# sourceMappingURL=TocGenerator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TocGenerator.d.ts","sourceRoot":"","sources":["../../src/utils/TocGenerator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC5B,OAAO,EAAE,QAAQ,EAAE,EACnB,UAAU,EAAE,MAAM,EAClB,QAAQ,GAAE,MAAoB,GAC/B,MAAM,CAuCR"}