@novo-learning/novo-sdk
Version:
SDK for the Novolanguage Speech Analysis API
104 lines (92 loc) • 2.43 kB
text/typescript
import { PhoneCorrectness, PhraseCorrectness, WordCorrectness } from './correctness';
import { PhoneDuration } from './exercises';
import { LanguageCode } from './language-code';
import { Prosody } from './prosody';
export class ExerciseResult {
confidence?: Confidence;
match?: boolean; // did the audio match the prompt?
correct?: boolean;
score?: Score;
phrase?: string;
recognized?: WordRecognition[];
phrases?: PhraseRecognition[];
// alignment?: AlignmentEntry[]; // Future work: determine which words have not been uttered / incorrectly uttered / inserted
attempt?: {
id?: string;
audioKey?: string;
};
speechDetected?: boolean;
exerciseId?: string;
respondedAt: Date;
correctness?: PhraseCorrectness;
language?: LanguageCode;
}
export class Confidence {
llr: number;
prob: number;
}
export class Score {
accuracy?: number;
fluency?: number;
velocity?: number;
}
export class WordFeature {
id: string;
categoryId?: string;
correct: boolean;
letters?: { letter: string; part: boolean }[];
}
export class WordRecognition {
timing?: Timing;
word: string;
letterAlignment?: { letter: string; phones: string[]; correct: boolean; phoneAlignment?: AlignmentEntry[] }[];
wordFeatures?: WordFeature[];
promptToken?: string;
correct?: boolean;
correctness?: WordCorrectness;
confidence?: Confidence;
score?: Score;
phones?: PhoneRecognition[];
liaisonPhone?: PhoneRecognition;
closestCorrectPronunciation?: { phones: TargetPhone[] };
alignment?: AlignmentEntry[];
prosody?: Prosody;
}
export class PhraseRecognition {
timing?: Timing;
phrase: string;
correct?: boolean;
correctness?: PhraseCorrectness;
words: WordRecognition[];
}
export class Timing {
begin: number;
end: number;
}
export class PhoneRecognition {
timing?: Timing;
target?: TargetPhone;
recognized: AsrRecognizedPhone;
correct?: boolean;
correctness?: PhoneCorrectness;
}
export class DurationProbabilities {
[PhoneDuration.short]?: number;
[PhoneDuration.normal]?: number;
[PhoneDuration.long]?: number;
[PhoneDuration.superlong]?: number;
}
export class AsrRecognizedPhone {
phone: string;
confidence?: Confidence;
duration?: DurationProbabilities;
}
export class TargetPhone {
phone: string;
confidence?: Confidence;
duration?: Array<PhoneDuration>;
}
export class AlignmentEntry {
deleted?: string;
inserted?: string;
}