Systemlautstärke und Gerätewahl im Mixer
Ausgabe und Eingabe stehen jetzt über den Programmen — mit Lautstärke, Stummschalter und der Gerätewahl direkt am Namen. Ein eigenes Auswahlfeld daneben wäre eine zweite Stelle für dieselbe Sache. Sie stehen **außerhalb** des Mixer-Schalters, und das ist der Punkt: hier wird kein Ton abgegriffen, sondern es werden die Regler des Systems bedient. Das braucht keinen Tap, kein Aggregate-Gerät und keine Berechtigung — wer nur die Lautstärke sucht, soll dafür nichts einschalten müssen. Zwei Dinge, die beim Bauen nicht offensichtlich waren: Viele Geräte führen keinen Regler für Element 0, sondern nur je Kanal. Fragt man bloß den Hauptregler, hält man ein regelbares Gerät für unregelbar. Also erst der Hauptregler, dann die Kanäle — und beim Setzen beide Kanäle, sonst wandert das Stereobild. Manche Geräte bringen gar keinen Regler mit, HDMI etwa. Dort steht „hier nicht regelbar" statt eines Reglers, der nichts tut. Warntöne folgen dem Ausgabegerät mit. Zwei getrennte Wahlen sind die Quelle für „warum kommt der Systemton aus dem Notebook". Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -17,10 +17,14 @@ final class MixerMenuBarModule: MenuBarModule {
|
||||
var shortLabel: String { String(localized: "mixer.menubar.short") }
|
||||
|
||||
private let mixer: AudioMixer
|
||||
private let system: SystemAudio
|
||||
private var view: MixerStatusView?
|
||||
private var isActive = false
|
||||
|
||||
init(mixer: AudioMixer) { self.mixer = mixer }
|
||||
init(mixer: AudioMixer, system: SystemAudio) {
|
||||
self.mixer = mixer
|
||||
self.system = system
|
||||
}
|
||||
|
||||
func makeStatusView(presentation: MenuBarPresentation) -> NSView {
|
||||
let view = MixerStatusView()
|
||||
@@ -32,7 +36,7 @@ final class MixerMenuBarModule: MenuBarModule {
|
||||
func makePopoverView() -> AnyView {
|
||||
AnyView(
|
||||
ScrollView {
|
||||
MixerView(mixer: mixer)
|
||||
MixerView(mixer: mixer, system: system)
|
||||
.padding(14)
|
||||
}
|
||||
.scrollIndicators(.automatic)
|
||||
|
||||
@@ -47,6 +47,7 @@ final class AppDelegate: NSObject, NSApplicationDelegate {
|
||||
private let settingsWindow = SettingsWindowController()
|
||||
private let fanControl = FanControl()
|
||||
private let audioMixer = AudioMixer()
|
||||
private let systemAudio = SystemAudio()
|
||||
private let launchAtLogin = LaunchAtLogin()
|
||||
private let onboarding = OnboardingWindowController()
|
||||
|
||||
@@ -103,7 +104,7 @@ final class AppDelegate: NSObject, NSApplicationDelegate {
|
||||
// Mixer und Lüfter gehören genauso in die Leiste wie die Messwerte:
|
||||
// beides regelt man mitten in etwas anderem, und dafür ist der Weg
|
||||
// über ein Fenster zu weit.
|
||||
menuBar.register(MixerMenuBarModule(mixer: audioMixer),
|
||||
menuBar.register(MixerMenuBarModule(mixer: audioMixer, system: systemAudio),
|
||||
settings: model.menuBarSettings(for: "audio"))
|
||||
menuBar.register(FanMenuBarModule(control: fanControl),
|
||||
settings: model.menuBarSettings(for: "fans"))
|
||||
@@ -218,7 +219,7 @@ final class AppDelegate: NSObject, NSApplicationDelegate {
|
||||
self.networkModel = networkModel
|
||||
WidgetRegistry.shared.register(NetworkWidget(model: networkModel))
|
||||
|
||||
WidgetRegistry.shared.register(AudioMixerWidget(mixer: audioMixer))
|
||||
WidgetRegistry.shared.register(AudioMixerWidget(mixer: audioMixer, system: systemAudio))
|
||||
|
||||
WidgetRegistry.shared.register(FanWidget(control: fanControl))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user