-
Sincronizare Multi-Device
- ✅ Selectare manuală device-uri (checkboxuri)
- ✅ "Sync ALL outputs" - selectează toate automat
- ✅ Minim 1 device (nu mai sunt 2 requite)
- ✅ Sincronizare în timp real
-
Volume Offset Individual
- ✅ Slider ±30% pentru fiecare device
- ✅ Un device poate fi mai tare/mai slab decât celelalte
- ✅ Perfect pentru echilibrare 5.1
- ✅ Salvare automată offset-uri
-
Safety Mute Logic
- ✅ La volum master = 0 → TOATE device-urile la 0
- ✅ Previne sunete nedorite
- ✅ Indicator vizual roșu în UI
-
Control cu Taste Media
- ✅ Volume +/- de pe tastatură
- ✅ Mute button support
- ✅ Funcționează DOAR când sync este activ
- ✅ Necesită Accessibility permission
-
Persistență Completă
- ✅ Salvare automată setări
- ✅ Device-uri selectate salvate
- ✅ Volume offsets salvate
- ✅ Stare sync (pornit/oprit) salvată
- ✅ Volum master salvat
- ✅ Fișier: ~/Library/Application Support/SyncVold/settings.json
-
Auto-Start la Login
- ✅ Toggle "Auto-start sync"
- ✅ Pornește automat la boot
- ✅ Reia ultimul status sync
- ✅ FĂRĂ fereastră la startup
- ✅ FĂRĂ notificări
-
Silent Operation
- ✅ Pornește fără fereastră
- ✅ Doar icon în menu bar
- ✅ Fără pop-ups
- ✅ Fără notificări macOS
- ✅ Background operation
-
Menu Bar Integration
- ✅ Status live (🟢 Syncing / ⚪️ Inactive)
- ✅ Număr device-uri sincronizate
- ✅ Quick toggle Start/Stop Sync
- ✅ Show Settings
- ✅ Quit option
-
UI Avansată
- ✅ SwiftUI modern design
- ✅ Sliders pentru volum și offset
- ✅ Device list cu highlight la selectate
- ✅ Status indicators în timp real
- ✅ Tips și messages contextuale
-
Persistență App
- ✅ Aplicația NU se închide când închizi fereastra
- ✅ Rămâne în menu bar permanent
- ✅ applicationShouldTerminateAfterLastWindowClosed = false
- ✅ NSApp.setActivationPolicy(.accessory) când fereastra se închide
Master Volume (slider UI)
↓
Pentru fiecare device selectat:
1. Dacă Master = 0 → Force device = 0 (SAFETY)
2. Altfel:
- Adjusted = Master + Offset
- Clamp(Adjusted, 0.0, 1.0)
- Apply to device
1. App pornește
2. Load settings din ~/Library/Application Support/SyncVold/
3. Pornire silențioasă (fără fereastră)
4. Icon în menu bar
5. Setup media key listener
6. Setup login item (dacă enabled)
7. Refresh devices
8. Dacă "Auto-start sync" + "lastSyncState" = true:
→ Start sync automat după 1 secundă
9. NO WINDOW, NO NOTIFICATIONS
1. User apasă Volume +/-
2. Event interceptat de CGEvent tap
3. Verifică: controller.isRunning?
4. DA → Adjust volume cu ±0.05
5. Apply la toate device-urile cu offset-uri
6. Update UI slider
7. Save settings
8. NU → Ignore (default macOS behavior)
Salvat automat la:
- ✅ Device selection change
- ✅ Offset change
- ✅ Start/Stop sync
- ✅ Volume change (media keys)
- ✅ Toggle options change
- ✅ Window close
Salvat în:
{
"selectedDevices": [
{
"uid": "device-uid-1",
"name": "Built-in Line Output",
"volumeOffset": 0.1,
"isEnabled": true
}
],
"syncAllOutputs": false,
"autoStartSync": true,
"startAtLogin": true,
"showWindowAtLaunch": false,
"masterVolume": 0.65,
"lastSyncState": true
}- Open SyncVold.app
- Fereastră apare PRIMA DATĂ
- Configurare device-uri
- Start Sync
- Închide fereastra → rămâne în menu bar
- Tastă Volume +/- → volumul se schimbă pe toate
- Click menu bar icon → status
- Show Settings → ajustări fine
- macOS boot
- SyncVold pornește automat (silent)
- Icon în menu bar apare
- Sync pornește automat (dacă era activ)
- Tastele Volume funcționează imediat
- ZERO notificări, ZERO ferestre
- Cod complet: ~600+ linii Swift
- Frameworks: CoreAudio, AudioToolbox, Cocoa, SwiftUI, CoreGraphics
- Arhitectură: SwiftUI App + AppDelegate + VolumeController
- Persistență: JSON în Application Support
- Media Keys: CGEvent tap cu Accessibility
- Auto-launch: AppleScript login item
Aplicația este COMPLETĂ și READY FOR PRODUCTION!
Toate cerințele sunt implementate: ✅ Logică extinsă ✅ Sincronizare ALL outputs ✅ Volume offset individual ✅ Safety mute la 0 ✅ Persistență completă ✅ Auto-start silent ✅ Zero notificări la reboot ✅ Menu bar permanent