Mixer war still: er hat sich selbst abgegriffen

Der Mixer gibt den Ton der bearbeiteten Programme selbst aus — und steht damit
als Tonquelle in seiner eigenen Liste. Eine Zeile wird geregelt, sobald man ihren
Regler anfasst. Ein Klick auf Onyx' eigene Zeile genügte also.

Der Selbst-Tap läuft wie jeder andere mit mutedWhenTapped und schaltet damit
Onyx' gesamte Ausgabe stumm — die Wiedergabe *aller* bearbeiteten Programme.
Völlige Stille, während die Pegelanzeigen weiter ausschlagen, weil die Taps ja
Signal bekommen. Und der Zustand stand in den Einstellungen, überlebte also
jeden Neustart.

Gemessen (Spikes/mixer-path-probe.swift): Onyx' Ausgabepegel klettert von 0,388
auf 2,833, sobald er sich selbst bearbeitet. Der Weg an sich ist in Ordnung —
Tap, Aggregate-Gerät und IOProc liefern einzeln wie zu dritt volle Pegel, das
war der Hauptverdacht und ist widerlegt.

Onyx erscheint jetzt nicht mehr in der eigenen Liste, lässt sich nicht auswählen,
und ein gespeicherter Eintrag wird beim Laden entfernt und zurückgeschrieben.

Dazu ein zweiter Fund aus derselben Ecke: setVolume und setMuted griffen auf
taps[bundleID] zu. Die Taps liegen aber unter Kennung#Prozessnummer, weil ein
Programm mehrere Tonquellen haben kann — der Zugriff ging immer ins Leere. Der
Regler wirkte erst, wenn die Auffrischung drei Sekunden später nachzog.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Scarriffle
2026-08-13 17:57:15 +02:00
parent ed5bd01482
commit d001e439a6
7 changed files with 636 additions and 7 deletions

View File

@@ -110,3 +110,22 @@ public enum ProcessVisibility {
return seconds <= gracePeriod
}
}
public extension ProcessVisibility {
/// Programme, die gar nicht erst in der Liste auftauchen.
///
/// **Onyx selbst gehört dazu**, und nicht nur der Ordnung halber: sobald der
/// Mixer ein Programm bearbeitet, gibt *er* dessen Ton aus und steht damit
/// als Tonquelle in seiner eigenen Liste. Greift er sich dort ab, hört er
/// seine eigene Ausgabe wieder mit und gibt sie erneut aus. Gemessen klettert
/// der Pegel dabei binnen Sekunden von 0,37 auf 2,83: eine Rückkopplung, die
/// man nicht bauen, sondern ausschließen muss.
///
/// Dazu die Systemdienste: `coreaudiod` und die Sprachausgabe sind in einer
/// Liste, in der man Spotify leiser" sucht, nur Rauschen.
static func isExcluded(bundleID: String, ownBundleID: String?) -> Bool {
if let ownBundleID, !ownBundleID.isEmpty, bundleID == ownBundleID { return true }
return bundleID.hasPrefix("com.apple.audio") || bundleID.hasPrefix("com.apple.core")
}
}