How muvox-io/euphonium works
Euphonium is an extensible streaming audio player for low-cost devices, including ESP32. Its principal workflow is controlling playback through a browser UI, which fetches playback state and sends controls to the device; device-side core services and audio outputs provide playback. The README gives only a brief product description, so several subsystem links are shown as unverified rather than inferred from names. The Berry interpreter is an embedded scripting capability; only its parser relationship is supported by the excerpts and source index.
Main entry points: Core.cpp Application core · EuphoniumApp.cpp ESP32 application · index.tsx Playback controls · be_parser.c Berry parser
Components 29
Web interface
- Web app
src/frontend/src/components/App/index.tsx - Playback controls
src/frontend/src/components/Playback/index.tsx - Playback API
src/frontend/src/redux/api/euphonium/playbackApi.ts - UI state store
src/frontend/src/redux/store.ts - Local playback state
src/frontend/src/redux/reducers/localPlaybackState.ts - Plugin configuration
src/frontend/src/redux/reducers/pluginConfigurationsReducer.ts - Plugin models
src/frontend/src/api/euphonium/plugins/models.ts - Configuration forms
src/frontend/src/components/FormFields/index.tsx - Wi-Fi setup
src/frontend/src/components/WiFiConfig/index.tsx - OTA controls
src/frontend/src/apps/ota - Radio browser
src/frontend/src/apps/webradio
Device core
- Application core
src/core/main/app/Core.cpp - HTTP dispatcher
src/core/main/app/HTTPDispatcher.cpp - Connectivity service
src/core/main/app/include/Connectivity.h - OTA handling
src/core/main/app/OTAHandler.cpp - Background jobs
src/core/main/app/ServiceTask.cpp
Audio and plugins
- Audio task
src/core/main/app/AudioTask.cpp - Audio plugins
src/core/main/plugins - Multiroom audio
src/core/main/multiroom
Device platforms
- Desktop target
src/targets/cli/main.cpp - ESP32 target
src/targets/esp32/main/main.cpp - ESP32 application
src/targets/esp32/main/app/EuphoniumApp.cpp - I2S output
src/targets/esp32/main/app/I2SAudioOutput.cpp - Bluetooth sink
src/targets/esp32/main/bluetooth_sink/BluetoothSinkPlugin.cpp
Berry scripting
- Berry parser
src/core/external/berry/src/be_parser.c - Berry bindings
src/core/main/app/BerryBind.cpp - Berry objects
src/core/external/berry/src/be_object.h - Berry strings
src/core/external/berry/src/be_string.h
Other components
- Device user
Connections 27
- Device user → Web app: uses
- Web app → Playback controls: renders
- Playback controls → Playback API: requests state
src/frontend/src/components/Playback/index.tsx - Playback controls → Local playback state: reads and updates
src/frontend/src/components/Playback/index.tsx - Playback API → Local playback state: feeds state
src/frontend/src/redux/reducers/localPlaybackState.ts - UI state store → Playback API: registers reducer
src/frontend/src/redux/store.ts - UI state store → Plugin configuration: registers reducer
src/frontend/src/redux/store.ts - Plugin configuration → Plugin models: uses models
src/frontend/src/api/euphonium/plugins/models.ts - Configuration forms → Plugin configuration: uses configuration
src/frontend/src/components/FormFields/index.tsx - Configuration forms → Plugin models: uses models
src/frontend/src/components/FormFields/index.tsx - Wi-Fi setup → Connectivity service: configures
- OTA controls → OTA handling: requests updates
- Application core → HTTP dispatcher: dispatches requests
- HTTP dispatcher → OTA handling: routes updates
- OTA handling → Background jobs: submits jobs
- Application core → Audio task: coordinates playback
- Application core → Audio plugins: hosts
- Audio plugins → Multiroom audio: supports multiroom
- Radio browser → Audio plugins: selects sources
- Desktop target → Application core: starts
src/targets/cli/main.cpp - ESP32 target → ESP32 application: starts
src/targets/esp32/main/main.cpp - ESP32 application → Application core: initializes
- ESP32 application → I2S output: configures output
- ESP32 application → Bluetooth sink: provides sink
- Berry bindings → Berry parser: integrates
- Berry parser → Berry objects: uses object definitions
src/core/external/berry/src/be_parser.c - Berry parser → Berry strings: uses string definitions
src/core/external/berry/src/be_parser.c