FluidVoice Voice Options and Customization: A Complete Guide to Engine Selection and Personalization
FluidVoice offers multiple voice engine choices including Parakeet TDT, Whisper, and Apple Speech, plus deep customization through custom dictionaries and voice-matching profiles.
The open-source FluidVoice project provides a flexible, user-configurable speech recognition architecture. Whether you need offline transcription, specialized vocabulary, or personalized voice recognition, the codebase exposes these capabilities through well-structured SwiftUI components and view models.
Voice Engine Selection in FluidVoice
FluidVoice does not lock users into a single speech recognition backend. The application supports pluggable voice engines that users can switch between based on accuracy needs, privacy preferences, or network constraints.
Available Voice Engines
According to the source code in Sources/Fluid/UI/AISettingsView+SpeechRecognition.swift, FluidVoice currently supports three primary engines:
- Parakeet TDT – A research-preview model with advanced voice-matching capabilities
- Whisper – OpenAI's robust open-source speech recognition
- Apple Speech – Native on-device transcription using Apple's Speech framework
Selecting Your Voice Engine During Onboarding
The onboarding flow presents voice engine selection as a core setup step. In Sources/Fluid/UI/WelcomeView.swift at line 701, the voiceModel case drives the "Choose your voice engine" screen. This selection persists through VoiceEngineSettingsViewModel, ensuring your preference remains active across sessions.
// Inside AISettingsView.swift
Picker("Voice Engine", selection: $settings.voiceEngine) {
Text("Parakeet TDT").tag(VoiceEngine.parakeet)
Text("Whisper").tag(VoiceEngine.whisper)
Text("Apple Speech").tag(VoiceEngine.apple)
}
The AISettingsView+SpeechRecognition.swift file (line 53) renders engine-specific details including title, description, and status indicators with appropriate foreground colors for each option.
Custom Dictionary for Domain-Specific Vocabulary
FluidVoice addresses a common speech recognition limitation: uncommon terminology, product names, and proper nouns. The Custom Dictionary feature lets users teach the engine their specialized vocabulary.
Adding Custom Entries
The implementation in Sources/Fluid/UI/CustomDictionaryView.swift at line 337 provides the UI for dictionary management. Users can type or speak new entries, which are stored in the app's dictionary and applied during transcription.
// Using the FluidVoice API
let entry = DictionaryTransferReplacement(
from: ["myproduct"], // spoken trigger
to: "MyProduct™" // desired transcription
)
ASRService.applyCustomDictionary(entry)
This DictionaryTransferReplacement struct maps spoken phrases to desired output, enabling precise control over transcription results.
Voice-Matching and Speaker Profiles
Beyond vocabulary customization, FluidVoice supports voice-matching profiles that adapt recognition to a specific speaker's timbre and cadence.
Training Your Voice Profile
The onboarding flow includes a "Teach Words" step implemented in Sources/Fluid/UI/CustomDictionaryView.swift at line 2770. This captures repetitions of a word to create an engine-specific profile.
// Triggered from the "Teach Words" UI
voiceEngine.trainProfile(
phrase: "FluidVoice",
repetitions: 3,
completion: { result in
switch result {
case .success(let profile):
print("Profile saved: \(profile.id)")
case .failure(let error):
print("Training failed: \(error)")
}
}
)
The trainProfile(phrase:repetitions:completion:) method accepts a target phrase, required repetition count, and completion handler for success or failure cases.
Advanced Voice Engine Settings
Power users can access experimental features through the settings interface. In Sources/Fluid/UI/CustomDictionaryView.swift at line 2555, the "Advanced voice matching" section exposes toggles like "Research Preview" for Parakeet TDT.
These settings are engine-specific and allow early access to models that may offer improved accuracy at the cost of resource usage or stability.
Architecture Overview
The voice customization system relies on several coordinated components:
| Component | Responsibility | Key File |
|---|---|---|
| AIProvider | Abstracts backend calls to selected speech engine | Sources/Fluid/Networking/AIProvider.swift |
| VoiceEngineSettingsViewModel | Persists user engine selection | Referenced in WelcomeView.swift |
| ASRService | Applies dictionary entries and manages profiles | Referenced in API examples |
This separation ensures that UI changes in AISettingsView.swift propagate correctly to the active transcription backend without coupling interface code to implementation details.
Summary
- FluidVoice supports three voice engines: Parakeet TDT, Whisper, and Apple Speech, selectable during onboarding or in settings
- Custom dictionary entries allow precise control over transcription of specialized terminology via
DictionaryTransferReplacement - Voice-matching profiles capture speaker characteristics through the
trainProfile()method for improved personal recognition - Advanced toggles expose experimental engine capabilities for users who need cutting-edge accuracy
Frequently Asked Questions
Can I switch voice engines after completing setup?
Yes. While the initial selection appears during onboarding in WelcomeView.swift, you can change engines at any time through AI Settings. The AISettingsView+SpeechRecognition.swift file renders the engine picker with live status indicators for each option.
Does voice training data sync across devices?
The source analysis does not indicate cloud synchronization for voice profiles. The VoiceEngineSettingsViewModel handles persistence, but profile storage appears device-local based on the implementation in CustomDictionaryView.swift.
How many custom dictionary entries can I add?
The codebase does not enforce a documented limit in the analyzed files. The ASRService.applyCustomDictionary() method processes entries individually, suggesting the constraint would depend on memory and performance characteristics rather than an arbitrary cap.
Is the Parakeet TDT engine fully released?
No. The "Research Preview" label in CustomDictionaryView.swift at line 2555 indicates this remains an experimental option. The toggle appears under "Advanced voice matching," signaling it may have stability or resource usage trade-offs compared to production engines like Whisper or Apple Speech.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →