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

  1. Pre-convert the voice file to WAV (24 kHz mono) using an external tool before importing, so the ffmpeg branch is not hit.
  2. 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).
  3. Gate the engine selection in the UI so it is not offered on unsupported platforms.
  4. 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

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


AI-assisted analysis of SubtitleEdit/subtitleedit@17a9f07487 (2026-08-13). Data as JSON: /api/errors/313a9f88ed74fc14. Report an issue: GitHub.