How amonhoorilal/duosound works
DuoSound is a Windows desktop audio-sharing app: users choose a sound source and headphone outputs, start playback, and adjust synchronization manually or through microphone-based calibration. The controller coordinates device discovery, audio routing, saved settings, and speaker-volume changes; either the Flet or tkinter UI presents the controls, with Flet preferred and tkinter as fallback. The README also documents testing individual outputs, help, diagnostics, and tray controls. Some backend calls are supported by the source index rather than full excerpts, so uncertain links are omitted.
Main entry points: app.py Flet window · controller.py App controller · main_window.py Classic window · main.py App launcher
Components 24
App entry and UI
- App launcher
main.py
Playback control
- App controller
duosound/controller.py
Audio and devices
- Audio device discovery
duosound/devices.py - Capture and playback engine
duosound/engine.py - Sync calibration
duosound/calibrate.py - Speaker volume control
duosound/volume.py
Settings and help
- Persistent settings
duosound/settings.py - Help content
duosound/help_text.py - Logs and diagnostics
duosound/log_setup.py
Flet presentation
- Flet window
duosound/ui_flet/app.py - Flet pages
duosound/ui_flet/pages.py - Flet widgets
duosound/ui_flet/widgets.py - Flet scenery
duosound/ui_flet/scenery.py - Flet design tokens
duosound/ui_flet/tokens.py - Flet UI words
duosound/ui_flet/words.py - Flet app icon
duosound/ui_flet/icon.py
Classic presentation
- Classic window
duosound/ui/main_window.py - Classic theme
duosound/ui/theme.py - Classic widgets
duosound/ui/widgets.py - Classic scenery
duosound/ui/scenery.py - Help page
duosound/ui/help_page.py - About and donate
duosound/ui/about_page.py
Other components
- Listener
- Windows audio endpoints
Connections 35
- Listener → App launcher: launches
README.md - App launcher → App controller: creates
main.py - App launcher → Flet window: launches when available
main.py - App launcher → Classic window: falls back to
main.py - Listener → Flet window: operates
README.md - Listener → Classic window: operates
README.md - Flet window → App controller: calls
duosound/ui_flet/app.py - Classic window → App controller: calls
duosound/ui/main_window.py - App controller → Audio device discovery: discovers outputs
duosound/controller.py - App controller → Capture and playback engine: starts playback
duosound/controller.py - App controller → Sync calibration: runs calibration
duosound/controller.py - App controller → Speaker volume control: controls speakers
duosound/controller.py - App controller → Persistent settings: loads and saves
duosound/controller.py - Audio device discovery → Windows audio endpoints: enumerates endpoints
duosound/devices.py - Capture and playback engine → Windows audio endpoints: captures and plays
duosound/engine.py - Sync calibration → Audio device discovery: finds microphones
duosound/calibrate.py - Sync calibration → Capture and playback engine: uses audio playback
duosound/calibrate.py - App launcher → Logs and diagnostics: configures
main.py - App controller → Logs and diagnostics: records events
duosound/controller.py - Classic window → Classic theme: uses styles
duosound/ui/main_window.py - Classic window → Classic widgets: uses controls
duosound/ui/main_window.py - Classic window → Help page: opens
duosound/ui/main_window.py - Classic window → About and donate: opens
duosound/ui/main_window.py - Classic window → Classic scenery: uses scenery
- Help page → Help content: renders
duosound/ui/help_page.py - About and donate → Help content: uses content
duosound/ui/about_page.py - Flet window → Flet pages: uses pages
duosound/ui_flet/app.py - Flet window → Flet widgets: uses controls
duosound/ui_flet/app.py - Flet window → Flet scenery: uses scenery
duosound/ui_flet/app.py - Flet window → Flet design tokens: uses design tokens
duosound/ui_flet/app.py - Flet window → Flet app icon: uses icon
duosound/ui_flet/app.py - Flet window → Flet UI words: uses UI words
duosound/ui_flet/app.py - Flet pages → Help content: renders help
duosound/ui_flet/pages.py - Flet widgets → Flet design tokens: uses tokens
duosound/ui_flet/widgets.py - Flet widgets → Flet UI words: uses UI words
duosound/ui_flet/widgets.py