Files
voice-cat/clients/windows/README.md
T
Talon 82ad4c2811
.NET port / test (macos-latest) (push) Canceled after 0s
.NET port / test (ubuntu-24.04) (push) Canceled after 0s
.NET port / test (windows-latest) (push) Canceled after 0s
.NET port / cpp-conformance (push) Canceled after 0s
Port managed client audio and Windows application
2026-09-16 16:48:06 +02:00

1.8 KiB

VoiceCat — Windows client

The WinForms .NET 10 client uses VoiceCat.Core for TLS, TOFU, protocol state and encrypted UDP, and VoiceCat.Audio for streams, jitter, Opus and mixing. Its only native runtime component is voicecat_media.dll, the narrow Opus/RNNoise C shim. The old voicecat.dll core is no longer loaded or published.

Build

Stage the pinned native media dependencies once, then build the solution:

./dotnet/build-native.ps1
dotnet restore clients/windows/VoiceCat.slnx --locked-mode
dotnet build clients/windows/VoiceCat.slnx -c Release --no-restore

The original VoiceCat.Interop project remains in the repository as a migration oracle. The app references VoiceCat.Managed, whose compatibility facade lets the existing accessible WinForms UI keep its event-pump shape while all networking and audio state live in the idiomatic managed libraries.

Publish

./clients/windows/publish-client.ps1

This produces a self-contained win-x64 distribution in dotnet/artifacts/client/win-x64. The script requires voicecat_media.dll and fails if the legacy voicecat.dll appears.

The noninteractive startup and real WASAPI device check is:

./dotnet/artifacts/client/win-x64/VoiceCat.App.exe --smoke-test --audio

--smoke-test constructs the real main form and pumps the managed client. --audio additionally opens the default WASAPI capture and render endpoints, moves PCM through both for three seconds, and fails if capture produces no samples.

Run manually

# Terminal 1
./dotnet/artifacts/server/win-x64/VoiceCat.Server.exe

# Terminal 2
dotnet run --project clients/windows/VoiceCat.App/VoiceCat.App.csproj

Manual release validation still includes NVDA navigation and a ten-minute two-client listen test, as required by docs/porting-to-dotnet.md.