diff --git a/server/api/learn/state.put.ts b/server/api/learn/state.put.ts index 3927181..7223ef7 100644 --- a/server/api/learn/state.put.ts +++ b/server/api/learn/state.put.ts @@ -64,6 +64,11 @@ function sanitizeConfig(input: Partial | undefined): LearnConfig | config.radioLevel = Math.min(5, Math.max(1, level)) } + if (typeof input.audioSpeed === 'number' && Number.isFinite(input.audioSpeed)) { + const rounded = Math.round(input.audioSpeed * 10) / 10 + config.audioSpeed = Math.min(1.3, Math.max(0.7, rounded)) + } + if (typeof input.voice === 'string') { config.voice = input.voice.slice(0, 120) } diff --git a/server/models/LearnProfile.ts b/server/models/LearnProfile.ts index 3c60165..22c9154 100644 --- a/server/models/LearnProfile.ts +++ b/server/models/LearnProfile.ts @@ -20,6 +20,7 @@ const learnProfileSchema = new mongoose.Schema( radioLevel: { type: Number, default: 4, min: 1, max: 5 }, voice: { type: String, default: '', trim: true }, audioChallenge: { type: Boolean, default: false }, + audioSpeed: { type: Number, default: 1, min: 0.5, max: 2 }, }, }, { diff --git a/shared/learn/config.ts b/shared/learn/config.ts index c924e8b..cf445cc 100644 --- a/shared/learn/config.ts +++ b/shared/learn/config.ts @@ -10,6 +10,7 @@ export interface LearnConfig { radioLevel: number voice: string audioChallenge: boolean + audioSpeed: number } export interface LearnState { @@ -23,6 +24,7 @@ export const LEARN_CONFIG_DEFAULTS: LearnConfig = { radioLevel: 4, voice: '', audioChallenge: false, + audioSpeed: 1, } export function createDefaultLearnConfig(): LearnConfig {