diff options
Diffstat (limited to 'src/modules/module-position-event-sounds.c')
-rw-r--r-- | src/modules/module-position-event-sounds.c | 42 |
1 files changed, 7 insertions, 35 deletions
diff --git a/src/modules/module-position-event-sounds.c b/src/modules/module-position-event-sounds.c index 90e693a3..8e4f4c32 100644 --- a/src/modules/module-position-event-sounds.c +++ b/src/modules/module-position-event-sounds.c @@ -58,30 +58,9 @@ struct userdata { pa_hook_slot *sink_input_fixate_hook_slot; }; -static pa_bool_t is_left(pa_channel_position_t p) { - return - p == PA_CHANNEL_POSITION_FRONT_LEFT || - p == PA_CHANNEL_POSITION_REAR_LEFT || - p == PA_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER || - p == PA_CHANNEL_POSITION_SIDE_LEFT || - p == PA_CHANNEL_POSITION_TOP_FRONT_LEFT || - p == PA_CHANNEL_POSITION_TOP_REAR_LEFT; -} - -static pa_bool_t is_right(pa_channel_position_t p) { - return - p == PA_CHANNEL_POSITION_FRONT_RIGHT || - p == PA_CHANNEL_POSITION_REAR_RIGHT|| - p == PA_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER || - p == PA_CHANNEL_POSITION_SIDE_RIGHT || - p == PA_CHANNEL_POSITION_TOP_FRONT_RIGHT || - p == PA_CHANNEL_POSITION_TOP_REAR_RIGHT; -} - static pa_hook_result_t sink_input_fixate_hook_callback(pa_core *core, pa_sink_input_new_data *data, struct userdata *u) { const char *hpos; double f; - unsigned c; char t[PA_CVOLUME_SNPRINT_MAX]; pa_assert(data); @@ -101,23 +80,16 @@ static pa_hook_result_t sink_input_fixate_hook_callback(pa_core *core, pa_sink_i pa_log_debug("Positioning event sound '%s' at %0.2f.", pa_strnull(pa_proplist_gets(data->proplist, PA_PROP_EVENT_ID)), f); - if (!data->volume_is_set) { - pa_cvolume_reset(&data->volume, data->sample_spec.channels); - data->volume_is_set = TRUE; + if (!data->virtual_volume_is_set) { + pa_cvolume_reset(&data->virtual_volume, data->sample_spec.channels); + data->virtual_volume_is_set = TRUE; + data->virtual_volume_is_absolute = FALSE; } - for (c = 0; c < data->sample_spec.channels; c++) { - - if (is_left(data->channel_map.map[c])) - data->volume.values[c] = - pa_sw_volume_multiply(data->volume.values[c], (pa_volume_t) (PA_VOLUME_NORM * (1.0 - f))); - - if (is_right(data->channel_map.map[c])) - data->volume.values[c] = - pa_sw_volume_multiply(data->volume.values[c], (pa_volume_t) (PA_VOLUME_NORM * f)); - } + pa_cvolume_set_balance(&data->virtual_volume, &data->channel_map, f*2.0-1.0); + data->save_volume = FALSE; - pa_log_debug("Final volume %s.", pa_cvolume_snprint(t, sizeof(t), &data->volume)); + pa_log_debug("Final volume %s.", pa_cvolume_snprint(t, sizeof(t), &data->virtual_volume)); return PA_HOOK_OK; } |