SubtitleEdit/subtitleedit · error · PlatformNotSupportedException
Process.Start() is not supported on this platform.
Error message
Process.Start() is not supported on this platform.
What it means
PlatformNotSupportedException thrown during OmniVoiceTtsCpp.ImportVoice when the source voice file is not already a .wav and the code falls into the ffmpeg conversion branch. Process.Start() is only called on Windows, Linux, or macOS; any other platform (e.g., FreeBSD, a custom OS) hits this throw.
Source
Thrown at src/ui/Features/Video/TextToSpeech/Engines/OmniVoiceTtsCpp.cs:448
var voicesFolder = GetSetVoicesFolder();
var baseName = Path.GetFileNameWithoutExtension(fileName);
var destinationFileName = GetUniqueDestinationFileName(voicesFolder, baseName, ".wav");
if (Path.GetExtension(fileName).Equals(".wav", StringComparison.OrdinalIgnoreCase))
{
File.Copy(fileName, destinationFileName, overwrite: false);
}
else
{
var process = FfmpegGenerator.ConvertFormat(fileName, destinationFileName);
if (OperatingSystem.IsWindows() || OperatingSystem.IsLinux() || OperatingSystem.IsMacOS())
{
_ = process.Start();
}
else
{
throw new PlatformNotSupportedException("Process.Start() is not supported on this platform.");
}
process.WaitForExit();
}
// Pair the imported WAV with a sibling .txt holding the transcript. Without it
// omnivoice-tts will reject --ref-wav.
var destTextFile = Path.ChangeExtension(destinationFileName, ".txt");
if (!string.IsNullOrWhiteSpace(transcript))
{
File.WriteAllText(destTextFile, transcript);
}
else
{
var sourceTextFile = Path.ChangeExtension(fileName, ".txt");
if (File.Exists(sourceTextFile) && !File.Exists(destTextFile))
{
File.Copy(sourceTextFile, destTextFile, overwrite: false);
}View on GitHub (pinned to 17a9f07487)
Solutions
- Pre-convert the voice file to WAV (24 kHz mono) using an external tool before importing, so the ffmpeg branch is not hit.
- If the platform genuinely needs to be supported, implement an alternative audio conversion path (e.g., an in-process library like NAudio or FFmpeg.AutoGen without Process.Start).
- Gate the engine selection in the UI so it is not offered on unsupported platforms.
- On iOS (which IS supported for Piper but not here), extend the OS check if ffmpeg is bundled.
Example fix
// before — only Win/Linux/Mac can convert
if (OperatingSystem.IsWindows() || OperatingSystem.IsLinux() || OperatingSystem.IsMacOS())
_ = process.Start();
else
throw new PlatformNotSupportedException("Process.Start() is not supported on this platform.");
// after — require a pre-converted WAV on unsupported platforms
if (OperatingSystem.IsWindows() || OperatingSystem.IsLinux() || OperatingSystem.IsMacOS())
{
_ = process.Start();
}
else
{
throw new PlatformNotSupportedException(
"Voice import on this platform requires a pre-converted 24 kHz mono WAV file.");
} Defensive patterns
Strategy: validation
Validate before calling
// Check platform before attempting non-WAV import
var isConversionPlatform = OperatingSystem.IsWindows() || OperatingSystem.IsLinux() || OperatingSystem.IsMacOS();
if (!isConversionPlatform && !fileName.EndsWith(".wav", StringComparison.OrdinalIgnoreCase))
throw new PlatformNotSupportedException("Pre-convert voice to WAV on this platform."); Type guard
null
Try / catch
catch (PlatformNotSupportedException)
{
// Cannot convert on this platform. Inform user to provide a pre-converted WAV.
await ShowWarning("Import a pre-converted 24 kHz mono WAV file instead.");
} Prevention
- Pre-convert voice files to 24 kHz mono WAV before importing on unsupported platforms.
- Hide the OmniVoice TTS engine on platforms where neither the binary nor ffmpeg can run.
- Document the WAV format requirement (24 kHz mono) for manual conversion.
When it happens
Trigger: ImportVoice is called with a non-WAV file (triggering FfmpegGenerator.ConvertFormat), and OperatingSystem.IsWindows() && IsLinux() && IsMacOS() all return false. The only supported conversion platforms are Windows, Linux, and macOS.
Common situations: Running SE on an unsupported platform (FreeBSD, Solaris, etc.) and importing a non-WAV voice file; iOS/Android builds of an Avalonia app that include this engine but cannot spawn ffmpeg.
Related errors
- OmniVoice (CrispASR) — the crispasr server crashed during sy
- OmniVoice (CrispASR) request failed — the connection to the
- OmniVoice (CrispASR) synthesis failed ({(int)response.Status
- CrispASR executable not found. Install CrispASR via Video →
- Failed to start crispasr (omnivoice)
AI-assisted analysis of SubtitleEdit/subtitleedit@17a9f07487 (2026-08-13).
Data as JSON: /api/errors/313a9f88ed74fc14.
Report an issue: GitHub.