78 lines
3.1 KiB
Markdown
78 lines
3.1 KiB
Markdown
# PeerSpeak on Windows
|
|
|
|
Current status: the Windows port cross-compiles to `x86_64-pc-windows-gnu` and the `.exe`
|
|
launches under Wine. A real Windows/WASAPI host is still needed for the final audio-device
|
|
checks listed below.
|
|
|
|
## What works today
|
|
|
|
| Area | Status |
|
|
|---|---|
|
|
| GUI | Iced/wgpu builds and renders under Wine. |
|
|
| Networking | Iroh QUIC transport and gossip compile on Windows. |
|
|
| Audio backend | `cpal` drives WASAPI capture/playback behind `AudioBackend`. |
|
|
| Codec | Opus remains 48 kHz mono, 20 ms frames. |
|
|
| Identity | `ring` identity generation/load is platform-neutral. |
|
|
| Chimes | Windows uses PowerShell `System.Media.SoundPlayer` for WAV playback. |
|
|
|
|
Windows paths are resolved through `dirs`:
|
|
|
|
- Config: `%APPDATA%\peerspeak\config.json`
|
|
- Identity: `%APPDATA%\peerspeak\identity.key`
|
|
- Log: `%LOCALAPPDATA%\peerspeak\peerspeak.log`
|
|
|
|
## Building
|
|
|
|
### Native Windows
|
|
|
|
Install MSVC Build Tools and CMake, then build normally:
|
|
|
|
```powershell
|
|
cargo build --release
|
|
```
|
|
|
|
If CMake is 4.x or newer, the vendored `opus`/`libopus` build may need:
|
|
|
|
```powershell
|
|
$env:CMAKE_POLICY_VERSION_MINIMUM = "3.5"
|
|
cargo build --release
|
|
```
|
|
|
|
### Cross-compile from Linux
|
|
|
|
The current dev path cross-compiles from an Arch environment to the GNU Windows target:
|
|
|
|
```sh
|
|
rustup target add x86_64-pc-windows-gnu
|
|
sudo pacman -S mingw-w64-gcc cmake
|
|
CMAKE_POLICY_VERSION_MINIMUM=3.5 cargo build --release --target x86_64-pc-windows-gnu --bin peerspeak
|
|
```
|
|
|
|
Wine is useful for launch/render smoke tests, but it is not a substitute for a real
|
|
Windows audio-device pass. The deeper migration plan (phases, decisions, the opus build
|
|
spike) lives in the maintainer's handoff docs, outside the repo.
|
|
|
|
## First run and networking
|
|
|
|
Expect a Windows Firewall prompt the first time the app opens network sockets. Allow it:
|
|
PeerSpeak uses UDP for QUIC, plus relay traffic when direct NAT traversal is not available.
|
|
|
|
The default network mode keeps the n0 relay available for NAT traversal without publishing
|
|
presence to n0 DNS. Direct peer-to-peer paths may work when both networks allow them; relayed
|
|
connections are expected and valid.
|
|
|
|
## Known gaps
|
|
|
|
| Item | Status |
|
|
|---|---|
|
|
| Echo cancellation | Linux-only PipeWire feature. The Windows UI shows it disabled as unavailable. |
|
|
| Screen share | Requires a Windows `pixelpass.exe` on `PATH` or a configured override. |
|
|
| Chimes | Now routed through Windows `SoundPlayer`; needs a real Windows host to audibly verify. |
|
|
| Resampling/device format | Cross-compiled. cpal/WASAPI now chooses native 48 kHz when available and otherwise resamples/remaps at the device boundary; needs real Windows hardware audio verification. |
|
|
| Device persistence | Open. WASAPI friendly names may duplicate or change across driver/profile changes. |
|
|
| Playback pacing | Cross-compiled. The fixed playback target under WASAPI shared mode still needs real-hardware verification with `audio_probe`. |
|
|
|
|
Before calling Windows support done, verify a real Windows machine can create/join a room,
|
|
capture mic audio, hear remote audio, select devices, restart with selections preserved, and
|
|
play notification chimes.
|