Skip to content

feat(audio): add per-app mono playback to both stereo channels - #454

Open
principalwater wants to merge 1 commit into
ronitsingh10:mainfrom
principalwater:codex/per-app-mono-stereo
Open

principalwater wants to merge 1 commit into
ronitsingh10:mainfrom
principalwater:codex/per-app-mono-stereo

Conversation

@principalwater

@principalwater principalwater commented Sep 28, 2026 •

Copy link
Copy Markdown

Summary

Add an opt-in mono playback toggle to every app row. FineTune averages the app's stereo source pair and sends the result to both channels of the destination device's preferred stereo pair. It leaves other apps in stereo and keeps the app's existing device routing, including Follow System Default.

The setting is saved per app, works for pinned inactive apps, and is applied before the tap starts. The audio callback uses only stack values and existing buffers.

Why

This provides a general per-app version of macOS's “Play stereo audio as mono” setting. For example, a call app may output remote audio in only one channel; per-app mono plays it through both speakers while music from other apps remains stereo. There is no app-specific detection or special case.

Addresses #323. Complements #392, which routes summed audio to one physical output channel for interface splitting; this feature sends mono to both channels of the selected stereo pair. It uses a conventional (L + R) / 2 fold-down; a one-sided source is 6 dB quieter, as with #392, and can be raised with FineTune's existing app volume/boost controls.

Verification

  • Xcode 26.6 on macOS: xcodebuild test -project FineTune.xcodeproj -scheme FineTune -configuration Debug -destination 'platform=macOS,arch=arm64' -skip-testing:FineTuneUITests CODE_SIGN_IDENTITY=- CODE_SIGNING_REQUIRED=NO — 772 passed, 0 failed.
  • Covers stereo, right-only, mono and multichannel source buffers, preferred output channels, disabled stereo passthrough, persistence, and live tap updates.
  • Live audio verification is still needed. fix(audio): leave apps untapped while they capture input (fixes quiet call audio + echo) #413 proposes bypassing taps while an app captures input; if merged, mono-enabled apps that capture input should remain tappable or expose this as an explicit choice.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant