Execute Speak secondary workflow: Pronunciation Training with detailed phoneme analysis.
Use when implementing pronunciation drills, speech scoring,
or targeted pronunciation improvement features.
Trigger with phrases like "speak pronunciation training",
"speak speech scoring", "secondary speak workflow".
Installer avec Codex ou Claude Copiez ce prompt, collez-le dans Codex, Claude ou un autre assistant, puis laissez-le vérifier la page du skill et l'installer pour vous.
Une commande directe contourne le prompt de vérification. Examinez la source avant de l'exécuter.
Execute Speak secondary workflow: Pronunciation Training with detailed phoneme analysis.
Use when implementing pronunciation drills, speech scoring,
or targeted pronunciation improvement features.
Trigger with phrases like "speak pronunciation training",
"speak speech scoring", "secondary speak workflow".
allowed-tools
Read, Write, Edit, Bash(npm:*), Grep
version
1.0.0
license
MIT
author
Jeremy Longshore <jeremy@intentsolutions.io>
Speak Core Workflow B: Pronunciation Training
Overview
Secondary workflow for Speak: Detailed pronunciation training with phoneme-level analysis and targeted practice.
Prerequisites
Completed speak-install-auth setup
Familiarity with speak-core-workflow-a
Valid API credentials configured
High-quality audio input capabilities
Instructions
Step 1: Initialize Pronunciation Session
// src/workflows/pronunciation-training.tsimport {
SpeakClient,
PronunciationTrainer,
PhonemeAnalyzer,
} from'@speak/language-sdk';
interfacePronunciationConfig {
targetLanguage: string;
difficulty: 'beginner' | 'intermediate' | 'advanced';
focusPhonemes?: string[]; // Specific sounds to practicecategory?: 'vowels' | 'consonants' | 'tones' | 'all';
}
asyncfunctioninitializePronunciationTraining(client: SpeakClient,
config: PronunciationConfig): Promise<PronunciationTrainer> {
const trainer = newPronunciationTrainer(client, {
language: config.targetLanguage,
difficulty: config.difficulty,
adaptiveMode: true, // Adjusts based on user performance
});
// Pre-load phoneme models for target languageawait trainer.initialize();
// Set focus areas if specifiedif (config.focusPhonemes) {
trainer.setFocusPhonemes(config.focusPhonemes);
}
return trainer;
}
Step 2: Implement Drill Session
interfaceDrillItem {
id: string;
text: string;
romanization?: string; // For non-Latin scriptstranslation: string;
audioUrl: string;
targetPhonemes: string[];
difficulty: number;
}
interfaceDrillResult {
item: DrillItem;
userAudio: ArrayBuffer;
scores: PronunciationScores;
phonemeDetails: PhonemeResult[];
feedback: string[];
}
asyncfunctionrunPronunciationDrill(trainer: PronunciationTrainer,
drillCount: number = 10): Promise<DrillSession> {
const session = await trainer.startDrillSession({
itemCount: drillCount,
repeatOnMistake: true,
minScore: 70, // Repeat until 70% or better
});
constresults: DrillResult[] = [];
while (!session.isComplete) {
// Get next drill itemconst item = await session.getNextItem();
console.log('\n--- Pronunciation Drill ---');
console.log(`Say: "${item.text}"`);
if (item.romanization) {
console.log(`Romanization: ${item.romanization}`);
}
console.log(`Meaning: ${item.translation}`);
console.log('Listen to native pronunciation...');
// Play native audio for referenceawaitplayAudio(item.audioUrl);
// Record user attemptconst userAudio = awaitrecordUserAudio();
// Analyze pronunciationconst result = await session.submitAttempt({
itemId: item.id,
audioData: userAudio,
});
results.push({
item,
userAudio,
scores: result.scores,
phonemeDetails: result.phonemeDetails,
feedback: result.feedback,
});
// Display detailed feedbackdisplayPronunciationFeedback(result);
// Check if need to repeatif (result.scores.overall < 70 && session.shouldRepeat) {
console.log('\nLet\'s try that one again...');
}
}
return session.getSummary();
}