Syncfusion aspnetmvc speech to text
Skill syncfusion/aspnetmvc-ui-components-skills/skills/syncfusion-aspnetmvc-speech-to-text
This repository contains AI Skills of ASPNET MVC UI Components.
npx -y skills add syncfusion/aspnetmvc-ui-components-skills --skill syncfusion-aspnetmvc-speech-to-textAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
3 things to look at
- 22 days oldThe repository was created 22 days ago. New is not bad, but a brand new repository carrying a familiar-sounding name is the shape a typosquat arrives in, and there has been no time for anyone else to find a problem with it.
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Implement Syncfusion Speech To Text control in ASP.NET MVC applications using HTML Helpers. ALWAYS use this skill when the user needs ASP.NET MVC speech recognition, voice input, Web Speech API integration, speech-to-text transcription, or help with the Speech To Text control (@Html.EJS().SpeechToText()). Covers installation, HTML helper setup, speech recognition, customization, events, error handling, and accessibility patterns specific to ASP.NET MVC.
The file declares its own license as SEE LICENSE IN license. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.
SKILL.md
14.1 KB, ~3.1k tokens by cl100k_base, as published. Nobody here has run it
Speech To Text Control - ASP.NET MVC
A comprehensive guide for implementing the Syncfusion Speech To Text control in ASP.NET MVC applications using HTML Helpers. This control leverages the Web Speech API to convert spoken words into text with full customization and event handling capabilities.
When to Use This Skill
Use this skill when the user needs to:
- Implement Speech To Text in ASP.NET MVC applications
- Set up Web Speech API integration using HTML Helpers
- Capture voice input and convert to text programmatically
- Customize button and tooltip appearance using helper methods
- Handle speech recognition events (start, stop, error, result)
- Add multi-language support with localization
- Troubleshoot microphone permissions and browser compatibility
- Ensure accessibility with screen reader support
Trigger Keywords: ASP.NET MVC speech to text, voice input, Web Speech API MVC, speech recognition, @Html.EJS().SpeechToText(), microphone input
Component Overview
The Speech To Text control provides:
- Voice Input Capture - Browser microphone integration via Web Speech API
- Real-time Transcription - Live transcript updates during speaking
- Customizable Button - Content, icons, and tooltip settings
- Event Binding - Start, stop, error, and transcript change handlers
- Error Handling - Network, permission, and browser compatibility errors
- Localization Support - Multi-language and RTL support
- Accessibility - WCAG 2.1 compliant with ARIA labels
- Browser Compatibility - Chrome, Edge, Safari, and Firefox support
Key Features
Web Speech API Integration
┌─────────────────────────────────────────┐
│ User Speaks to Microphone │
└────────────────┬────────────────────────┘
│
▼
┌─────────────────────┐
│ Web Speech API │
│ Speech Recognition │
└────────┬────────────┘
│
▼
┌────────────────────────────┐
│ Real-time Transcript │
│ Updated in Component │
└────────────────────────────┘
Architecture for ASP.NET MVC
HTML Helper Pattern
@Html.EJS().SpeechToText("id")
.Locale("locale")
.Lang("language-code")
.ButtonSettings(bs => bs
.Content("Start Recording")
.IconCss("e-icons e-microphone")
)
.TooltipSettings(ts => ts
.Position(Syncfusion.EJ2.Popups.TooltipPosition.TopCenter)
.Content("Click to start voice input")
)
.Render()
Controller Integration Pattern
public class HomeController : Controller
{
[HttpPost]
public ActionResult ProcessVoiceInput(string transcript)
{
// Process the voice transcript
var result = ProcessText(transcript);
return Json(new { success = true, data = result });
}
}
Navigation
Getting Started
📄 Read: references/getting-started.md
- Installing NuGet package
- Registering Syncfusion in Web.config
- HTML helper setup with @Html.EJS()
- License configuration
- CDN references
- First component example
Speech Recognition Features
📄 Read: references/speech-recognition-features.md
- Starting and stopping speech recognition
- Real-time transcript handling
- Language detection and switching
- Interim results and confidence scores
- Microphone activation
Button and Tooltip Customization
📄 Read: references/button-and-tooltip-customization.md
- ButtonSettings with HTML helper fluent API
- Custom button content and icons
- Tooltip positioning and styling
- Responsive button layout
- Icon customization
Events and Methods
📄 Read: references/events-and-methods.md
- Binding events via HTML helpers
- OnStart, OnStop event handlers
- OnError event handling
- TranscriptChanged event
- Programmatic component access
- Method calls and workflows
Globalization and Localization
📄 Read: references/globalization-and-localization.md
- Multi-language support via L10n.load()
- Language switching patterns
- RTL (Right-to-Left) implementation
- Accessibility labels for screen readers
- Regional culture support
Troubleshooting and Security
📄 Read: references/troubleshooting-and-security.md
- Common setup issues
- Browser compatibility checking
- Microphone permission handling
- HTTPS requirements
- Security best practices
- Input sanitization
- Error logging patterns
Quick Start Example
1. Create View with Speech To Text
@using Syncfusion.EJ2
@{
ViewBag.Title = "Speech To Text Demo";
}
<h2>Voice Input Form</h2>
<div style="padding: 20px;">
<!-- Speech To Text Control -->
@Html.EJS().SpeechToText("voiceInput")
.ButtonSettings(bs => bs
.Content("Start Recording")
.IconCss("e-icons e-microphone")
)
.TranscriptChanged("onTranscriptChanged")
.OnError("onError")
.Render()
<!-- Display transcribed text -->
<div style="marginTop: 20px;">
<label>Transcript:</label>
<textarea id="transcript" rows="4" cols="50" readonly></textarea>
</div>
</div>
<script>
function onTranscriptChanged(args) {
document.getElementById("transcript").value = args.transcript;
}
function onError(args) {
alert("Error: " + args.error);
}
</script>
2. Controller Setup
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
}
3. Register in Web.config
<!-- In Views/Web.config -->
<configuration>
<appSettings>
<add key="SyncfusionLicense" value="YOUR_LICENSE_KEY" />
</appSettings>
</configuration>
Common Use Cases
Use Case 1: Form with Voice Input
@using Syncfusion.EJ2
@using (Html.BeginForm("SubmitForm", "Home", FormMethod.Post))
{
<h3>Contact Form - Voice Input Support</h3>
<!-- Name field -->
<div>
<label>Name (Voice or Text):</label>
@Html.EJS().TextBox("name")
.Placeholder("Enter or speak your name")
.Render()
@Html.EJS().SpeechToText("nameVoice")
.ButtonSettings(bs => bs.Content("🎤 Name"))
.Render()
</div>
<!-- Message field -->
<div>
<label>Message (Voice Input):</label>
@Html.EJS().TextArea("message")
.Rows(4)
.Render()
@Html.EJS().SpeechToText("messageVoice")
.ButtonSettings(bs => bs.Content("🎤 Message"))
.TranscriptChanged("appendToMessage")
.Render()
</div>
<!-- Submit button -->
@Html.EJS().Button("submit")
.Content("Submit")
.Type("submit")
.Render()
}
<script>
function appendToMessage(args) {
var textarea = document.getElementById("message");
textarea.value += args.transcript + " ";
}
</script>
Use Case 2: Real-time Search
@using Syncfusion.EJ2
<div>
<h3>Voice Search</h3>
<!-- Speech input -->
@Html.EJS().SpeechToText("voiceSearch")
.ButtonSettings(bs => bs
.Content("Search by Voice")
.IconCss("e-icons e-search")
)
.TranscriptChanged("performSearch")
.Render()
<!-- Search results -->
<div id="results" style="marginTop: 20px;"></div>
</div>
<script>
function performSearch(args) {
fetch('/api/search?q=' + args.transcript)
.then(r => r.json())
.then(data => {
document.getElementById("results").innerHTML =
data.map(item => '<p>' + item.name + '</p>').join('');
});
}
</script>
Use Case 3: Accessibility-Focused Form
@using Syncfusion.EJ2
<div role="form" aria-label="Accessible Voice Input Form">
<h2>Accessible Form</h2>
<!-- Voice input with accessibility -->
@Html.EJS().SpeechToText("accessibleVoice")
.ButtonSettings(bs => bs
.Content("Activate Voice Input")
.CssClass("sr-only-label")
)
.Created("setAccessibilityLabels")
.Render()
<!-- Live region for screen readers -->
<div aria-live="polite" id="voiceStatus" role="status"></div>
</div>
<script>
function setAccessibilityLabels() {
var component = ej.base.getComponent(
document.getElementById("accessibleVoice"),
"speechtotext"
);
// Update ARIA labels
component.startAriaLabel = "Activate voice input. Press to start recording your message.";
component.stopAriaLabel = "Deactivate voice input. Press to stop recording.";
}
</script>
API Reference Summary
HTML Helper Methods
| Method | Type | Description |
|---|---|---|
.SpeechToText(id) | Primary | Initialize Speech To Text control |
.Locale(locale) | Property | Set UI language (e.g., "en", "de", "fr") |
.Lang(language) | Property | Set speech recognition language |
.ButtonSettings(bs => bs...) | Fluent | Customize button appearance |
.TooltipSettings(ts => ts...) | Fluent | Customize tooltip |
.TranscriptChanged(handler) | Event | Handle transcript change |
.OnError(handler) | Event | Handle errors |
.OnStart(handler) | Event | Handle start listening |
.OnStop(handler) | Event | Handle stop listening |
Component Properties
| Property | Type | Default | Description |
|---|---|---|---|
lang | string | "en-US" | Speech recognition language |
locale | string | "en" | UI language |
allowInterimResults | boolean | true | Show interim results while speaking |
listeningState | boolean | false | Current listening state |
transcript | string | "" | Current transcript |
continuousMode | boolean | false | Continuous recognition mode |
Component Methods
| Method | Returns | Description |
|---|---|---|
startListening() | void | Start speech recognition |
stopListening() | void | Stop speech recognition |
abort() | void | Cancel current recognition |
Component Events
| Event | Args | Description |
|---|---|---|
onStart | - | Fired when recognition starts |
onStop | - | Fired when recognition stops |
onError | { error } | Fired on error |
transcriptChanged | { transcript, isFinal } | Fired when transcript updates |
created | - | Fired after component creation |
Best Practices
- Always check browser support before initializing
- Request microphone permission explicitly
- Handle errors gracefully with user-friendly messages
- Sanitize voice input before processing
- Provide visual feedback during recording
- Test with accessibility tools (screen readers)
- Support multiple languages with locale switching
- Implement fallback UI for unsupported browsers
Browser Support Matrix
| Browser | Web Speech API | Status |
|---|---|---|
| Chrome 25+ | ✅ | Full support |
| Edge 12+ | ✅ | Full support |
| Safari 14.1+ | ✅ | Full support |
| Firefox 25+ | ⚠️ | Limited (requires flag) |
| Opera 27+ | ✅ | Full support |
| IE 11 | ❌ | Not supported |
Common Patterns
Pattern: Language Detection
@Html.EJS().SpeechToText("voiceInput")
.Lang("@(Request.UserLanguages?.FirstOrDefault() ?? "en-US")")
.Render()
Pattern: Loading State
@Html.EJS().SpeechToText("voice")
.OnStart("showLoading")
.OnStop("hideLoading")
.Render()
<script>
function showLoading() {
document.getElementById("loading").style.display = 'block';
}
function hideLoading() {
document.getElementById("loading").style.display = 'none';
}
</script>
Pattern: Copy to Clipboard
@Html.EJS().SpeechToText("voice")
.Created("addCopyButton")
.Render()
<script>
function addCopyButton() {
var btn = document.createElement('button');
btn.textContent = 'Copy Transcript';
btn.onclick = () => {
var component = ej.base.getComponent(
document.getElementById("voice"),
"speechtotext"
);
navigator.clipboard.writeText(component.transcript);
};
document.body.appendChild(btn);
}
</script>
Next Steps
- Choose your use case from Common Use Cases above
- Read the relevant reference from Navigation section
- Copy a code example and adapt to your needs
- Test with multiple browsers for compatibility
- Check troubleshooting guide if issues occur
Support Resources
What ships with it: 6 files
86.7 KB alongside SKILL.md
references/
- button-and-tooltip-customization.md16.6 KB
- events-and-methods.md16.3 KB
- getting-started.md11.7 KB
- globalization-and-localization.md12.9 KB
- speech-recognition-features.md15.1 KB
- troubleshooting-and-security.md14.2 KB
Gives 1 of the 12 instructions most video audio skills give in ~3.1k tokens
Counted across 622 of the 795 authors here whose files we hold, read 2026-08-07
- Read individual rule files for detailed explanationsin 21 of 622, across 10 files
- Render final videoin 13 of 622, across 6 files
- Use WAV PCM 16kHz mono audio formatin 12 of 622, across 3 files
- Use this skill when dealing with Remotion codein 11 of 622, across 4 files
- Save generated audio to a WAV filein 11 of 622, across 4 files
- Handle conversion errors gracefullyhere, and in 10 of 622, across 6 files
- Add captions to videos alwaysin 10 of 622, across 4 files
- Generate music from text descriptions using MusicGenin 9 of 622, across 2 files
- Do not skip pipeline layersin 9 of 622, across 3 files
- Do not make one tool do everythingin 9 of 622, across 3 files
- Use Azure Document Intelligence for complex PDFsin 9 of 622, across 4 files
- Never ask the user to paste their full API keyin 9 of 622, across 3 files
Said here and by no other author read
- register syncfusion license
- initialize control using html helper
- request microphone permission explicitly
- provide visual feedback during recording
- sanitize voice input before processing
- implement fallback ui for unsupported browsers
Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.