Adds indipendent control to ch1 aand ch2 input gain.
This commit is contained in:
@@ -198,33 +198,64 @@ else:
|
|||||||
start_stream, stop_stream = render_stream_controls(is_streaming, "Start Auracast", "Stop Auracast", running_mode, secondary_is_streaming)
|
start_stream, stop_stream = render_stream_controls(is_streaming, "Start Auracast", "Stop Auracast", running_mode, secondary_is_streaming)
|
||||||
|
|
||||||
# Analog gain control (only for Analog mode, placed below start button)
|
# Analog gain control (only for Analog mode, placed below start button)
|
||||||
analog_gain_db = 0 # default (dB)
|
analog_gain_db_left = 0 # default (dB)
|
||||||
|
analog_gain_db_right = 0 # default (dB)
|
||||||
if audio_mode == "Analog":
|
if audio_mode == "Analog":
|
||||||
if '_analog_gain_db' not in st.session_state:
|
if '_analog_gain_db_left' not in st.session_state:
|
||||||
saved_analog_gain_db = saved_settings.get('analog_gain_db_left', 0)
|
st.session_state['_analog_gain_db_left'] = max(-12, min(18, int(saved_settings.get('analog_gain_db_left', 0))))
|
||||||
st.session_state['_analog_gain_db'] = max(-12, min(18, int(saved_analog_gain_db)))
|
if '_analog_gain_db_right' not in st.session_state:
|
||||||
analog_gain_db = st.slider(
|
st.session_state['_analog_gain_db_right'] = max(-12, min(18, int(saved_settings.get('analog_gain_db_right', 0))))
|
||||||
"Analog Input Gain",
|
if '_gain_link_channels' not in st.session_state:
|
||||||
min_value=-12,
|
st.session_state['_gain_link_channels'] = True
|
||||||
max_value=18,
|
|
||||||
key='_analog_gain_db',
|
link_channels = st.checkbox(
|
||||||
step=1,
|
"Link audio channel gain",
|
||||||
format="%d dB",
|
key='_gain_link_channels',
|
||||||
help="ADC gain level for analog inputs (-12 to 18 dB). Default is 0 dB."
|
help="When enabled, Ch 2 mirrors Ch 1."
|
||||||
)
|
)
|
||||||
# Apply gain live while streaming whenever the slider value changes
|
_gain_col1, _gain_col2 = st.columns(2)
|
||||||
|
with _gain_col1:
|
||||||
|
analog_gain_db_left = st.slider(
|
||||||
|
"Ch 1 Input Gain",
|
||||||
|
min_value=-12,
|
||||||
|
max_value=18,
|
||||||
|
key='_analog_gain_db_left',
|
||||||
|
step=1,
|
||||||
|
format="%d dB",
|
||||||
|
help="ADC gain for channel 1 (-12 to 18 dB). Default is 0 dB."
|
||||||
|
)
|
||||||
|
with _gain_col2:
|
||||||
|
if link_channels:
|
||||||
|
st.session_state['_analog_gain_db_right'] = analog_gain_db_left
|
||||||
|
elif st.session_state.get('_prev_gain_link_channels', True):
|
||||||
|
# Transition: just unlinked — seed Ch 2 from Ch 1 so it doesn't jump to min
|
||||||
|
st.session_state['_analog_gain_db_right'] = analog_gain_db_left
|
||||||
|
st.session_state['_prev_gain_link_channels'] = link_channels
|
||||||
|
analog_gain_db_right = st.slider(
|
||||||
|
"Ch 2 Input Gain",
|
||||||
|
min_value=-12,
|
||||||
|
max_value=18,
|
||||||
|
key='_analog_gain_db_right',
|
||||||
|
step=1,
|
||||||
|
format="%d dB",
|
||||||
|
disabled=link_channels,
|
||||||
|
help="Uncheck 'Link audio channel gain' to adjust Ch 2 independently." if link_channels else "ADC gain for channel 2 (-12 to 18 dB). Default is 0 dB."
|
||||||
|
)
|
||||||
|
# Apply gain live while streaming whenever either slider value changes
|
||||||
if is_streaming:
|
if is_streaming:
|
||||||
prev_gain = st.session_state.get('_prev_analog_gain_db')
|
prev_left = st.session_state.get('_prev_analog_gain_db_left')
|
||||||
if prev_gain != analog_gain_db:
|
prev_right = st.session_state.get('_prev_analog_gain_db_right')
|
||||||
|
if prev_left != analog_gain_db_left or prev_right != analog_gain_db_right:
|
||||||
try:
|
try:
|
||||||
requests.post(
|
requests.post(
|
||||||
f"{BACKEND_URL}/adc_gain",
|
f"{BACKEND_URL}/adc_gain",
|
||||||
json={"gain_db_left": analog_gain_db, "gain_db_right": analog_gain_db},
|
json={"gain_db_left": analog_gain_db_left, "gain_db_right": analog_gain_db_right},
|
||||||
timeout=1,
|
timeout=1,
|
||||||
)
|
)
|
||||||
except Exception:
|
except Exception:
|
||||||
pass
|
pass
|
||||||
st.session_state['_prev_analog_gain_db'] = analog_gain_db
|
st.session_state['_prev_analog_gain_db_left'] = analog_gain_db_left
|
||||||
|
st.session_state['_prev_analog_gain_db_right'] = analog_gain_db_right
|
||||||
|
|
||||||
# Audio level monitor (checkbox, not persisted across reloads)
|
# Audio level monitor (checkbox, not persisted across reloads)
|
||||||
show_level_monitor = st.checkbox("Audio level monitor", value=False, disabled=not is_streaming,
|
show_level_monitor = st.checkbox("Audio level monitor", value=False, disabled=not is_streaming,
|
||||||
@@ -682,8 +713,8 @@ else:
|
|||||||
'immediate_rendering': immediate_rendering2,
|
'immediate_rendering': immediate_rendering2,
|
||||||
'presentation_delay_ms': presentation_delay_ms2,
|
'presentation_delay_ms': presentation_delay_ms2,
|
||||||
'qos_preset': qos_preset2,
|
'qos_preset': qos_preset2,
|
||||||
'analog_gain_db_left': analog_gain_db,
|
'analog_gain_db_left': analog_gain_db_left,
|
||||||
'analog_gain_db_right': analog_gain_db,
|
'analog_gain_db_right': analog_gain_db_right,
|
||||||
}
|
}
|
||||||
|
|
||||||
radio1_cfg = {
|
radio1_cfg = {
|
||||||
@@ -699,8 +730,8 @@ else:
|
|||||||
'presentation_delay_ms': presentation_delay_ms1,
|
'presentation_delay_ms': presentation_delay_ms1,
|
||||||
'qos_preset': qos_preset1,
|
'qos_preset': qos_preset1,
|
||||||
'stereo_mode': stereo_enabled,
|
'stereo_mode': stereo_enabled,
|
||||||
'analog_gain_db_left': analog_gain_db,
|
'analog_gain_db_left': analog_gain_db_left,
|
||||||
'analog_gain_db_right': analog_gain_db,
|
'analog_gain_db_right': analog_gain_db_right,
|
||||||
}
|
}
|
||||||
|
|
||||||
if audio_mode == "Network - Dante":
|
if audio_mode == "Network - Dante":
|
||||||
|
|||||||
Reference in New Issue
Block a user