mirror of
https://github.com/asterisk/asterisk.git
synced 2025-11-15 14:28:24 +00:00
Binaural synthesis (confbridge): DTMF conference management.
DTMF configuration options for the binaural softmix bridge: toggle binaural rendering (per channel). ASTERISK-26292 Change-Id: Ibfe708b9fe26097c1798fcbfcc4dc461267d8af8
This commit is contained in:
@@ -438,6 +438,10 @@ const char *conf_get_sound(enum conf_sounds sound, struct bridge_profile_sounds
|
|||||||
return S_OR(custom_sounds->muted, "conf-muted");
|
return S_OR(custom_sounds->muted, "conf-muted");
|
||||||
case CONF_SOUND_UNMUTED:
|
case CONF_SOUND_UNMUTED:
|
||||||
return S_OR(custom_sounds->unmuted, "conf-unmuted");
|
return S_OR(custom_sounds->unmuted, "conf-unmuted");
|
||||||
|
case CONF_SOUND_BINAURAL_ON:
|
||||||
|
return S_OR(custom_sounds->binauralon, "confbridge-binaural-on");
|
||||||
|
case CONF_SOUND_BINAURAL_OFF:
|
||||||
|
return S_OR(custom_sounds->binauraloff, "confbridge-binaural-off");
|
||||||
case CONF_SOUND_ONLY_ONE:
|
case CONF_SOUND_ONLY_ONE:
|
||||||
return S_OR(custom_sounds->onlyone, "conf-onlyone");
|
return S_OR(custom_sounds->onlyone, "conf-onlyone");
|
||||||
case CONF_SOUND_THERE_ARE:
|
case CONF_SOUND_THERE_ARE:
|
||||||
@@ -2452,6 +2456,20 @@ static int action_toggle_mute(struct confbridge_conference *conference,
|
|||||||
conference->b_profile.sounds)) < 0;
|
conference->b_profile.sounds)) < 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int action_toggle_binaural(struct confbridge_conference *conference,
|
||||||
|
struct confbridge_user *user,
|
||||||
|
struct ast_bridge_channel *bridge_channel)
|
||||||
|
{
|
||||||
|
unsigned int binaural;
|
||||||
|
ast_bridge_channel_lock_bridge(bridge_channel);
|
||||||
|
binaural = !bridge_channel->binaural_suspended;
|
||||||
|
bridge_channel->binaural_suspended = binaural;
|
||||||
|
ast_bridge_unlock(bridge_channel->bridge);
|
||||||
|
return play_file(bridge_channel, NULL, (binaural ?
|
||||||
|
conf_get_sound(CONF_SOUND_BINAURAL_OFF, user->b_profile.sounds) :
|
||||||
|
conf_get_sound(CONF_SOUND_BINAURAL_ON, user->b_profile.sounds))) < 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int action_toggle_mute_participants(struct confbridge_conference *conference, struct confbridge_user *user)
|
static int action_toggle_mute_participants(struct confbridge_conference *conference, struct confbridge_user *user)
|
||||||
{
|
{
|
||||||
struct confbridge_user *cur_user = NULL;
|
struct confbridge_user *cur_user = NULL;
|
||||||
@@ -2670,6 +2688,9 @@ static int execute_menu_entry(struct confbridge_conference *conference,
|
|||||||
case MENU_ACTION_TOGGLE_MUTE:
|
case MENU_ACTION_TOGGLE_MUTE:
|
||||||
res |= action_toggle_mute(conference, user, bridge_channel);
|
res |= action_toggle_mute(conference, user, bridge_channel);
|
||||||
break;
|
break;
|
||||||
|
case MENU_ACTION_TOGGLE_BINAURAL:
|
||||||
|
action_toggle_binaural(conference, user, bridge_channel);
|
||||||
|
break;
|
||||||
case MENU_ACTION_ADMIN_TOGGLE_MUTE_PARTICIPANTS:
|
case MENU_ACTION_ADMIN_TOGGLE_MUTE_PARTICIPANTS:
|
||||||
if (!isadmin) {
|
if (!isadmin) {
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -425,6 +425,8 @@
|
|||||||
<enum name="sound_kicked"><para>The sound played to a user who has been kicked from the conference.</para></enum>
|
<enum name="sound_kicked"><para>The sound played to a user who has been kicked from the conference.</para></enum>
|
||||||
<enum name="sound_muted"><para>The sound played when the mute option it toggled on.</para></enum>
|
<enum name="sound_muted"><para>The sound played when the mute option it toggled on.</para></enum>
|
||||||
<enum name="sound_unmuted"><para>The sound played when the mute option it toggled off.</para></enum>
|
<enum name="sound_unmuted"><para>The sound played when the mute option it toggled off.</para></enum>
|
||||||
|
<enum name="sound_binaural_on"><para>The sound played when binaural auudio is turned on.</para></enum>
|
||||||
|
<enum name="sound_binaural_off"><para>The sound played when the binaural audio is turned off.</para></enum>
|
||||||
<enum name="sound_only_person"><para>The sound played when the user is the only person in the conference.</para></enum>
|
<enum name="sound_only_person"><para>The sound played when the user is the only person in the conference.</para></enum>
|
||||||
<enum name="sound_only_one"><para>The sound played to a user when there is only one other
|
<enum name="sound_only_one"><para>The sound played to a user when there is only one other
|
||||||
person is in the conference.</para></enum>
|
person is in the conference.</para></enum>
|
||||||
@@ -512,6 +514,9 @@
|
|||||||
Toggle turning on and off mute. Mute will make the user silent
|
Toggle turning on and off mute. Mute will make the user silent
|
||||||
to everyone else, but the user will still be able to listen in.
|
to everyone else, but the user will still be able to listen in.
|
||||||
</para></enum>
|
</para></enum>
|
||||||
|
<enum name="toggle_binaural"><para>
|
||||||
|
Toggle turning on and off binaural audio processing.
|
||||||
|
</para></enum>
|
||||||
<enum name="no_op"><para>
|
<enum name="no_op"><para>
|
||||||
This action does nothing (No Operation). Its only real purpose exists for
|
This action does nothing (No Operation). Its only real purpose exists for
|
||||||
being able to reserve a sequence in the config as a menu exit sequence.</para></enum>
|
being able to reserve a sequence in the config as a menu exit sequence.</para></enum>
|
||||||
@@ -916,6 +921,10 @@ static int set_sound(const char *sound_name, const char *sound_file, struct brid
|
|||||||
ast_string_field_set(sounds, muted, sound_file);
|
ast_string_field_set(sounds, muted, sound_file);
|
||||||
} else if (!strcasecmp(sound_name, "sound_unmuted")) {
|
} else if (!strcasecmp(sound_name, "sound_unmuted")) {
|
||||||
ast_string_field_set(sounds, unmuted, sound_file);
|
ast_string_field_set(sounds, unmuted, sound_file);
|
||||||
|
} else if (!strcasecmp(sound_name, "sound_binaural_on")) {
|
||||||
|
ast_string_field_set(sounds, binauralon, sound_file);
|
||||||
|
} else if (!strcasecmp(sound_name, "sound_binaural_off")) {
|
||||||
|
ast_string_field_set(sounds, binauraloff, sound_file);
|
||||||
} else if (!strcasecmp(sound_name, "sound_there_are")) {
|
} else if (!strcasecmp(sound_name, "sound_there_are")) {
|
||||||
ast_string_field_set(sounds, thereare, sound_file);
|
ast_string_field_set(sounds, thereare, sound_file);
|
||||||
} else if (!strcasecmp(sound_name, "sound_other_in_party")) {
|
} else if (!strcasecmp(sound_name, "sound_other_in_party")) {
|
||||||
@@ -1141,6 +1150,7 @@ static int add_action_to_menu_entry(struct conf_menu_entry *menu_entry, enum con
|
|||||||
switch (id) {
|
switch (id) {
|
||||||
case MENU_ACTION_NOOP:
|
case MENU_ACTION_NOOP:
|
||||||
case MENU_ACTION_TOGGLE_MUTE:
|
case MENU_ACTION_TOGGLE_MUTE:
|
||||||
|
case MENU_ACTION_TOGGLE_BINAURAL:
|
||||||
case MENU_ACTION_INCREASE_LISTENING:
|
case MENU_ACTION_INCREASE_LISTENING:
|
||||||
case MENU_ACTION_DECREASE_LISTENING:
|
case MENU_ACTION_DECREASE_LISTENING:
|
||||||
case MENU_ACTION_INCREASE_TALKING:
|
case MENU_ACTION_INCREASE_TALKING:
|
||||||
@@ -1249,6 +1259,8 @@ static int add_menu_entry(struct conf_menu *menu, const char *dtmf, const char *
|
|||||||
ast_copy_string(menu_entry->dtmf, dtmf, sizeof(menu_entry->dtmf));
|
ast_copy_string(menu_entry->dtmf, dtmf, sizeof(menu_entry->dtmf));
|
||||||
if (!strcasecmp(action, "toggle_mute")) {
|
if (!strcasecmp(action, "toggle_mute")) {
|
||||||
res |= add_action_to_menu_entry(menu_entry, MENU_ACTION_TOGGLE_MUTE, NULL);
|
res |= add_action_to_menu_entry(menu_entry, MENU_ACTION_TOGGLE_MUTE, NULL);
|
||||||
|
} else if (!strcasecmp(action, "toggle_binaural")) {
|
||||||
|
res |= add_action_to_menu_entry(menu_entry, MENU_ACTION_TOGGLE_BINAURAL, NULL);
|
||||||
} else if (!strcasecmp(action, "no_op")) {
|
} else if (!strcasecmp(action, "no_op")) {
|
||||||
res |= add_action_to_menu_entry(menu_entry, MENU_ACTION_NOOP, NULL);
|
res |= add_action_to_menu_entry(menu_entry, MENU_ACTION_NOOP, NULL);
|
||||||
} else if (!strcasecmp(action, "increase_listening_volume")) {
|
} else if (!strcasecmp(action, "increase_listening_volume")) {
|
||||||
@@ -1647,6 +1659,8 @@ static char *handle_cli_confbridge_show_bridge_profile(struct ast_cli_entry *e,
|
|||||||
ast_cli(a->fd,"sound_kicked: %s\n", conf_get_sound(CONF_SOUND_KICKED, b_profile.sounds));
|
ast_cli(a->fd,"sound_kicked: %s\n", conf_get_sound(CONF_SOUND_KICKED, b_profile.sounds));
|
||||||
ast_cli(a->fd,"sound_muted: %s\n", conf_get_sound(CONF_SOUND_MUTED, b_profile.sounds));
|
ast_cli(a->fd,"sound_muted: %s\n", conf_get_sound(CONF_SOUND_MUTED, b_profile.sounds));
|
||||||
ast_cli(a->fd,"sound_unmuted: %s\n", conf_get_sound(CONF_SOUND_UNMUTED, b_profile.sounds));
|
ast_cli(a->fd,"sound_unmuted: %s\n", conf_get_sound(CONF_SOUND_UNMUTED, b_profile.sounds));
|
||||||
|
ast_cli(a->fd,"sound_binaural_on: %s\n", conf_get_sound(CONF_SOUND_BINAURAL_ON, b_profile.sounds));
|
||||||
|
ast_cli(a->fd,"sound_binaural_off: %s\n", conf_get_sound(CONF_SOUND_BINAURAL_OFF, b_profile.sounds));
|
||||||
ast_cli(a->fd,"sound_there_are: %s\n", conf_get_sound(CONF_SOUND_THERE_ARE, b_profile.sounds));
|
ast_cli(a->fd,"sound_there_are: %s\n", conf_get_sound(CONF_SOUND_THERE_ARE, b_profile.sounds));
|
||||||
ast_cli(a->fd,"sound_other_in_party: %s\n", conf_get_sound(CONF_SOUND_OTHER_IN_PARTY, b_profile.sounds));
|
ast_cli(a->fd,"sound_other_in_party: %s\n", conf_get_sound(CONF_SOUND_OTHER_IN_PARTY, b_profile.sounds));
|
||||||
ast_cli(a->fd,"sound_place_into_conference: %s\n", conf_get_sound(CONF_SOUND_PLACE_IN_CONF, b_profile.sounds));
|
ast_cli(a->fd,"sound_place_into_conference: %s\n", conf_get_sound(CONF_SOUND_PLACE_IN_CONF, b_profile.sounds));
|
||||||
@@ -1775,6 +1789,9 @@ static char *handle_cli_confbridge_show_menu(struct ast_cli_entry *e, int cmd, s
|
|||||||
case MENU_ACTION_TOGGLE_MUTE:
|
case MENU_ACTION_TOGGLE_MUTE:
|
||||||
ast_cli(a->fd, "toggle_mute");
|
ast_cli(a->fd, "toggle_mute");
|
||||||
break;
|
break;
|
||||||
|
case MENU_ACTION_TOGGLE_BINAURAL:
|
||||||
|
ast_cli(a->fd, "toggle_binaural");
|
||||||
|
break;
|
||||||
case MENU_ACTION_NOOP:
|
case MENU_ACTION_NOOP:
|
||||||
ast_cli(a->fd, "no_op");
|
ast_cli(a->fd, "no_op");
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -93,6 +93,7 @@ enum conf_menu_action_id {
|
|||||||
MENU_ACTION_RELEASE_SINGLE_VIDEO_SRC,
|
MENU_ACTION_RELEASE_SINGLE_VIDEO_SRC,
|
||||||
MENU_ACTION_PARTICIPANT_COUNT,
|
MENU_ACTION_PARTICIPANT_COUNT,
|
||||||
MENU_ACTION_ADMIN_TOGGLE_MUTE_PARTICIPANTS,
|
MENU_ACTION_ADMIN_TOGGLE_MUTE_PARTICIPANTS,
|
||||||
|
MENU_ACTION_TOGGLE_BINAURAL,
|
||||||
};
|
};
|
||||||
|
|
||||||
/*! The conference menu action contains both
|
/*! The conference menu action contains both
|
||||||
@@ -170,6 +171,8 @@ enum conf_sounds {
|
|||||||
CONF_SOUND_PARTICIPANTS_MUTED,
|
CONF_SOUND_PARTICIPANTS_MUTED,
|
||||||
CONF_SOUND_PARTICIPANTS_UNMUTED,
|
CONF_SOUND_PARTICIPANTS_UNMUTED,
|
||||||
CONF_SOUND_BEGIN,
|
CONF_SOUND_BEGIN,
|
||||||
|
CONF_SOUND_BINAURAL_ON,
|
||||||
|
CONF_SOUND_BINAURAL_OFF,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct bridge_profile_sounds {
|
struct bridge_profile_sounds {
|
||||||
@@ -197,6 +200,8 @@ struct bridge_profile_sounds {
|
|||||||
AST_STRING_FIELD(participantsmuted);
|
AST_STRING_FIELD(participantsmuted);
|
||||||
AST_STRING_FIELD(participantsunmuted);
|
AST_STRING_FIELD(participantsunmuted);
|
||||||
AST_STRING_FIELD(begin);
|
AST_STRING_FIELD(begin);
|
||||||
|
AST_STRING_FIELD(binauralon);
|
||||||
|
AST_STRING_FIELD(binauraloff);
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -259,6 +259,8 @@ type=bridge
|
|||||||
;sound_unlocked_now; The sound played to an admin after toggling the conference to unlocked mode.
|
;sound_unlocked_now; The sound played to an admin after toggling the conference to unlocked mode.
|
||||||
;sound_error_menu ; The sound played when an invalid menu option is entered.
|
;sound_error_menu ; The sound played when an invalid menu option is entered.
|
||||||
;sound_begin ; The sound played to the conference when the first marked user enters the conference.
|
;sound_begin ; The sound played to the conference when the first marked user enters the conference.
|
||||||
|
;sound_binaural_on ; The sound played when binaural audio is turned on
|
||||||
|
;sound_binaural_off ; The sound played when binaural audio is turned off
|
||||||
|
|
||||||
; --- ConfBridge Menu Options ---
|
; --- ConfBridge Menu Options ---
|
||||||
; The ConfBridge application also has the ability to
|
; The ConfBridge application also has the ability to
|
||||||
@@ -297,6 +299,7 @@ type=bridge
|
|||||||
; using the '&' character as a delimiter.
|
; using the '&' character as a delimiter.
|
||||||
; toggle_mute ; Toggle turning on and off mute. Mute will make the user silent
|
; toggle_mute ; Toggle turning on and off mute. Mute will make the user silent
|
||||||
; to everyone else, but the user will still be able to listen in.
|
; to everyone else, but the user will still be able to listen in.
|
||||||
|
; toggle_binaural ; Toggle on or off binaural audio processing.
|
||||||
|
|
||||||
; no_op ; This action does nothing (No Operation). Its only real purpose exists for
|
; no_op ; This action does nothing (No Operation). Its only real purpose exists for
|
||||||
; being able to reserve a sequence in the config as a menu exit sequence.
|
; being able to reserve a sequence in the config as a menu exit sequence.
|
||||||
|
|||||||
Reference in New Issue
Block a user