From beab6209e9db2938f3729c99b3ea9d66ae074b0c Mon Sep 17 00:00:00 2001 From: pstruebi Date: Mon, 30 Jun 2025 11:25:50 +0200 Subject: [PATCH] feat: persist program info and gain settings, add known issues to README --- README.md | 4 ++++ src/auracast/server/multicast_frontend.py | 10 ++++++++-- src/auracast/server/multicast_server.py | 6 ++++-- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 79848cd..4b77565 100644 --- a/README.md +++ b/README.md @@ -87,3 +87,7 @@ Once your device is configured, you can verify that its mDNS advertisement is vi - poetry run multicast_server.py - sudo -E PATH="$PATH" bash ./start_frontend_https.sh - bash start_mdns.sh + + +# Known issues: +- When running on a laptop there might be issues switching between usb and browser audio input since they use the same audio device \ No newline at end of file diff --git a/src/auracast/server/multicast_frontend.py b/src/auracast/server/multicast_frontend.py index 8182e35..4e86330 100644 --- a/src/auracast/server/multicast_frontend.py +++ b/src/auracast/server/multicast_frontend.py @@ -37,7 +37,6 @@ audio_mode = st.selectbox( help="Select the audio input source. Choose 'Webapp' for browser microphone or 'USB' for a connected hardware device." ) - if audio_mode in ["Webapp", "USB"]: # Stream quality selection (temporarily disabled) # quality = st.selectbox("Stream Quality", ["High (48kHz)", "Mid (24kHz)", "Fair (16kHz)"]) @@ -56,9 +55,14 @@ if audio_mode in ["Webapp", "USB"]: value=default_name, help="The primary name for your broadcast. Like the SSID of a WLAN, it identifies your stream for receivers." ) + raw_program_info = saved_settings.get('program_info', default_name) + if isinstance(raw_program_info, list) and raw_program_info: + default_program_info = raw_program_info[0] + else: + default_program_info = raw_program_info program_info = st.text_input( "Program Info", - value=default_name, + value=default_program_info, help="Additional details about the broadcast program, such as its content or purpose. Shown to receivers for more context." ) language = st.text_input( @@ -109,6 +113,7 @@ if audio_mode in ["Webapp", "USB"]: input_device = selected_option.split(":", 1)[0] if ":" in selected_option else selected_option else: input_device = None + import time start_stream = st.button("Start Auracast") stop_stream = st.button("Stop Auracast") @@ -177,6 +182,7 @@ if audio_mode in ["Webapp", "USB"]: ), ] ) + try: r = requests.post(f"{BACKEND_URL}/init", json=config.model_dump()) if r.status_code == 200: diff --git a/src/auracast/server/multicast_server.py b/src/auracast/server/multicast_server.py index 6961678..0e174b9 100644 --- a/src/auracast/server/multicast_server.py +++ b/src/auracast/server/multicast_server.py @@ -88,11 +88,10 @@ async def initialize(conf: auracast_config.AuracastConfigGroup): # initialize the streams dict # persist stream settings for later retrieval - # Derive audio_mode from first BIG audio_source + # Derive audio_mode and input_device from first BIG audio_source first_source = conf.bigs[0].audio_source if conf.bigs else '' if first_source.startswith('device:'): audio_mode_persist = 'USB' - input_device = first_source.split(':', 1)[1] if ':' in first_source else 'default' elif first_source == 'webrtc': audio_mode_persist = 'Webapp' @@ -100,11 +99,14 @@ async def initialize(conf: auracast_config.AuracastConfigGroup): else: audio_mode_persist = 'Network' input_device = None + # Always persist all relevant stream settings save_stream_settings({ 'channel_names': [big.name for big in conf.bigs], 'languages': [big.language for big in conf.bigs], 'audio_mode': audio_mode_persist, 'input_device': input_device, + 'program_info': [getattr(big, 'program_info', None) for big in conf.bigs], + 'gain': [getattr(big, 'input_gain', 1.0) for big in conf.bigs], 'timestamp': datetime.utcnow().isoformat() }) global_config_group = conf