- Joined
- Nov 2, 2026
- Messages
- 1
- Reaction score
- 0
Robotic, distorted audio in the Windows desktop app while the web client is fine has already been reported in "Desktop app with Headset" (https://www.3cx.com/community/threads/desktop-app-with-headset.137978/). I can't reply there, so here is what I found. I think it's the cause.
Setup: Windows 11 Pro (build 26200), 3CX app from the Microsoft Store (3CXSoftphone.exe 20.0.1284), Lenovo ThinkPad L14 Gen 3, built-in "Realtek(R) Audio" speakers. Calls and ringtone sound distorted and robotic in the app. The web client on the same laptop and the same speakers is clean.
What I measured:
1. I recorded the ringback tone (400 + 450 Hz) from the app and from the web client. The web client plays 400.0 and 450.0 Hz. The app plays 375.0 and 421.9 Hz, which is exactly 480/512 of the correct frequencies. On top of that there are sidebands every 93.75 Hz (= 48000/512) and gaps of about 0.67 ms every 10.67 ms.
2. IAudioClient3::GetSharedModeEnginePeriod on the Realtek speaker endpoint reports 512 frames at 48 kHz (10.67 ms) for default, fundamental, minimum and maximum, so the driver allows nothing else. All other endpoints on this laptop (USB dock, HDMI monitor, microphone array) report 480 frames (10 ms).
So the app seems to assume 480-frame (10 ms) periods and breaks on any output device whose shared-mode engine period is different. This might also explain why the same headset works on one PC and not on another, and why switching from Bluetooth to the USB dongle helps for some people in that thread.
Ruled out: codecs (the local ringtone is distorted as well, and the web client is clean with the same PBX and trunk), and disabling audio enhancements / Dolby (no change, the period stays at 512).
Workaround that works: I installed VB-CABLE, which runs at 480 frames. In the app, both speaker and ringer are set to "CABLE Input". In Windows, "Listen to this device" is enabled on "CABLE Output" with playback through the default device. Audio in the app is clean now. The web client is the other workaround.
Could the developers please make the app work with engine periods other than 480 frames? For example, use the buffer size Windows actually reports per period instead of a fixed 10 ms, or resample. I'm happy to run a test build or provide the recordings.
Setup: Windows 11 Pro (build 26200), 3CX app from the Microsoft Store (3CXSoftphone.exe 20.0.1284), Lenovo ThinkPad L14 Gen 3, built-in "Realtek(R) Audio" speakers. Calls and ringtone sound distorted and robotic in the app. The web client on the same laptop and the same speakers is clean.
What I measured:
1. I recorded the ringback tone (400 + 450 Hz) from the app and from the web client. The web client plays 400.0 and 450.0 Hz. The app plays 375.0 and 421.9 Hz, which is exactly 480/512 of the correct frequencies. On top of that there are sidebands every 93.75 Hz (= 48000/512) and gaps of about 0.67 ms every 10.67 ms.
2. IAudioClient3::GetSharedModeEnginePeriod on the Realtek speaker endpoint reports 512 frames at 48 kHz (10.67 ms) for default, fundamental, minimum and maximum, so the driver allows nothing else. All other endpoints on this laptop (USB dock, HDMI monitor, microphone array) report 480 frames (10 ms).
So the app seems to assume 480-frame (10 ms) periods and breaks on any output device whose shared-mode engine period is different. This might also explain why the same headset works on one PC and not on another, and why switching from Bluetooth to the USB dongle helps for some people in that thread.
Ruled out: codecs (the local ringtone is distorted as well, and the web client is clean with the same PBX and trunk), and disabling audio enhancements / Dolby (no change, the period stays at 512).
Workaround that works: I installed VB-CABLE, which runs at 480 frames. In the app, both speaker and ringer are set to "CABLE Input". In Windows, "Listen to this device" is enabled on "CABLE Output" with playback through the default device. Audio in the app is clean now. The web client is the other workaround.
Could the developers please make the app work with engine periods other than 480 frames? For example, use the buffer size Windows actually reports per period instead of a fixed 10 ms, or resample. I'm happy to run a test build or provide the recordings.