Add audio channel selection (mono/left/right), show device LED count in target editor
Audio capture now produces per-channel FFT spectrum and RMS alongside the existing mono mix. Each audio color strip source can select which channel to visualize via a new "Channel" dropdown. This enables stereo setups with separate left/right segments on the same LED strip. Also shows the device LED count under the device selector in the target editor for quick reference. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -78,6 +78,7 @@ class ColorStripSource:
|
||||
"audio_loopback": None,
|
||||
"sensitivity": None,
|
||||
"color_peak": None,
|
||||
"audio_channel": None,
|
||||
}
|
||||
|
||||
@staticmethod
|
||||
@@ -165,6 +166,7 @@ class ColorStripSource:
|
||||
visualization_mode=data.get("visualization_mode") or "spectrum",
|
||||
audio_device_index=int(data.get("audio_device_index", -1)),
|
||||
audio_loopback=bool(data.get("audio_loopback", True)),
|
||||
audio_channel=data.get("audio_channel") or "mono",
|
||||
sensitivity=float(data.get("sensitivity") or 1.0),
|
||||
smoothing=float(data.get("smoothing") or 0.3),
|
||||
palette=data.get("palette") or "rainbow",
|
||||
@@ -366,6 +368,7 @@ class AudioColorStripSource(ColorStripSource):
|
||||
visualization_mode: str = "spectrum" # spectrum | beat_pulse | vu_meter
|
||||
audio_device_index: int = -1 # -1 = default input device
|
||||
audio_loopback: bool = True # True = WASAPI loopback (system audio)
|
||||
audio_channel: str = "mono" # mono | left | right
|
||||
sensitivity: float = 1.0 # gain multiplier (0.1–5.0)
|
||||
smoothing: float = 0.3 # temporal smoothing (0.0–1.0)
|
||||
palette: str = "rainbow" # named color palette
|
||||
@@ -379,6 +382,7 @@ class AudioColorStripSource(ColorStripSource):
|
||||
d["visualization_mode"] = self.visualization_mode
|
||||
d["audio_device_index"] = self.audio_device_index
|
||||
d["audio_loopback"] = self.audio_loopback
|
||||
d["audio_channel"] = self.audio_channel
|
||||
d["sensitivity"] = self.sensitivity
|
||||
d["smoothing"] = self.smoothing
|
||||
d["palette"] = self.palette
|
||||
|
||||
@@ -122,6 +122,7 @@ class ColorStripStore:
|
||||
visualization_mode: str = "spectrum",
|
||||
audio_device_index: int = -1,
|
||||
audio_loopback: bool = True,
|
||||
audio_channel: str = "mono",
|
||||
sensitivity: float = 1.0,
|
||||
color_peak: Optional[list] = None,
|
||||
) -> ColorStripSource:
|
||||
@@ -215,6 +216,7 @@ class ColorStripStore:
|
||||
visualization_mode=visualization_mode or "spectrum",
|
||||
audio_device_index=audio_device_index if audio_device_index is not None else -1,
|
||||
audio_loopback=bool(audio_loopback),
|
||||
audio_channel=audio_channel or "mono",
|
||||
sensitivity=float(sensitivity) if sensitivity else 1.0,
|
||||
smoothing=float(smoothing) if smoothing else 0.3,
|
||||
palette=palette or "rainbow",
|
||||
@@ -292,6 +294,7 @@ class ColorStripStore:
|
||||
visualization_mode: Optional[str] = None,
|
||||
audio_device_index: Optional[int] = None,
|
||||
audio_loopback: Optional[bool] = None,
|
||||
audio_channel: Optional[str] = None,
|
||||
sensitivity: Optional[float] = None,
|
||||
color_peak: Optional[list] = None,
|
||||
) -> ColorStripSource:
|
||||
@@ -381,6 +384,8 @@ class ColorStripStore:
|
||||
source.audio_device_index = audio_device_index
|
||||
if audio_loopback is not None:
|
||||
source.audio_loopback = bool(audio_loopback)
|
||||
if audio_channel is not None:
|
||||
source.audio_channel = audio_channel
|
||||
if sensitivity is not None:
|
||||
source.sensitivity = float(sensitivity)
|
||||
if smoothing is not None:
|
||||
|
||||
Reference in New Issue
Block a user