syncfusion-aspnetcore-speech-to-text
Syncfusion ASP.NET Core SpeechToText Control
Overview
The SpeechToText control enables users to convert spoken words into text using the Web Speech API in ASP.NET Core applications. This skill helps you implement, customize, and troubleshoot speech recognition using Razor Tag Helpers.
The main Razor Tag Helper that captures audio and converts speech to text in real-time using browser APIs.
Key Features:
- Real-time speech recognition via Web Speech API
- Multiple language support
- Customizable button and tooltip via tag helper attributes
- Event-driven architecture
- Programmatic control via JavaScript methods
- Accessibility support (ARIA labels, keyboard navigation)
- Localization support
- Error handling and recovery
- ASP.NET Core binding
Documentation
Getting Started
📄 Read: references/getting-started.md
- Installation via NuGet
- ASP.NET Core project setup
- Razor Tag Helper registration
- Basic control implementation
- CSS imports and theme selection
- First working example
- Script manager configuration
Speech Recognition Features
📄 Read: references/speech-recognition-features.md
- Retrieving transcripts in real-time
- Setting language for recognition
- Managing interim results
- Listening state management
- Handling speech-to-text conversion
- Real-time vs final results
- Multi-language support
Button and Tooltip Customization
📄 Read: references/button-and-tooltip-customization.md
- Button customization via tag helper attributes
- Icon customization using CSS classes
- Icon positioning
- Tooltip configuration
- Primary button styling
- CSS class styling (e-primary, e-success, etc.)
- Responsive design
Events and Methods
📄 Read: references/events-and-methods.md
- Event binding in Razor (onStart, onStop, onError, transcriptChanged)
- Event handling in script tag
- Error types and error handling
- startListening() and stopListening() methods
- Programmatic control via JavaScript
- Getting component instance with ej.base.getComponent()
- Event workflows and patterns
Globalization and Localization
📄 Read: references/globalization-and-localization.md
- Localization with L10n.load()
- Available locale strings
- Language-specific error messages
- RTL support via enableRtl attribute
- Accessibility labels and ARIA attributes
- Multi-language interface examples
Troubleshooting and Security
📄 Read: references/troubleshooting-and-security.md
- Common issues and solutions
- Browser compatibility matrix
- Microphone permission handling
- Security considerations for ASP.NET Core
- Privacy and data transmission
- Performance optimization
- Offline fallback strategies
Quick Start Example
@using Syncfusion.EJ2.Inputs
<div id='speechtotext-container'>
<ejs-speechtotext id="speech-to-text" transcriptChanged="onTranscriptChanged"></ejs-speechtotext>
<ejs-textarea id="output-textarea" rows="5" cols="50" value="" resizeMode="None" placeholder="Transcribed text will be shown here..."></ejs-textarea>
</div>
<script>
function onTranscriptChanged(args) {
var textareaObj = ej.base.getComponent(document.getElementById("output-textarea"), "textarea");
textareaObj.value = args.transcript;
}
</script>
<style>
#speechtotext-container {
gap: 20px;
display: flex;
flex-direction: column;
align-items: center;
}
</style>
Common Patterns
Pattern 1: Voice Form with Multiple Fields
@using Syncfusion.EJ2.Inputs
<div class="form-group">
<label>Name (speak):</label>
<ejs-speechtotext id="name-voice" transcriptChanged="onNameTranscript"></ejs-speechtotext>
<ejs-textbox id="name-field"></ejs-textbox>
</div>
<div class="form-group">
<label>Message (speak):</label>
<ejs-speechtotext id="message-voice" transcriptChanged="onMessageTranscript"></ejs-speechtotext>
<ejs-textarea id="message-field" rows="4"></ejs-textarea>
</div>
<script>
function onNameTranscript(args) {
var nameField = ej.base.getComponent(document.getElementById("name-field"), "textbox");
nameField.value = args.transcript;
}
function onMessageTranscript(args) {
var messageField = ej.base.getComponent(document.getElementById("message-field"), "textarea");
messageField.value = args.transcript;
}
</script>
Pattern 2: Programmatic Control
@using Syncfusion.EJ2.Inputs
<ejs-speechtotext id="speech-control"></ejs-speechtotext>
<div>
<button onclick="startVoiceInput()">Start Recording</button>
<button onclick="stopVoiceInput()">Stop Recording</button>
</div>
<script>
function startVoiceInput() {
var speechComponent = ej.base.getComponent(
document.getElementById("speech-control"),
"speechtotext"
);
speechComponent.startListening();
}
function stopVoiceInput() {
var speechComponent = ej.base.getComponent(
document.getElementById("speech-control"),
"speechtotext"
);
speechComponent.stopListening();
}
</script>
Pattern 3: Error Handling
@using Syncfusion.EJ2.Inputs
<ejs-speechtotext id="error-speech"
onError="handleError"
onStart="handleStart"
onStop="handleStop">
</ejs-speechtotext>
<div id="error-message" style="display:none; color: red; padding: 10px;"></div>
<script>
function handleError(args) {
var errorDiv = document.getElementById("error-message");
errorDiv.style.display = "block";
var errorMessages = {
'no-speech': '🔇 No speech detected. Please try again.',
'audio-capture': '🎙️ Microphone not found.',
'not-allowed': '🔒 Microphone permission denied.',
'network': '🌐 Network error occurred.'
};
errorDiv.textContent = errorMessages[args.error] || 'Error: ' + args.error;
setTimeout(() => { errorDiv.style.display = "none"; }, 5000);
}
function handleStart() {
console.log('🎤 Listening started');
}
function handleStop() {
console.log('⏹️ Listening stopped');
}
</script>
Key Properties
| Property | Type | Description |
|---|---|---|
lang |
string | Language code (e.g., 'en-US', 'fr-FR') |
transcript |
string | Current transcribed text |
allowInterimResults |
boolean | Show real-time results (default: true) |
listeningState |
enum | Current state (Inactive, Listening, Stopped) |
cssClass |
string | CSS classes (e-primary, e-success, etc.) |
enableRtl |
boolean | Enable right-to-left layout |
locale |
string | Localization language code |
Tag Helper Attributes
<ejs-speechtotext
id="speechId"
lang="en-US"
allowInterimResults="true"
cssClass="e-primary"
enableRtl="false"
locale="en-US"
transcriptChanged="onTranscriptChanged"
onStart="onStartListening"
onStop="onStopListening"
onError="onError"
created="onCreated">
<e-speechtotext-buttonSettings
content="Start Listening"
stopContent="Stop Listening"
iconCss="e-icons e-play"
stopIconCss="e-icons e-pause"
iconPosition="Right"
isPrimary="true">
</e-speechtotext-buttonSettings>
<e-speechtotext-tooltipSettings
position="TopCenter"
content="Click to start"
stopContent="Click to stop">
</e-speechtotext-tooltipSettings>
</ejs-speechtotext>
Event Handlers
| Event | Args | Description |
|---|---|---|
created |
- | Fired when control is initialized |
onStart |
StartListeningEventArgs | Fired when listening begins |
onStop |
StopListeningEventArgs | Fired when listening ends |
onError |
ErrorEventArgs | Fired when error occurs |
transcriptChanged |
TranscriptChangedEventArgs | Fired when transcript updates |
Methods
| Method | Description |
|---|---|
startListening() |
Begin speech recognition |
stopListening() |
Stop speech recognition |
Troubleshooting
Control not rendering
Solution: Check that <ejs-scripts></ejs-scripts> is in layout and CSS is imported
Events not firing
Solution: Verify event handlers are valid JavaScript functions in global scope
Microphone permission denied
Solution: Allow microphone access in browser settings
Speech not recognized
Solution: Check microphone volume, speak clearly, verify language setting
More from syncfusion/aspnetcore-ui-components-skills
syncfusion-aspnetcore-charts
Implements Syncfusion ASP.NET Core Chart (SfChart) for data visualization. Use this when building charts, visualizing time-series or categorical data, or creating dashboards. Covers series configuration (line, bar, pie), axes, tooltips, legends, and customization for ASP.NET Core applications.
11syncfusion-aspnetcore-textbox
Complete guide to implementing the Syncfusion TextBox component in ASP.NET Core applications with tag helpers, validation, floating labels, and adornments for building accessible input forms.
11syncfusion-aspnetcore-list-box
Implement and configure Syncfusion ASP.NET Core ListBox component with selection controls. Use this when building selection interfaces with single/multiple modes, data binding, or advanced features. Covers ListBox implementation, selection state management, appearance customization, and user interaction handling.
10syncfusion-aspnetcore-common
**CONFIGURATION GUIDE** — Assist with Syncfusion ASP.NET Core EJ2 components setup, localization, and version compatibility. Use when: installing Syncfusion packages, configuring globalization/localization, selecting compatible versions.
10syncfusion-aspnetcore-rich-text-editor
Implements the Syncfusion ASP.NET Core Rich Text Editor (ejs-richtexteditor tag helper) supporting HTML (WYSIWYG) and Markdown editing modes. Set editorMode='Markdown' for Markdown; default is HTML. Use this skill for toolbar configuration, image upload, table editing, inline or iframe mode, AI assistant integration, mentions, and form validation with rich text in ASP.NET Core projects.
10syncfusion-aspnetcore-theme
**THEMING & APPEARANCE GUIDE** — Assist with Syncfusion ASP.NET Core EJ2 component theming, customization, size modes, and dynamic theme switching. Use when: applying themes (Bootstrap, Material, Tailwind, Fluent, etc.), customizing theme variables, implementing theme switchers, enabling touch mode, or customizing icons and appearance.
10