- Add Color Strip Processing Template (CSPT) entity: reusable filter chains for 1D LED strip postprocessing (backend, storage, API, frontend CRUD) - Add "processed" color strip source type that wraps another CSS source and applies a CSPT filter chain (dataclass, stream, schema, modal, cards) - Add Reverse filter for strip LED order reversal - Add CSPT and processed CSS nodes/edges to visual graph editor - Add CSPT test preview WS endpoint with input source selection - Add device settings CSPT template selector (add + edit modals with hints) - Use icon grids for palette quantization preset selector in filter lists - Use EntitySelect for template references and test modal source selectors - Fix filters.css_filter_template.desc missing localization - Fix icon grid cell height inequality (grid-auto-rows: 1fr) - Rename "Processed" subtab to "Processing Templates" - Localize all new strings (en/ru/zh) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
35 lines
1.1 KiB
Python
35 lines
1.1 KiB
Python
"""Audio device routes: enumerate available audio devices."""
|
|
|
|
import asyncio
|
|
|
|
from fastapi import APIRouter
|
|
|
|
from wled_controller.api.auth import AuthRequired
|
|
from wled_controller.core.audio.audio_capture import AudioCaptureManager
|
|
|
|
router = APIRouter()
|
|
|
|
|
|
@router.get("/api/v1/audio-devices", tags=["Audio"])
|
|
async def list_audio_devices(_auth: AuthRequired):
|
|
"""List available audio input/output devices for audio-reactive sources.
|
|
|
|
Returns a deduped flat list (backward compat) plus a ``by_engine`` dict
|
|
with per-engine device lists (no cross-engine dedup) so the frontend can
|
|
filter by the selected audio template's engine type.
|
|
"""
|
|
try:
|
|
devices, by_engine = await asyncio.to_thread(
|
|
lambda: (
|
|
AudioCaptureManager.enumerate_devices(),
|
|
AudioCaptureManager.enumerate_devices_by_engine(),
|
|
)
|
|
)
|
|
return {
|
|
"devices": devices,
|
|
"count": len(devices),
|
|
"by_engine": by_engine,
|
|
}
|
|
except Exception as e:
|
|
return {"devices": [], "count": 0, "by_engine": {}, "error": str(e)}
|