@hed-hog/lms 0.0.366 → 0.0.370
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/dist/certificate/certificate.controller.d.ts +1 -1
- package/dist/certificate/certificate.controller.d.ts.map +1 -1
- package/dist/certificate/certificate.controller.js +4 -2
- package/dist/certificate/certificate.controller.js.map +1 -1
- package/dist/certificate/certificate.service.d.ts +50 -0
- package/dist/certificate/certificate.service.d.ts.map +1 -1
- package/dist/certificate/certificate.service.js +73 -0
- package/dist/certificate/certificate.service.js.map +1 -1
- package/dist/course/course-ai-usage.service.d.ts +58 -0
- package/dist/course/course-ai-usage.service.d.ts.map +1 -0
- package/dist/course/course-ai-usage.service.js +176 -0
- package/dist/course/course-ai-usage.service.js.map +1 -0
- package/dist/course/course-audio-transcription.service.d.ts +65 -1
- package/dist/course/course-audio-transcription.service.d.ts.map +1 -1
- package/dist/course/course-audio-transcription.service.js +381 -29
- package/dist/course/course-audio-transcription.service.js.map +1 -1
- package/dist/course/course-export-scorm12.service.d.ts +3 -0
- package/dist/course/course-export-scorm12.service.d.ts.map +1 -1
- package/dist/course/course-export-scorm12.service.js +141 -6
- package/dist/course/course-export-scorm12.service.js.map +1 -1
- package/dist/course/course-export.service.d.ts.map +1 -1
- package/dist/course/course-export.service.js +2 -1
- package/dist/course/course-export.service.js.map +1 -1
- package/dist/course/course-lesson.controller.d.ts +25 -3
- package/dist/course/course-lesson.controller.d.ts.map +1 -1
- package/dist/course/course-lesson.controller.js +71 -8
- package/dist/course/course-lesson.controller.js.map +1 -1
- package/dist/course/course-structure.controller.d.ts +26 -5
- package/dist/course/course-structure.controller.d.ts.map +1 -1
- package/dist/course/course-structure.controller.js +31 -1
- package/dist/course/course-structure.controller.js.map +1 -1
- package/dist/course/course-structure.service.d.ts +37 -5
- package/dist/course/course-structure.service.d.ts.map +1 -1
- package/dist/course/course-structure.service.js +165 -20
- package/dist/course/course-structure.service.js.map +1 -1
- package/dist/course/course-transcription-translation.service.d.ts +31 -0
- package/dist/course/course-transcription-translation.service.d.ts.map +1 -0
- package/dist/course/course-transcription-translation.service.js +227 -0
- package/dist/course/course-transcription-translation.service.js.map +1 -0
- package/dist/course/course-video-agent-pipeline.service.js +7 -7
- package/dist/course/course-video-agent-pipeline.service.js.map +1 -1
- package/dist/course/course.module.d.ts.map +1 -1
- package/dist/course/course.module.js +4 -0
- package/dist/course/course.module.js.map +1 -1
- package/dist/course/dto/create-course-bulk-job.dto.d.ts +2 -1
- package/dist/course/dto/create-course-bulk-job.dto.d.ts.map +1 -1
- package/dist/course/dto/create-course-bulk-job.dto.js +6 -1
- package/dist/course/dto/create-course-bulk-job.dto.js.map +1 -1
- package/dist/course/dto/create-course-export.dto.d.ts +1 -0
- package/dist/course/dto/create-course-export.dto.d.ts.map +1 -1
- package/dist/course/dto/create-course-export.dto.js +6 -0
- package/dist/course/dto/create-course-export.dto.js.map +1 -1
- package/dist/course/lms-bulk-upload-automation.service.d.ts.map +1 -1
- package/dist/course/lms-bulk-upload-automation.service.js +26 -13
- package/dist/course/lms-bulk-upload-automation.service.js.map +1 -1
- package/dist/course/lms-bulk-upload.controller.d.ts +3 -0
- package/dist/course/lms-bulk-upload.controller.d.ts.map +1 -1
- package/dist/course/lms-bulk-upload.service.d.ts +3 -0
- package/dist/course/lms-bulk-upload.service.d.ts.map +1 -1
- package/dist/course/lms-bulk-upload.service.js +48 -29
- package/dist/course/lms-bulk-upload.service.js.map +1 -1
- package/dist/course/subtitle.util.d.ts +46 -0
- package/dist/course/subtitle.util.d.ts.map +1 -0
- package/dist/course/subtitle.util.js +206 -0
- package/dist/course/subtitle.util.js.map +1 -0
- package/dist/enterprise/training/training-student.service.d.ts +27 -0
- package/dist/enterprise/training/training-student.service.d.ts.map +1 -1
- package/dist/enterprise/training/training-student.service.js +197 -10
- package/dist/enterprise/training/training-student.service.js.map +1 -1
- package/dist/lesson-xp-map/lesson-xp-ai-calculation.service.d.ts +3 -1
- package/dist/lesson-xp-map/lesson-xp-ai-calculation.service.d.ts.map +1 -1
- package/dist/lesson-xp-map/lesson-xp-ai-calculation.service.js +19 -5
- package/dist/lesson-xp-map/lesson-xp-ai-calculation.service.js.map +1 -1
- package/dist/lesson-xp-map/lesson-xp-map.module.d.ts.map +1 -1
- package/dist/lesson-xp-map/lesson-xp-map.module.js +2 -1
- package/dist/lesson-xp-map/lesson-xp-map.module.js.map +1 -1
- package/dist/libraries/lms/tsconfig.tsbuildinfo +1 -1
- package/dist/lms.module.d.ts.map +1 -1
- package/dist/lms.module.js +4 -0
- package/dist/lms.module.js.map +1 -1
- package/dist/platforma/platforma-performance.service.js +121 -121
- package/dist/platforma/platforma-video.service.d.ts +8 -0
- package/dist/platforma/platforma-video.service.d.ts.map +1 -1
- package/dist/platforma/platforma-video.service.js +45 -2
- package/dist/platforma/platforma-video.service.js.map +1 -1
- package/dist/platforma/platforma.controller.d.ts +99 -1
- package/dist/platforma/platforma.controller.d.ts.map +1 -1
- package/dist/platforma/platforma.controller.js +111 -2
- package/dist/platforma/platforma.controller.js.map +1 -1
- package/dist/training/dto/create-training.dto.d.ts +9 -0
- package/dist/training/dto/create-training.dto.d.ts.map +1 -1
- package/dist/training/dto/create-training.dto.js +45 -1
- package/dist/training/dto/create-training.dto.js.map +1 -1
- package/dist/training/training.controller.d.ts +144 -0
- package/dist/training/training.controller.d.ts.map +1 -1
- package/dist/training/training.service.d.ts +149 -0
- package/dist/training/training.service.d.ts.map +1 -1
- package/dist/training/training.service.js +332 -167
- package/dist/training/training.service.js.map +1 -1
- package/hedhog/data/image_type.yaml +10 -0
- package/hedhog/data/route.yaml +251 -0
- package/hedhog/data/setting_group.yaml +97 -0
- package/hedhog/frontend/app/bulk-upload-sessions/page.tsx.ejs +139 -27
- package/hedhog/frontend/app/courses/[id]/_components/CourseFlagsCard.tsx.ejs +69 -57
- package/hedhog/frontend/app/courses/[id]/_components/CourseIssuedCertificatesCard.tsx.ejs +168 -0
- package/hedhog/frontend/app/courses/[id]/structure/_components/course-ai-costs-tab.tsx.ejs +191 -0
- package/hedhog/frontend/app/courses/[id]/structure/_components/course-export-sheet.tsx.ejs +81 -1
- package/hedhog/frontend/app/courses/[id]/structure/_components/course-exports-tab.tsx.ejs +12 -0
- package/hedhog/frontend/app/courses/[id]/structure/_components/detail-course.tsx.ejs +69 -1
- package/hedhog/frontend/app/courses/[id]/structure/_components/detail-lesson.tsx.ejs +267 -19
- package/hedhog/frontend/app/courses/[id]/structure/_components/editor-bulk.tsx.ejs +114 -86
- package/hedhog/frontend/app/courses/[id]/structure/_components/editor-course.tsx.ejs +239 -31
- package/hedhog/frontend/app/courses/[id]/structure/_components/editor-lesson.tsx.ejs +344 -59
- package/hedhog/frontend/app/courses/[id]/structure/_components/lesson-video-preview.tsx.ejs +200 -0
- package/hedhog/frontend/app/courses/[id]/structure/_components/tree-row-lesson.tsx.ejs +1 -0
- package/hedhog/frontend/app/courses/[id]/structure/_components/types.ts.ejs +3 -0
- package/hedhog/frontend/app/courses/[id]/structure/_data/adapters/course-structure.adapter.ts.ejs +19 -7
- package/hedhog/frontend/app/courses/[id]/structure/_data/types/api-course.types.ts.ejs +4 -0
- package/hedhog/frontend/app/courses/[id]/structure/_data/use-course-ai-costs.ts.ejs +40 -0
- package/hedhog/frontend/app/courses/[id]/structure/_data/use-course-exports.ts.ejs +25 -0
- package/hedhog/frontend/app/courses/[id]/structure/_data/use-course-structure-mutations.ts.ejs +148 -0
- package/hedhog/frontend/app/courses/[id]/structure/_data/use-transcription-segments.ts.ejs +157 -8
- package/hedhog/frontend/app/courses/_components/CourseRowActions.tsx.ejs +1 -22
- package/hedhog/frontend/app/courses/page.tsx.ejs +26 -4
- package/hedhog/frontend/app/paths/page.tsx.ejs +612 -164
- package/hedhog/frontend/messages/en.json +23 -12
- package/hedhog/frontend/messages/pt.json +23 -12
- package/hedhog/query/triggers.sql +33 -0
- package/hedhog/table/course_ai_usage.yaml +46 -0
- package/hedhog/table/course_lesson.yaml +3 -0
- package/hedhog/table/course_lesson_answer.yaml +37 -0
- package/hedhog/table/course_lesson_transcription_segment.yaml +8 -0
- package/hedhog/table/learning_path.yaml +6 -0
- package/hedhog/table/learning_path_module.yaml +22 -0
- package/hedhog/table/learning_path_step.yaml +9 -6
- package/hedhog/table/lesson_view_event.yaml +66 -66
- package/package.json +9 -9
- package/src/certificate/certificate.controller.ts +2 -0
- package/src/certificate/certificate.service.ts +99 -0
- package/src/course/course-ai-usage.service.ts +221 -0
- package/src/course/course-audio-transcription.service.ts +471 -43
- package/src/course/course-export-scorm12.service.ts +149 -5
- package/src/course/course-export.service.ts +1 -0
- package/src/course/course-lesson.controller.ts +59 -6
- package/src/course/course-structure.controller.ts +16 -0
- package/src/course/course-structure.service.ts +184 -10
- package/src/course/course-transcription-translation.service.ts +293 -0
- package/src/course/course-video-agent-pipeline.service.ts +471 -471
- package/src/course/course.module.ts +4 -0
- package/src/course/dto/create-course-bulk-job.dto.ts +7 -3
- package/src/course/dto/create-course-export.dto.ts +6 -0
- package/src/course/ffmpeg.util.ts +65 -65
- package/src/course/lms-bulk-upload-automation.service.ts +29 -7
- package/src/course/lms-bulk-upload.service.ts +20 -1
- package/src/course/subtitle.util.ts +220 -0
- package/src/enterprise/training/training-student.service.ts +224 -4
- package/src/lesson-xp-map/lesson-xp-ai-calculation.service.ts +14 -0
- package/src/lesson-xp-map/lesson-xp-map.module.ts +2 -1
- package/src/lms.module.ts +4 -0
- package/src/platforma/dto/heartbeat.dto.ts +30 -30
- package/src/platforma/handlers/emit-certificate.handler.ts +117 -117
- package/src/platforma/handlers/lesson-heartbeat.handler.ts +343 -343
- package/src/platforma/platforma-heartbeat.service.ts +33 -33
- package/src/platforma/platforma-performance.service.ts +606 -606
- package/src/platforma/platforma-search.service.ts +48 -48
- package/src/platforma/platforma-video.service.ts +59 -3
- package/src/platforma/platforma.controller.ts +88 -0
- package/src/training/dto/create-training.dto.ts +36 -0
- package/src/training/training.service.ts +360 -163
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"course-audio-transcription.service.d.ts","sourceRoot":"","sources":["../../src/course/course-audio-transcription.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAgC,WAAW,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/G,OAAO,EAAE,qBAAqB,EAAE,WAAW,EAAqB,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAC7G,OAAO,EAIH,YAAY,EAEf,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"course-audio-transcription.service.d.ts","sourceRoot":"","sources":["../../src/course/course-audio-transcription.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAgC,WAAW,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/G,OAAO,EAAE,qBAAqB,EAAE,WAAW,EAAqB,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAC7G,OAAO,EAIH,YAAY,EAEf,MAAM,gBAAgB,CAAC;AAOxB,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAUjE,qBACa,+BAAgC,YAAW,YAAY,EAAE,WAAW;IAsE7E,OAAO,CAAC,QAAQ,CAAC,aAAa;IAE9B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAE/B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAE5B,OAAO,CAAC,QAAQ,CAAC,mBAAmB;IAEpC,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAEzB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAExB,OAAO,CAAC,QAAQ,CAAC,cAAc;IAjFjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoD;YAE7D,mBAAmB;IAqBjC,OAAO,CAAC,2BAA2B;YAqBrB,uBAAuB;gBAyBlB,aAAa,EAAE,aAAa,EAE5B,cAAc,EAAE,cAAc,EAE9B,WAAW,EAAE,WAAW,EAExB,mBAAmB,EAAE,mBAAmB,EAExC,QAAQ,EAAE,oBAAoB,EAE9B,OAAO,EAAE,qBAAqB,EAE9B,cAAc,EAAE,oBAAoB;IAGvD,YAAY;IAMZ,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,sBAAsB,CAAM;IACpD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAK;IAC1C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAM;IACzC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAK;IAC7C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IACjD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAS;IAC5C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAO;IAI9C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,wBAAwB,CAAM;IAGtD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAAO;IACnD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,wBAAwB,CAAO;IAEvD;;;;OAIG;IACH,OAAO,CAAC,sBAAsB;IAS9B;;;;OAIG;IACH,OAAO,CAAC,oBAAoB;IAiB5B;;;;;OAKG;YACW,cAAc;IA8C5B;;;;;;;OAOG;IACH,OAAO,CAAC,qBAAqB;IAkH7B;;;;;;OAMG;IACH,OAAO,CAAC,iBAAiB;IA6BzB;;;;OAIG;YACW,eAAe;IAiD7B;;;;;;;;OAQG;IACH,OAAO,CAAC,oBAAoB;IAqEtB,MAAM,CAAC,GAAG,EAAE;QAChB,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,UAAU,EAAE,MAAM,CAAC;QACnB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC7B,QAAQ,EAAE,MAAM,CAAC;QACjB,YAAY,EAAE,MAAM,CAAC;QACrB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC9B,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC9B,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KAClC,GAAG,OAAO,CAAC,IAAI,CAAC;CA4VlB"}
|
|
@@ -27,6 +27,8 @@ const fs_1 = require("fs");
|
|
|
27
27
|
const os_1 = require("os");
|
|
28
28
|
const path_1 = require("path");
|
|
29
29
|
const util_1 = require("util");
|
|
30
|
+
const course_ai_usage_service_1 = require("./course-ai-usage.service");
|
|
31
|
+
const subtitle_util_1 = require("./subtitle.util");
|
|
30
32
|
const execFileAsync = (0, util_1.promisify)(child_process_1.execFile);
|
|
31
33
|
let CourseAudioTranscriptionService = CourseAudioTranscriptionService_1 = class CourseAudioTranscriptionService {
|
|
32
34
|
async createProgressEvent(queueJobId, message, metadata) {
|
|
@@ -72,21 +74,323 @@ let CourseAudioTranscriptionService = CourseAudioTranscriptionService_1 = class
|
|
|
72
74
|
this.logger.warn(`Failed to update async notification ${context.notificationId} for user ${context.userId}: ${error instanceof Error ? error.message : 'unknown error'}`);
|
|
73
75
|
}
|
|
74
76
|
}
|
|
75
|
-
constructor(prismaService, settingService, fileService, notificationService, registry, dbQueue) {
|
|
77
|
+
constructor(prismaService, settingService, fileService, notificationService, registry, dbQueue, aiUsageService) {
|
|
76
78
|
this.prismaService = prismaService;
|
|
77
79
|
this.settingService = settingService;
|
|
78
80
|
this.fileService = fileService;
|
|
79
81
|
this.notificationService = notificationService;
|
|
80
82
|
this.registry = registry;
|
|
81
83
|
this.dbQueue = dbQueue;
|
|
84
|
+
this.aiUsageService = aiUsageService;
|
|
82
85
|
this.logger = new common_1.Logger(CourseAudioTranscriptionService_1.name);
|
|
83
86
|
}
|
|
84
87
|
onModuleInit() {
|
|
85
88
|
this.registry.register('lms.audio.transcribe', this);
|
|
86
89
|
this.logger.log('Registered handler for "lms.audio.transcribe"');
|
|
87
90
|
}
|
|
88
|
-
|
|
91
|
+
/**
|
|
92
|
+
* Parses the configured reading speed (characters per second) from the
|
|
93
|
+
* `lms-subtitle-reading-speed` setting value, e.g. "...(15 cps)". Falls back
|
|
94
|
+
* to the Netflix adult default and clamps to a sane range.
|
|
95
|
+
*/
|
|
96
|
+
resolveReadingSpeedCps(rawValue) {
|
|
97
|
+
const match = String(rawValue !== null && rawValue !== void 0 ? rawValue : '').match(/(\d+)\s*cps/i);
|
|
98
|
+
const cps = match ? Number(match[1]) : NaN;
|
|
99
|
+
if (!Number.isFinite(cps) || cps < 6 || cps > 25) {
|
|
100
|
+
return CourseAudioTranscriptionService_1.SUB_MAX_CPS;
|
|
101
|
+
}
|
|
102
|
+
return cps;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Resolves the silencedetect parameters from settings, falling back to the
|
|
106
|
+
* defaults and clamping to sane ranges (noise must be negative dB; duration a
|
|
107
|
+
* small positive number of seconds).
|
|
108
|
+
*/
|
|
109
|
+
resolveSilenceParams(noiseRaw, durationRaw) {
|
|
110
|
+
const Svc = CourseAudioTranscriptionService_1;
|
|
111
|
+
let noiseDb = Number(noiseRaw);
|
|
112
|
+
// Noise must be a strictly negative dB value (0/empty/positive are invalid).
|
|
113
|
+
if (!noiseRaw || !Number.isFinite(noiseDb) || noiseDb >= 0 || noiseDb < -90) {
|
|
114
|
+
noiseDb = Svc.SUB_SILENCE_NOISE_DB;
|
|
115
|
+
}
|
|
116
|
+
let minDuration = Number(durationRaw);
|
|
117
|
+
if (!Number.isFinite(minDuration) || minDuration <= 0 || minDuration > 10) {
|
|
118
|
+
minDuration = Svc.SUB_SILENCE_MIN_DURATION;
|
|
119
|
+
}
|
|
120
|
+
return { noiseDb, minDuration };
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Detects silence intervals in the audio using FFmpeg's silencedetect filter.
|
|
124
|
+
* Subtitle starts are later snapped to the end of any silence they fall into,
|
|
125
|
+
* so captions appear when speech begins (not during intros/music or pauses).
|
|
126
|
+
* Returns an empty list on failure — silence alignment is best-effort.
|
|
127
|
+
*/
|
|
128
|
+
async detectSilences(audioPath, noiseDb = CourseAudioTranscriptionService_1.SUB_SILENCE_NOISE_DB, minDuration = CourseAudioTranscriptionService_1.SUB_SILENCE_MIN_DURATION) {
|
|
129
|
+
try {
|
|
130
|
+
const { stderr } = await execFileAsync('ffmpeg', [
|
|
131
|
+
'-i',
|
|
132
|
+
audioPath,
|
|
133
|
+
'-af',
|
|
134
|
+
`silencedetect=noise=${noiseDb}dB:d=${minDuration}`,
|
|
135
|
+
'-f',
|
|
136
|
+
'null',
|
|
137
|
+
'-',
|
|
138
|
+
], { maxBuffer: 1024 * 1024 * 20, windowsHide: true });
|
|
139
|
+
const silences = [];
|
|
140
|
+
let curStart = null;
|
|
141
|
+
for (const line of String(stderr !== null && stderr !== void 0 ? stderr : '').split('\n')) {
|
|
142
|
+
const startMatch = line.match(/silence_start:\s*(-?[0-9.]+)/);
|
|
143
|
+
if (startMatch) {
|
|
144
|
+
curStart = Math.max(0, parseFloat(startMatch[1]));
|
|
145
|
+
continue;
|
|
146
|
+
}
|
|
147
|
+
const endMatch = line.match(/silence_end:\s*(-?[0-9.]+)/);
|
|
148
|
+
if (endMatch && curStart !== null) {
|
|
149
|
+
const end = parseFloat(endMatch[1]);
|
|
150
|
+
if (Number.isFinite(end) && end > curStart) {
|
|
151
|
+
silences.push({ start: curStart, end });
|
|
152
|
+
}
|
|
153
|
+
curStart = null;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
return silences;
|
|
157
|
+
}
|
|
158
|
+
catch (error) {
|
|
159
|
+
this.logger.warn(`silencedetect failed, skipping start alignment: ${error instanceof Error ? error.message : String(error)}`);
|
|
160
|
+
return [];
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Groups word-level timestamps into subtitle cues and adjusts their timing to
|
|
165
|
+
* the Netflix style guide. Text is stored on a single line; line breaking is a
|
|
166
|
+
* presentation concern handled at VTT generation (see subtitle.util.ts).
|
|
167
|
+
*
|
|
168
|
+
* `silences` (from detectSilences) is used to snap each cue's start to where
|
|
169
|
+
* speech actually begins, correcting Whisper's drift over intros/pauses.
|
|
170
|
+
*/
|
|
171
|
+
buildSubtitleSegments(allWords, maxCps = CourseAudioTranscriptionService_1.SUB_MAX_CPS, silences = []) {
|
|
172
|
+
const Svc = CourseAudioTranscriptionService_1;
|
|
173
|
+
// Phase 1 — group words into cues respecting char count, duration and pauses.
|
|
174
|
+
const cues = [];
|
|
175
|
+
let buffer = [];
|
|
176
|
+
let bufferText = '';
|
|
177
|
+
const flush = () => {
|
|
178
|
+
if (buffer.length === 0)
|
|
179
|
+
return;
|
|
180
|
+
cues.push(buffer);
|
|
181
|
+
buffer = [];
|
|
182
|
+
bufferText = '';
|
|
183
|
+
};
|
|
184
|
+
for (const entry of allWords) {
|
|
185
|
+
const word = entry.word.trim();
|
|
186
|
+
if (!word)
|
|
187
|
+
continue;
|
|
188
|
+
const prev = buffer[buffer.length - 1];
|
|
189
|
+
const gapFromPrev = prev ? entry.start - prev.end : 0;
|
|
190
|
+
const tentativeText = bufferText ? `${bufferText} ${word}` : word;
|
|
191
|
+
const tentativeDuration = buffer.length > 0 ? entry.end - buffer[0].start : entry.end - entry.start;
|
|
192
|
+
if (buffer.length > 0 &&
|
|
193
|
+
(!(0, subtitle_util_1.fitsInTwoLines)(tentativeText, Svc.SUB_MAX_CHARS_PER_LINE) ||
|
|
194
|
+
tentativeDuration > Svc.SUB_MAX_DURATION ||
|
|
195
|
+
gapFromPrev >= Svc.SUB_PAUSE_SPLIT)) {
|
|
196
|
+
flush();
|
|
197
|
+
}
|
|
198
|
+
buffer.push(entry);
|
|
199
|
+
bufferText = bufferText ? `${bufferText} ${word}` : word;
|
|
200
|
+
// Break naturally at sentence-ending punctuation.
|
|
201
|
+
if (/[.!?…]$/.test(word)) {
|
|
202
|
+
flush();
|
|
203
|
+
continue;
|
|
204
|
+
}
|
|
205
|
+
// Soft break at clause punctuation once the cue is already substantial,
|
|
206
|
+
// so subtitles break at natural points (commas, pauses) instead of mid-clause.
|
|
207
|
+
if (/[,;:]$/.test(word) && bufferText.length >= Svc.SUB_SOFT_BREAK_MIN_CHARS) {
|
|
208
|
+
flush();
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
flush();
|
|
212
|
+
// Phase 1.5 — merge single-word cues that are not real pauses/emphasis.
|
|
213
|
+
const mergedCues = this.mergeLoneWordCues(cues);
|
|
214
|
+
// Phase 2 — build text and adjust display timing per cue.
|
|
215
|
+
const draft = mergedCues
|
|
216
|
+
.map((words) => ({
|
|
217
|
+
start: words[0].start,
|
|
218
|
+
endRaw: words[words.length - 1].end,
|
|
219
|
+
text: words.map((w) => w.word).join(' ').replace(/\s+/g, ' ').trim(),
|
|
220
|
+
}))
|
|
221
|
+
.filter((c) => c.text.length > 0);
|
|
222
|
+
const round = (n) => Math.max(0, Math.round(n * 1000) / 1000);
|
|
223
|
+
// Snap a start to the end of the silence it falls into (where speech begins).
|
|
224
|
+
// end_seconds is computed separately from `start`, so it will always be ≥ start.
|
|
225
|
+
const snapStart = (rawStart) => {
|
|
226
|
+
for (const s of silences) {
|
|
227
|
+
if (rawStart >= s.start && rawStart < s.end) {
|
|
228
|
+
return s.end;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
return rawStart;
|
|
232
|
+
};
|
|
233
|
+
const starts = draft.map((seg) => snapStart(seg.start));
|
|
234
|
+
return draft.map((seg, i) => {
|
|
235
|
+
const start = starts[i];
|
|
236
|
+
// Extend duration to satisfy minimum display time and reading speed (CPS),
|
|
237
|
+
// capped at the maximum duration.
|
|
238
|
+
let end = Math.max(seg.endRaw, start + Svc.SUB_MIN_DURATION, start + seg.text.length / maxCps);
|
|
239
|
+
end = Math.min(end, start + Svc.SUB_MAX_DURATION);
|
|
240
|
+
// Never overlap the next cue (keep a minimum gap from its aligned start).
|
|
241
|
+
const nextStart = starts[i + 1];
|
|
242
|
+
if (nextStart !== undefined) {
|
|
243
|
+
const maxEnd = nextStart - Svc.SUB_MIN_GAP;
|
|
244
|
+
if (maxEnd > start && end > maxEnd) {
|
|
245
|
+
end = maxEnd;
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
if (end <= start) {
|
|
249
|
+
end = start + Svc.SUB_MIN_DURATION;
|
|
250
|
+
}
|
|
251
|
+
return {
|
|
252
|
+
start_seconds: round(start),
|
|
253
|
+
end_seconds: round(end),
|
|
254
|
+
text: seg.text,
|
|
255
|
+
};
|
|
256
|
+
});
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Merges single-word cues into a neighbour when they are not separated by a
|
|
260
|
+
* real pause — avoiding isolated words on screen. A lone word kept apart by a
|
|
261
|
+
* pause (≥ SUB_PAUSE_SPLIT) is preserved, since it is a genuine pause/emphasis.
|
|
262
|
+
* Merges only happen when the combined cue still fits two lines and the max
|
|
263
|
+
* duration, so size/legibility rules are never violated.
|
|
264
|
+
*/
|
|
265
|
+
mergeLoneWordCues(cues) {
|
|
266
|
+
const Svc = CourseAudioTranscriptionService_1;
|
|
267
|
+
const merged = [];
|
|
268
|
+
for (const cue of cues) {
|
|
269
|
+
const prev = merged[merged.length - 1];
|
|
270
|
+
if (prev && (prev.length === 1 || cue.length === 1)) {
|
|
271
|
+
const gap = cue[0].start - prev[prev.length - 1].end;
|
|
272
|
+
const combined = [...prev, ...cue];
|
|
273
|
+
const combinedText = combined.map((w) => w.word).join(' ');
|
|
274
|
+
const combinedDuration = cue[cue.length - 1].end - prev[0].start;
|
|
275
|
+
if (gap < Svc.SUB_PAUSE_SPLIT &&
|
|
276
|
+
combinedDuration <= Svc.SUB_MAX_DURATION &&
|
|
277
|
+
(0, subtitle_util_1.fitsInTwoLines)(combinedText, Svc.SUB_MAX_CHARS_PER_LINE)) {
|
|
278
|
+
merged[merged.length - 1] = combined;
|
|
279
|
+
continue;
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
merged.push(cue);
|
|
283
|
+
}
|
|
284
|
+
return merged;
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* Transcribes a single audio chunk with the given model and returns the raw
|
|
288
|
+
* OpenAI response body. whisper-1 uses verbose_json with word/segment
|
|
289
|
+
* timestamps; the gpt-4o-transcribe family only supports json (text only).
|
|
290
|
+
*/
|
|
291
|
+
async transcribeChunk(chunkBuffer, chunkName, model, apiKey, language) {
|
|
292
|
+
var _a, _b, _c, _d, _e;
|
|
293
|
+
const formData = new FormData();
|
|
294
|
+
formData.append('file', new Blob([new Uint8Array(chunkBuffer)], { type: 'audio/mpeg' }), chunkName);
|
|
295
|
+
const isWhisper = model === 'whisper-1';
|
|
296
|
+
formData.append('model', model);
|
|
297
|
+
// Only whisper-1 supports verbose_json + timestamp_granularities; the
|
|
298
|
+
// gpt-4o-transcribe family returns 400 for anything other than json/text.
|
|
299
|
+
formData.append('response_format', isWhisper ? 'verbose_json' : 'json');
|
|
300
|
+
formData.append('language', language);
|
|
301
|
+
if (isWhisper) {
|
|
302
|
+
formData.append('timestamp_granularities[]', 'word');
|
|
303
|
+
formData.append('timestamp_granularities[]', 'segment');
|
|
304
|
+
}
|
|
305
|
+
const headers = {
|
|
306
|
+
Authorization: `Bearer ${apiKey}`,
|
|
307
|
+
};
|
|
308
|
+
const maybeHeaders = (_b = (_a = formData).getHeaders) === null || _b === void 0 ? void 0 : _b.call(_a);
|
|
309
|
+
if (maybeHeaders && typeof maybeHeaders === 'object') {
|
|
310
|
+
Object.assign(headers, maybeHeaders);
|
|
311
|
+
}
|
|
312
|
+
try {
|
|
313
|
+
const response = await axios_1.default.post('https://api.openai.com/v1/audio/transcriptions', formData, { headers });
|
|
314
|
+
return response.data;
|
|
315
|
+
}
|
|
316
|
+
catch (axiosErr) {
|
|
317
|
+
const status = (_c = axiosErr === null || axiosErr === void 0 ? void 0 : axiosErr.response) === null || _c === void 0 ? void 0 : _c.status;
|
|
318
|
+
const body = JSON.stringify((_e = (_d = axiosErr === null || axiosErr === void 0 ? void 0 : axiosErr.response) === null || _d === void 0 ? void 0 : _d.data) !== null && _e !== void 0 ? _e : {});
|
|
319
|
+
this.logger.error(`OpenAI transcription request failed — model=${model} language=${language} status=${status} body=${body}`);
|
|
320
|
+
throw axiosErr;
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
/**
|
|
324
|
+
* Converts a raw chunk transcription response into absolute-timed words,
|
|
325
|
+
* applying `offsetSeconds` (the chunk's position in the full audio):
|
|
326
|
+
* - words[] → real per-word timestamps (whisper-1)
|
|
327
|
+
* - segments[] → synthesize even word timing within each segment (whisper-1
|
|
328
|
+
* verbose_json without word granularity)
|
|
329
|
+
* - text only → distribute words evenly across the chunk's speech window,
|
|
330
|
+
* skipping any leading silence detected by ffmpeg (gpt-4o)
|
|
331
|
+
*/
|
|
332
|
+
chunkResponseToWords(data, offsetSeconds, silences) {
|
|
89
333
|
var _a, _b, _c, _d, _e, _f, _g, _h, _j;
|
|
334
|
+
const out = [];
|
|
335
|
+
const wordEntries = (_a = data === null || data === void 0 ? void 0 : data.words) !== null && _a !== void 0 ? _a : [];
|
|
336
|
+
if (wordEntries.length > 0) {
|
|
337
|
+
for (const w of wordEntries) {
|
|
338
|
+
const wordText = String((_b = w === null || w === void 0 ? void 0 : w.word) !== null && _b !== void 0 ? _b : '').trim();
|
|
339
|
+
if (!wordText)
|
|
340
|
+
continue;
|
|
341
|
+
out.push({
|
|
342
|
+
word: wordText,
|
|
343
|
+
start: offsetSeconds + Number((_c = w === null || w === void 0 ? void 0 : w.start) !== null && _c !== void 0 ? _c : 0),
|
|
344
|
+
end: offsetSeconds + Number((_d = w === null || w === void 0 ? void 0 : w.end) !== null && _d !== void 0 ? _d : 0),
|
|
345
|
+
});
|
|
346
|
+
}
|
|
347
|
+
return out;
|
|
348
|
+
}
|
|
349
|
+
const segments = (_e = data === null || data === void 0 ? void 0 : data.segments) !== null && _e !== void 0 ? _e : [];
|
|
350
|
+
if (segments.length > 0) {
|
|
351
|
+
// whisper-1 verbose_json fallback: synthesize from segments
|
|
352
|
+
for (const segment of segments) {
|
|
353
|
+
const text = String((_f = segment === null || segment === void 0 ? void 0 : segment.text) !== null && _f !== void 0 ? _f : '').trim();
|
|
354
|
+
if (!text)
|
|
355
|
+
continue;
|
|
356
|
+
const start = offsetSeconds + Number((_g = segment === null || segment === void 0 ? void 0 : segment.start) !== null && _g !== void 0 ? _g : 0);
|
|
357
|
+
const end = offsetSeconds + Number((_h = segment === null || segment === void 0 ? void 0 : segment.end) !== null && _h !== void 0 ? _h : 0);
|
|
358
|
+
const words = text.split(/\s+/).filter(Boolean);
|
|
359
|
+
const dur = Math.max(0, end - start);
|
|
360
|
+
const wordDur = words.length > 0 ? dur / words.length : 0;
|
|
361
|
+
for (let wi = 0; wi < words.length; wi++) {
|
|
362
|
+
out.push({
|
|
363
|
+
word: words[wi],
|
|
364
|
+
start: start + wi * wordDur,
|
|
365
|
+
end: start + (wi + 1) * wordDur,
|
|
366
|
+
});
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
return out;
|
|
370
|
+
}
|
|
371
|
+
// json-only models (gpt-4o-transcribe etc): distribute over the speech
|
|
372
|
+
// window of the chunk, skipping any leading silence detected by ffmpeg.
|
|
373
|
+
const fullText = String((_j = data === null || data === void 0 ? void 0 : data.text) !== null && _j !== void 0 ? _j : '').trim();
|
|
374
|
+
const words = fullText.split(/\s+/).filter(Boolean);
|
|
375
|
+
const chunkDur = 60;
|
|
376
|
+
const chunkSpeechOffset = silences
|
|
377
|
+
.filter((s) => s.start <= offsetSeconds + 1 &&
|
|
378
|
+
s.end > offsetSeconds &&
|
|
379
|
+
s.end <= offsetSeconds + chunkDur)
|
|
380
|
+
.reduce((max, s) => Math.max(max, s.end - offsetSeconds), 0);
|
|
381
|
+
const speechDur = Math.max(1, chunkDur - chunkSpeechOffset);
|
|
382
|
+
const wordDur = words.length > 0 ? speechDur / words.length : 0;
|
|
383
|
+
for (let wi = 0; wi < words.length; wi++) {
|
|
384
|
+
out.push({
|
|
385
|
+
word: words[wi],
|
|
386
|
+
start: offsetSeconds + chunkSpeechOffset + wi * wordDur,
|
|
387
|
+
end: offsetSeconds + chunkSpeechOffset + (wi + 1) * wordDur,
|
|
388
|
+
});
|
|
389
|
+
}
|
|
390
|
+
return out;
|
|
391
|
+
}
|
|
392
|
+
async handle(job) {
|
|
393
|
+
var _a, _b, _c, _d, _e;
|
|
90
394
|
const { courseId, lessonId, audioFileId, parentJobId, notificationId, notificationUserId } = job.payload;
|
|
91
395
|
const notificationContext = Number.isInteger(Number(notificationId)) &&
|
|
92
396
|
Number.isInteger(Number(notificationUserId))
|
|
@@ -107,8 +411,19 @@ let CourseAudioTranscriptionService = CourseAudioTranscriptionService_1 = class
|
|
|
107
411
|
const settings = await this.settingService.getSettingValues([
|
|
108
412
|
'ai-openai-profile-id',
|
|
109
413
|
'lms-audio-transcription-enabled',
|
|
414
|
+
'lms-subtitle-reading-speed',
|
|
415
|
+
'lms-subtitle-silence-noise-db',
|
|
416
|
+
'lms-subtitle-silence-min-duration',
|
|
417
|
+
'lms-transcription-model',
|
|
110
418
|
]);
|
|
111
419
|
const transcriptionEnabled = settings['lms-audio-transcription-enabled'] !== false;
|
|
420
|
+
const transcriptionModel = String((_a = settings['lms-transcription-model']) !== null && _a !== void 0 ? _a : 'whisper-1');
|
|
421
|
+
// The model choice drives the mode: whisper-1 returns real timestamps, so it
|
|
422
|
+
// runs in a single pass. The gpt-4o models return no timestamps, so they run
|
|
423
|
+
// hybrid — whisper-1 supplies the timing and is merged onto the gpt-4o text.
|
|
424
|
+
const useHybrid = transcriptionModel !== 'whisper-1';
|
|
425
|
+
const readingSpeedCps = this.resolveReadingSpeedCps(settings['lms-subtitle-reading-speed']);
|
|
426
|
+
const silenceParams = this.resolveSilenceParams(settings['lms-subtitle-silence-noise-db'], settings['lms-subtitle-silence-min-duration']);
|
|
112
427
|
if (!transcriptionEnabled) {
|
|
113
428
|
const msg = `Transcrição desabilitada nas configurações do LMS (lms-audio-transcription-enabled=false).`;
|
|
114
429
|
if (notificationContext) {
|
|
@@ -141,7 +456,8 @@ let CourseAudioTranscriptionService = CourseAudioTranscriptionService_1 = class
|
|
|
141
456
|
where: { id: courseId },
|
|
142
457
|
include: { locale: true },
|
|
143
458
|
});
|
|
144
|
-
const language = (
|
|
459
|
+
const language = ((_c = (_b = course === null || course === void 0 ? void 0 : course.locale) === null || _b === void 0 ? void 0 : _b.code) !== null && _c !== void 0 ? _c : 'pt').split('-')[0];
|
|
460
|
+
const localeId = (_d = course === null || course === void 0 ? void 0 : course.locale_id) !== null && _d !== void 0 ? _d : null;
|
|
145
461
|
const tempDir = (0, path_1.join)((0, os_1.tmpdir)(), `lms-transcribe-${lessonId}-${Date.now()}`);
|
|
146
462
|
await fs_1.promises.mkdir(tempDir, { recursive: true });
|
|
147
463
|
try {
|
|
@@ -209,7 +525,10 @@ let CourseAudioTranscriptionService = CourseAudioTranscriptionService_1 = class
|
|
|
209
525
|
lessonId,
|
|
210
526
|
chunks: chunks.length,
|
|
211
527
|
});
|
|
212
|
-
|
|
528
|
+
// Detect silence in the full normalized audio so subtitle starts can be
|
|
529
|
+
// aligned to where speech actually begins (intros, music, long pauses).
|
|
530
|
+
const silences = await this.detectSilences(normalizedAudioPath, silenceParams.noiseDb, silenceParams.minDuration);
|
|
531
|
+
const allWords = [];
|
|
213
532
|
for (let i = 0; i < chunks.length; i += 1) {
|
|
214
533
|
const chunkName = chunks[i];
|
|
215
534
|
if (!chunkName)
|
|
@@ -223,32 +542,29 @@ let CourseAudioTranscriptionService = CourseAudioTranscriptionService_1 = class
|
|
|
223
542
|
const chunkPath = (0, path_1.join)(tempDir, chunkName);
|
|
224
543
|
const offsetSeconds = i * 60;
|
|
225
544
|
const chunkBuffer = await fs_1.promises.readFile(chunkPath);
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
Object.assign(headers, maybeHeaders);
|
|
545
|
+
if (useHybrid) {
|
|
546
|
+
// Hybrid: real timing from whisper-1 + premium text from the chosen
|
|
547
|
+
// model, merged by word alignment (see alignTextToTimings).
|
|
548
|
+
const [timingData, textData] = await Promise.all([
|
|
549
|
+
this.transcribeChunk(chunkBuffer, chunkName, 'whisper-1', apiKey, language),
|
|
550
|
+
this.transcribeChunk(chunkBuffer, chunkName, transcriptionModel, apiKey, language),
|
|
551
|
+
]);
|
|
552
|
+
const timedWords = this.chunkResponseToWords(timingData, offsetSeconds, silences);
|
|
553
|
+
const cleanText = String((_e = textData === null || textData === void 0 ? void 0 : textData.text) !== null && _e !== void 0 ? _e : '').trim();
|
|
554
|
+
allWords.push(...(0, subtitle_util_1.alignTextToTimings)(timedWords, cleanText));
|
|
237
555
|
}
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
const text = String((_g = segment === null || segment === void 0 ? void 0 : segment.text) !== null && _g !== void 0 ? _g : '').trim();
|
|
242
|
-
if (!text)
|
|
243
|
-
continue;
|
|
244
|
-
allSegments.push({
|
|
245
|
-
course_lesson_id: lessonId,
|
|
246
|
-
start_seconds: offsetSeconds + Number((_h = segment === null || segment === void 0 ? void 0 : segment.start) !== null && _h !== void 0 ? _h : 0),
|
|
247
|
-
end_seconds: offsetSeconds + Number((_j = segment === null || segment === void 0 ? void 0 : segment.end) !== null && _j !== void 0 ? _j : 0),
|
|
248
|
-
text,
|
|
249
|
-
});
|
|
556
|
+
else {
|
|
557
|
+
const data = await this.transcribeChunk(chunkBuffer, chunkName, transcriptionModel, apiKey, language);
|
|
558
|
+
allWords.push(...this.chunkResponseToWords(data, offsetSeconds, silences));
|
|
250
559
|
}
|
|
251
560
|
}
|
|
561
|
+
const allSegments = this.buildSubtitleSegments(allWords, readingSpeedCps, silences).map((seg) => ({
|
|
562
|
+
course_lesson_id: lessonId,
|
|
563
|
+
locale_id: localeId,
|
|
564
|
+
start_seconds: seg.start_seconds,
|
|
565
|
+
end_seconds: seg.end_seconds,
|
|
566
|
+
text: seg.text,
|
|
567
|
+
}));
|
|
252
568
|
await emitProgress('Salvando transcrição gerada pela IA...', {
|
|
253
569
|
phase: 'transcription_save',
|
|
254
570
|
lessonId,
|
|
@@ -256,13 +572,31 @@ let CourseAudioTranscriptionService = CourseAudioTranscriptionService_1 = class
|
|
|
256
572
|
});
|
|
257
573
|
await this.prismaService.$transaction([
|
|
258
574
|
this.prismaService.course_lesson_transcription_segment.deleteMany({
|
|
259
|
-
where: { course_lesson_id: lessonId },
|
|
575
|
+
where: { course_lesson_id: lessonId, locale_id: localeId },
|
|
260
576
|
}),
|
|
261
577
|
this.prismaService.course_lesson_transcription_segment.createMany({
|
|
262
578
|
data: allSegments,
|
|
263
579
|
}),
|
|
264
580
|
]);
|
|
265
581
|
this.logger.log(`Transcription saved for lesson ${lessonId}: ${allSegments.length} segments`);
|
|
582
|
+
// Record AI cost (transcription is billed per second of audio). Hybrid
|
|
583
|
+
// mode runs two passes (whisper-1 for timing + the chosen model for text),
|
|
584
|
+
// so both are charged.
|
|
585
|
+
const audioSeconds = allWords.length > 0 ? allWords[allWords.length - 1].end : 0;
|
|
586
|
+
await this.aiUsageService.recordTranscriptionUsage({
|
|
587
|
+
courseId,
|
|
588
|
+
lessonId,
|
|
589
|
+
model: transcriptionModel,
|
|
590
|
+
audioSeconds,
|
|
591
|
+
});
|
|
592
|
+
if (useHybrid) {
|
|
593
|
+
await this.aiUsageService.recordTranscriptionUsage({
|
|
594
|
+
courseId,
|
|
595
|
+
lessonId,
|
|
596
|
+
model: 'whisper-1',
|
|
597
|
+
audioSeconds,
|
|
598
|
+
});
|
|
599
|
+
}
|
|
266
600
|
// Automatically trigger XP calculation after transcription completes.
|
|
267
601
|
try {
|
|
268
602
|
const existingMap = await this.prismaService.lesson_xp_map.findUnique({
|
|
@@ -322,6 +656,22 @@ let CourseAudioTranscriptionService = CourseAudioTranscriptionService_1 = class
|
|
|
322
656
|
}
|
|
323
657
|
};
|
|
324
658
|
exports.CourseAudioTranscriptionService = CourseAudioTranscriptionService;
|
|
659
|
+
// Subtitle rules — Netflix Timed Text Style Guide (pt-BR).
|
|
660
|
+
CourseAudioTranscriptionService.SUB_MAX_CHARS_PER_LINE = 42;
|
|
661
|
+
CourseAudioTranscriptionService.SUB_MAX_LINES = 2;
|
|
662
|
+
CourseAudioTranscriptionService.SUB_MAX_CPS = 17; // reading speed (chars per second)
|
|
663
|
+
CourseAudioTranscriptionService.SUB_MAX_DURATION = 7; // seconds
|
|
664
|
+
CourseAudioTranscriptionService.SUB_MIN_DURATION = 5 / 6; // ~0.833s
|
|
665
|
+
CourseAudioTranscriptionService.SUB_MIN_GAP = 0.084; // ~2 frames @ 24fps
|
|
666
|
+
CourseAudioTranscriptionService.SUB_PAUSE_SPLIT = 0.7; // silence that forces a new cue
|
|
667
|
+
// Soft break at commas/semicolons/colons only once the cue already holds a
|
|
668
|
+
// readable chunk (~one line), so we break at natural points without
|
|
669
|
+
// producing tiny fragments.
|
|
670
|
+
CourseAudioTranscriptionService.SUB_SOFT_BREAK_MIN_CHARS = 38;
|
|
671
|
+
// Silence detection used to snap subtitle starts to where speech actually
|
|
672
|
+
// begins (Whisper word timestamps drift over intros/music and long pauses).
|
|
673
|
+
CourseAudioTranscriptionService.SUB_SILENCE_NOISE_DB = -30; // silencedetect threshold
|
|
674
|
+
CourseAudioTranscriptionService.SUB_SILENCE_MIN_DURATION = 0.3; // min silence length (s)
|
|
325
675
|
exports.CourseAudioTranscriptionService = CourseAudioTranscriptionService = CourseAudioTranscriptionService_1 = __decorate([
|
|
326
676
|
(0, common_1.Injectable)(),
|
|
327
677
|
__param(0, (0, common_1.Inject)((0, common_1.forwardRef)(() => api_prisma_1.PrismaService))),
|
|
@@ -330,11 +680,13 @@ exports.CourseAudioTranscriptionService = CourseAudioTranscriptionService = Cour
|
|
|
330
680
|
__param(3, (0, common_1.Inject)((0, common_1.forwardRef)(() => core_1.NotificationService))),
|
|
331
681
|
__param(4, (0, common_1.Inject)((0, common_1.forwardRef)(() => queue_1.QueueHandlerRegistry))),
|
|
332
682
|
__param(5, (0, common_1.Inject)((0, common_1.forwardRef)(() => queue_1.DatabaseQueueProvider))),
|
|
683
|
+
__param(6, (0, common_1.Inject)((0, common_1.forwardRef)(() => course_ai_usage_service_1.CourseAiUsageService))),
|
|
333
684
|
__metadata("design:paramtypes", [api_prisma_1.PrismaService,
|
|
334
685
|
core_1.SettingService,
|
|
335
686
|
core_1.FileService,
|
|
336
687
|
core_1.NotificationService,
|
|
337
688
|
queue_1.QueueHandlerRegistry,
|
|
338
|
-
queue_1.DatabaseQueueProvider
|
|
689
|
+
queue_1.DatabaseQueueProvider,
|
|
690
|
+
course_ai_usage_service_1.CourseAiUsageService])
|
|
339
691
|
], CourseAudioTranscriptionService);
|
|
340
692
|
//# sourceMappingURL=course-audio-transcription.service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"course-audio-transcription.service.js","sourceRoot":"","sources":["../../src/course/course-audio-transcription.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;AAAA,oDAAoD;AACpD,wCAA+G;AAC/G,0CAA6G;AAC7G,2CAMwB;AACxB,kDAA0B;AAC1B,iDAAyC;AACzC,2BAAoC;AACpC,2BAA4B;AAC5B,+BAA4B;AAC5B,+BAAiC;AAEjC,MAAM,aAAa,GAAG,IAAA,gBAAS,EAAC,wBAAQ,CAAC,CAAC;AAQnC,IAAM,+BAA+B,uCAArC,MAAM,+BAA+B;IAGlC,KAAK,CAAC,mBAAmB,CAC/B,UAAkB,EAClB,OAAe,EACf,QAAkC;QAElC,IAAI,CAAC;YACH,MAAO,IAAI,CAAC,aAAqB,CAAC,eAAe,CAAC,MAAM,CAAC;gBACvD,IAAI,kBACF,YAAY,EAAE,UAAU,EACxB,UAAU,EAAE,SAAS,EACrB,OAAO,IACJ,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAClC;aACF,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,aAAa,UAAU,qDAAqD,OAAO,MAAM,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CACpJ,CAAC;QACJ,CAAC;IACH,CAAC;IAEO,2BAA2B,CAAC,QAAkC;;QACpE,MAAM,KAAK,GAAG,MAAM,CAAC,MAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,KAAK,mCAAI,EAAE,CAAC,CAAC;QAE5C,IAAI,KAAK,KAAK,8BAA8B;YAAE,OAAO,EAAE,CAAC;QACxD,IAAI,KAAK,KAAK,2BAA2B;YAAE,OAAO,EAAE,CAAC;QACrD,IAAI,KAAK,KAAK,0BAA0B;YAAE,OAAO,EAAE,CAAC;QACpD,IAAI,KAAK,KAAK,wBAAwB,EAAE,CAAC;YACvC,MAAM,UAAU,GAAG,MAAM,CAAC,MAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,UAAU,mCAAI,CAAC,CAAC,CAAC;YACrD,MAAM,UAAU,GAAG,MAAM,CAAC,MAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,UAAU,mCAAI,CAAC,CAAC,CAAC;YACrD,IAAI,UAAU,GAAG,CAAC,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;gBACrC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC;gBAChE,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;YACpC,CAAC;YACD,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,IAAI,KAAK,KAAK,oBAAoB;YAAE,OAAO,EAAE,CAAC;QAC9C,IAAI,KAAK,KAAK,oBAAoB;YAAE,OAAO,GAAG,CAAC;QAE/C,OAAO,EAAE,CAAC;IACZ,CAAC;IAEO,KAAK,CAAC,uBAAuB,CACnC,OAA4B,EAC5B,QAAgB,EAChB,IAAY,EACZ,OAAiB;QAEjB,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,mBAAmB,CAAC,cAAc,CAC3C,OAAO,CAAC,MAAM,EACd,OAAO,CAAC,cAAc,kBAEpB,QAAQ;gBACR,IAAI,IACD,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAE1C,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,uCAAuC,OAAO,CAAC,cAAc,aAAa,OAAO,CAAC,MAAM,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CACxJ,CAAC;QACJ,CAAC;IACH,CAAC;IAED,YAEE,aAA6C,EAE7C,cAA+C,EAE/C,WAAyC,EAEzC,mBAAyD,EAEzD,QAA+C,EAE/C,OAA+C;QAV9B,kBAAa,GAAb,aAAa,CAAe;QAE5B,mBAAc,GAAd,cAAc,CAAgB;QAE9B,gBAAW,GAAX,WAAW,CAAa;QAExB,wBAAmB,GAAnB,mBAAmB,CAAqB;QAExC,aAAQ,GAAR,QAAQ,CAAsB;QAE9B,YAAO,GAAP,OAAO,CAAuB;QA/EhC,WAAM,GAAG,IAAI,eAAM,CAAC,iCAA+B,CAAC,IAAI,CAAC,CAAC;IAgFxE,CAAC;IAEJ,YAAY;QACV,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,sBAAsB,EAAE,IAAI,CAAC,CAAC;QACrD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;IACnE,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,GAUZ;;QACC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,kBAAkB,EAAE,GAAG,GAAG,CAAC,OAOhG,CAAC;QAEF,MAAM,mBAAmB,GACvB,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YACxC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;YAC1C,CAAC,CAAC;gBACE,cAAc,EAAE,MAAM,CAAC,cAAc,CAAC;gBACtC,MAAM,EAAE,MAAM,CAAC,kBAAkB,CAAC;aACnC;YACH,CAAC,CAAC,SAAS,CAAC;QAEhB,MAAM,YAAY,GAAG,KAAK,EAAE,OAAe,EAAE,QAAkC,EAAE,EAAE;YACjF,MAAM,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;YAC1D,IAAI,WAAW,EAAE,CAAC;gBAChB,MAAM,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;YACjE,CAAC;YACD,IAAI,mBAAmB,EAAE,CAAC;gBACxB,MAAM,IAAI,CAAC,uBAAuB,CAChC,mBAAmB,EACnB,IAAI,CAAC,2BAA2B,CAAC,QAAQ,CAAC,EAC1C,OAAO,CACR,CAAC;YACJ,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC;YAC1D,sBAAsB;YACtB,iCAAiC;SAClC,CAAC,CAAC;QACH,MAAM,oBAAoB,GAAG,QAAQ,CAAC,iCAAiC,CAAC,KAAK,KAAK,CAAC;QAEnF,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC1B,MAAM,GAAG,GAAG,4FAA4F,CAAC;YACzG,IAAI,mBAAmB,EAAE,CAAC;gBACxB,MAAM,IAAI,CAAC,uBAAuB,CAAC,mBAAmB,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;YAC3E,CAAC;YACD,MAAM,IAAI,yBAAiB,CAAC,GAAG,CAAC,CAAC;QACnC,CAAC;QAED,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC,CAAC;QAC3D,IAAI,MAAM,GAAG,EAAE,CAAC;QAEhB,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,OAAO,GAAG,MAAO,IAAI,CAAC,aAAqB,CAAC,mBAAmB,CAAC,UAAU,CAAC;gBAC/E,KAAK,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE;gBACxB,OAAO,EAAE,EAAE,oBAAoB,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE;aAC9D,CAAC,CAAC;YACH,IAAI,OAAO,EAAE,CAAC;gBACZ,MAAM,GAAG,IAAA,mCAA4B,EACnC,OAAO,CAAC,oBAAoB,CAAC,IAAI,EACjC,OAAO,CAAC,MAAM,CACf,CAAC,MAAM,CAAC;YACX,CAAC;QACH,CAAC;QAED,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,cAAc,GAAG,QAAQ,CAAC,sBAAsB,CAAC,CAAC;YACxD,MAAM,GAAG,GAAG,cAAc;gBACxB,CAAC,CAAC,oBAAoB,cAAc,iHAAiH;gBACrJ,CAAC,CAAC,8RAA8R,CAAC;YACnS,IAAI,mBAAmB,EAAE,CAAC;gBACxB,MAAM,IAAI,CAAC,uBAAuB,CAAC,mBAAmB,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;YAC3E,CAAC;YACD,MAAM,IAAI,yBAAiB,CAAC,GAAG,CAAC,CAAC;QACnC,CAAC;QAED,MAAM,MAAM,GAAG,MAAO,IAAI,CAAC,aAAqB,CAAC,MAAM,CAAC,UAAU,CAAC;YACjE,KAAK,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE;YACvB,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;SAC1B,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG,MAAA,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,MAAM,0CAAE,IAAI,mCAAI,IAAI,CAAC;QAE9C,MAAM,OAAO,GAAG,IAAA,WAAI,EAAC,IAAA,WAAM,GAAE,EAAE,kBAAkB,QAAQ,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAC3E,MAAM,aAAE,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAE7C,IAAI,CAAC;YACH,MAAM,eAAe,GAAG,IAAA,WAAI,EAAC,OAAO,EAAE,SAAS,QAAQ,SAAS,CAAC,CAAC;YAClE,MAAM,mBAAmB,GAAG,IAAA,WAAI,EAAC,OAAO,EAAE,SAAS,QAAQ,iBAAiB,CAAC,CAAC;YAC9E,MAAM,YAAY,CAAC,oCAAoC,EAAE;gBACvD,KAAK,EAAE,8BAA8B;gBACrC,QAAQ;gBACR,WAAW;aACZ,CAAC,CAAC;YACH,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;YAEpE,MAAM,YAAY,CAAC,wCAAwC,EAAE;gBAC3D,KAAK,EAAE,2BAA2B;gBAClC,QAAQ;aACT,CAAC,CAAC;YACH,MAAM,aAAa,CACjB,QAAQ,EACR;gBACE,IAAI;gBACJ,IAAI;gBACJ,eAAe;gBACf,KAAK;gBACL,OAAO;gBACP,KAAK;gBACL,GAAG;gBACH,MAAM;gBACN,YAAY;gBACZ,MAAM;gBACN,KAAK;gBACL,mBAAmB;aACpB,EACD;gBACE,SAAS,EAAE,IAAI,GAAG,IAAI,GAAG,EAAE;gBAC3B,WAAW,EAAE,IAAI;aAClB,CACF,CAAC;YAEF,MAAM,YAAY,GAAG,IAAA,WAAI,EAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;YACrD,MAAM,YAAY,CAAC,+CAA+C,EAAE;gBAClE,KAAK,EAAE,2BAA2B;gBAClC,QAAQ;aACT,CAAC,CAAC;YACH,MAAM,aAAa,CACjB,QAAQ,EACR;gBACE,IAAI;gBACJ,IAAI;gBACJ,mBAAmB;gBACnB,IAAI;gBACJ,SAAS;gBACT,eAAe;gBACf,IAAI;gBACJ,KAAK;gBACL,OAAO;gBACP,KAAK;gBACL,GAAG;gBACH,MAAM;gBACN,YAAY;gBACZ,MAAM;gBACN,KAAK;gBACL,YAAY;aACb,EACD;gBACE,SAAS,EAAE,IAAI,GAAG,IAAI,GAAG,EAAE;gBAC3B,WAAW,EAAE,IAAI;aAClB,CACF,CAAC;YAEF,MAAM,QAAQ,GAAG,MAAM,aAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAC3C,MAAM,MAAM,GAAG,QAAQ;iBACpB,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;iBACpE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;YACtC,MAAM,YAAY,CAAC,qBAAqB,MAAM,CAAC,MAAM,YAAY,EAAE;gBACjE,KAAK,EAAE,0BAA0B;gBACjC,QAAQ;gBACR,MAAM,EAAE,MAAM,CAAC,MAAM;aACtB,CAAC,CAAC;YAEH,MAAM,WAAW,GAKZ,EAAE,CAAC;YAER,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC1C,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;gBAC5B,IAAI,CAAC,SAAS;oBAAE,SAAS;gBACzB,MAAM,YAAY,CAChB,gCAAgC,CAAC,GAAG,CAAC,OAAO,MAAM,CAAC,MAAM,KAAK,EAC9D;oBACE,KAAK,EAAE,wBAAwB;oBAC/B,QAAQ;oBACR,UAAU,EAAE,CAAC,GAAG,CAAC;oBACjB,UAAU,EAAE,MAAM,CAAC,MAAM;iBAC1B,CACF,CAAC;gBAEF,MAAM,SAAS,GAAG,IAAA,WAAI,EAAC,OAAO,EAAE,SAAS,CAAC,CAAC;gBAC3C,MAAM,aAAa,GAAG,CAAC,GAAG,EAAE,CAAC;gBAC7B,MAAM,WAAW,GAAG,MAAM,aAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;gBAEjD,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE,CAAC;gBAChC,QAAQ,CAAC,MAAM,CACb,MAAM,EACN,IAAI,IAAI,CAAC,CAAC,WAAW,CAAC,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,EAC/C,SAAS,CACV,CAAC;gBACF,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;gBACtC,QAAQ,CAAC,MAAM,CAAC,iBAAiB,EAAE,cAAc,CAAC,CAAC;gBACnD,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;gBAEtC,MAAM,OAAO,GAA2B;oBACtC,aAAa,EAAE,UAAU,MAAM,EAAE;iBAClC,CAAC;gBACF,MAAM,YAAY,GAAG,MAAA,MAAC,QAAgB,EAAC,UAAU,kDAAI,CAAC;gBACtD,IAAI,YAAY,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE,CAAC;oBACrD,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;gBACvC,CAAC;gBAED,MAAM,QAAQ,GAAG,MAAM,eAAK,CAAC,IAAI,CAC/B,gDAAgD,EAChD,QAAQ,EACR,EAAE,OAAO,EAAE,CACZ,CAAC;gBAEF,MAAM,QAAQ,GAAG,MAAA,MAAA,QAAQ,CAAC,IAAI,0CAAE,QAAQ,mCAAI,EAAE,CAAC;gBAC/C,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;oBAC/B,MAAM,IAAI,GAAG,MAAM,CAAC,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,mCAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;oBAChD,IAAI,CAAC,IAAI;wBAAE,SAAS;oBAEpB,WAAW,CAAC,IAAI,CAAC;wBACf,gBAAgB,EAAE,QAAQ;wBAC1B,aAAa,EAAE,aAAa,GAAG,MAAM,CAAC,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,KAAK,mCAAI,CAAC,CAAC;wBAC1D,WAAW,EAAE,aAAa,GAAG,MAAM,CAAC,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,GAAG,mCAAI,CAAC,CAAC;wBACtD,IAAI;qBACL,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAED,MAAM,YAAY,CAAC,wCAAwC,EAAE;gBAC3D,KAAK,EAAE,oBAAoB;gBAC3B,QAAQ;gBACR,QAAQ,EAAE,WAAW,CAAC,MAAM;aAC7B,CAAC,CAAC;YACH,MAAM,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC;gBACnC,IAAI,CAAC,aAAqB,CAAC,mCAAmC,CAAC,UAAU,CAAC;oBACzE,KAAK,EAAE,EAAE,gBAAgB,EAAE,QAAQ,EAAE;iBACtC,CAAC;gBACD,IAAI,CAAC,aAAqB,CAAC,mCAAmC,CAAC,UAAU,CAAC;oBACzE,IAAI,EAAE,WAAW;iBAClB,CAAC;aACH,CAAC,CAAC;YAEH,IAAI,CAAC,MAAM,CAAC,GAAG,CACb,kCAAkC,QAAQ,KAAK,WAAW,CAAC,MAAM,WAAW,CAC7E,CAAC;YAEF,sEAAsE;YACtE,IAAI,CAAC;gBACH,MAAM,WAAW,GAAG,MAAO,IAAI,CAAC,aAAqB,CAAC,aAAa,CAAC,UAAU,CAAC;oBAC7E,KAAK,EAAE,EAAE,gBAAgB,EAAE,QAAQ,EAAE;oBACrC,MAAM,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE;iBACrB,CAAC,CAAC;gBAEH,IAAI,KAAa,CAAC;gBAClB,IAAI,WAAW,EAAE,CAAC;oBAChB,KAAK,GAAG,WAAW,CAAC,EAAE,CAAC;oBACvB,MAAM,IAAI,CAAC,aAAa,CAAC,iBAAiB,CACxC;;;;4BAIgB,EAChB,KAAK,CACN,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACN,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,eAAe,CACnD;;0BAEc,EACd,QAAQ,CACT,CAAC;oBACF,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACrB,CAAC;gBAED,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;oBACzB,IAAI,EAAE,yBAAyB;oBAC/B,SAAS,EAAE,yBAAyB;oBACpC,OAAO,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,kBAAkB,aAAlB,kBAAkB,cAAlB,kBAAkB,GAAI,CAAC,EAAE;oBAC7D,WAAW,EAAE,CAAC;oBACd,YAAY,EAAE,KAAK;oBACnB,YAAY,EAAE,eAAe;oBAC7B,cAAc,EAAE,MAAM,CAAC,QAAQ,CAAC;iBACjC,CAAC,CAAC;gBAEH,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,0CAA0C,QAAQ,SAAS,KAAK,GAAG,CAAC,CAAC;YACvF,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,+CAA+C,QAAQ,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CACrH,CAAC;YACJ,CAAC;YAED,MAAM,YAAY,CAChB,6BAA6B,WAAW,CAAC,MAAM,eAAe,EAC9D;gBACE,KAAK,EAAE,oBAAoB;gBAC3B,QAAQ;gBACR,QAAQ,EAAE,WAAW,CAAC,MAAM;aAC7B,CACF,CAAC;YACF,IAAI,mBAAmB,EAAE,CAAC;gBACxB,MAAM,IAAI,CAAC,uBAAuB,CAChC,mBAAmB,EACnB,GAAG,EACH,6BAA6B,WAAW,CAAC,MAAM,eAAe,EAC9D,IAAI,CACL,CAAC;YACJ,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,mBAAmB,EAAE,CAAC;gBACxB,MAAM,OAAO,GACX,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,OAAO;oBACrC,CAAC,CAAC,KAAK,CAAC,OAAO;oBACf,CAAC,CAAC,+BAA+B,CAAC;gBACtC,MAAM,IAAI,CAAC,uBAAuB,CAChC,mBAAmB,EACnB,GAAG,EACH,yBAAyB,OAAO,EAAE,EAClC,KAAK,CACN,CAAC;YACJ,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;gBAAS,CAAC;YACT,MAAM,aAAE,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;CACF,CAAA;AAjaY,0EAA+B;0CAA/B,+BAA+B;IAD3C,IAAA,mBAAU,GAAE;IAsER,WAAA,IAAA,eAAM,EAAC,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,0BAAa,CAAC,CAAC,CAAA;IAEvC,WAAA,IAAA,eAAM,EAAC,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,qBAAc,CAAC,CAAC,CAAA;IAExC,WAAA,IAAA,eAAM,EAAC,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,kBAAW,CAAC,CAAC,CAAA;IAErC,WAAA,IAAA,eAAM,EAAC,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,0BAAmB,CAAC,CAAC,CAAA;IAE7C,WAAA,IAAA,eAAM,EAAC,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,4BAAoB,CAAC,CAAC,CAAA;IAE9C,WAAA,IAAA,eAAM,EAAC,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,6BAAqB,CAAC,CAAC,CAAA;qCAThB,0BAAa;QAEZ,qBAAc;QAEjB,kBAAW;QAEH,0BAAmB;QAE9B,4BAAoB;QAErB,6BAAqB;GAhFtC,+BAA+B,CAia3C"}
|
|
1
|
+
{"version":3,"file":"course-audio-transcription.service.js","sourceRoot":"","sources":["../../src/course/course-audio-transcription.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,6 +14,7 @@ export type Scorm12BuildParams = {
|
|
|
14
14
|
courseId: number;
|
|
15
15
|
settings: {
|
|
16
16
|
visual?: ScormVisualOptions;
|
|
17
|
+
subtitleLocaleIds?: number[];
|
|
17
18
|
};
|
|
18
19
|
workDir: string;
|
|
19
20
|
onProgress: (pct: number, msg: string) => Promise<void>;
|
|
@@ -36,6 +37,8 @@ export declare class CourseExportScorm12Service {
|
|
|
36
37
|
private generateShellHtml;
|
|
37
38
|
private generateCss;
|
|
38
39
|
private generateJs;
|
|
40
|
+
private generateVttContent;
|
|
41
|
+
private secondsToVttTime;
|
|
39
42
|
private escapeXml;
|
|
40
43
|
private escapeHtml;
|
|
41
44
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"course-export-scorm12.service.d.ts","sourceRoot":"","sources":["../../src/course/course-export-scorm12.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAO5C,OAAO,EAAE,mBAAmB,EAAuB,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"course-export-scorm12.service.d.ts","sourceRoot":"","sources":["../../src/course/course-export-scorm12.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAO5C,OAAO,EAAE,mBAAmB,EAAuB,MAAM,yBAAyB,CAAC;AAQnF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE;QAAE,MAAM,CAAC,EAAE,kBAAkB,CAAC;QAAC,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IACxE,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACzD,CAAC;AAsCF,qBACa,0BAA0B;IAGnC,OAAO,CAAC,QAAQ,CAAC,MAAM;IAEvB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAE5B,OAAO,CAAC,QAAQ,CAAC,mBAAmB;gBAJnB,MAAM,EAAE,aAAa,EAErB,WAAW,EAAE,WAAW,EAExB,mBAAmB,EAAE,mBAAmB;IAGrD,YAAY,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC;QACtD,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IAuGF,OAAO,CAAC,aAAa;IAYrB,OAAO,CAAC,eAAe;IA+BvB,OAAO,CAAC,mBAAmB;IAU3B,OAAO,CAAC,gBAAgB;IAyCxB,OAAO,CAAC,mBAAmB;IAU3B,OAAO,CAAC,kBAAkB;IA8B1B,OAAO,CAAC,iBAAiB;IAsFzB,OAAO,CAAC,WAAW;IAwFnB,OAAO,CAAC,UAAU;IAwRlB,OAAO,CAAC,kBAAkB;IAc1B,OAAO,CAAC,gBAAgB;IAQxB,OAAO,CAAC,SAAS;IASjB,OAAO,CAAC,UAAU;CAMnB"}
|