Run FreeSWITCH with Engage Adapter

  1. Start Freeswitch, load the Adapter module if not loaded automatically:
    cd /usr/local/freeswitch/bin
    ./freeswitch
    load mod_imm_adapter
    

    The following log will be shown if Freeswitch started and the Adapter module is loaded successfully:

    Trying to load immersitech conference at: ../mod/libimmersitech.so
    The Immersitech Conference library version is v0.08.012
    2020-04-08 15:17:09.731354 [INFO] mod_imm_adapter.c:191 Subscribed to conference custom events!
    2020-04-08 15:17:09.731354 [CONSOLE] switch_loadable_module.c:1804 Successfully Loaded [mod_imm_adapter]
    2020-04-08 15:17:09.731354 [NOTICE] switch_loadable_module.c:412 Adding API Function 'imm_adapter'
    +OK Reloading XML
    +OK
    
  2. Optionally, you can view Version information about your product by typing following command into a Freeswitch Command Line Interface:
    imm_adapter get_version
    
    

    The output from this command which look something like the following:

    Engage Adapter Version: v0.01.014
    Engage Core Version: v0.01.036
    Sound Manager Version: v0.08.012
    
  3. To configure SIP softphones (Linphone or Zoip) to register to Freeswitch and let softphones join to the same spatial conference, dial a number in the range of “3500 - 3599” (which is the default stereo conference number in the Freeswitch dial plan). Spatial audio should be heard once they have joined the conference successfully.

Default Behavior

By default, a new participant will enter a round table room with 8 fixed seats. You can view the Default room layout (labeled as “default”) by using following command:

imm_adapter get_json_all_room_layouts

The spatial position of any participant can be viewed by using the get_participant_position commands.
All new participants will be assigned to specific seat one by one starting from index 1.
The following example gets the exact position of participant 2 in room 3500.
You can also just get which seat the participant is in as well.

imm_adapter get_participant_position 3500 2
imm_adapter get_participant_seat 3500 2

Any participant can be moved to any seat, resulting in a change in their spatial sound field.
You can move a participant to a new seat with the set_participant_seat command.
The following is an example of a participant with id 1 that will be moved to the seat with index 2 in conference 3500:

imm_adapter set_participant_seat 3500 1 2

You can change or view the state of any participant in real time.
There are several state changes you can make detailed further at \ref IMM_CONTROL_START "imm_audio_control".
For example, let us use the set_participant_state function to turn on Automatic Gain Control for participant 2 in conference 3500:

imm_adapter set_participant_state 3500 2 IMM_CONTROL_AGC_ENABLE 1

For detailed API commands explanation, please refer to the following API commands chapter.

Engage Freeswitch Adapter API commands:

Once the Immersitech Engage Freeswitch Adapter is running, you can apply several API commands in real-time to change the state of the audio effects.
You can apply these commands manually through the freeswitch command line (fs_cli) or programmatically through a freeswitch interface.
To display a list of all commands available to you in the Immersitech Engage Freeswitch Adapter, enter the command “imm_adapter” and the list of API commands within the adapter will be listed as below:

imm_adapter

Usage:

get_version
get_license_info
get_library_configuration
get_json_all_room_layouts
get_room_count
get_room_layout <room_id>
get_participant_count <room_id>
get_participant_position <room_id> <participant_id>
get_participant_seat <room_id> <participant_id>
get_participant_state <room_id> <participant_id> <control>
get_participant_configuration <room_id> <participant_id>
get_participant_name <room_id> <participant_id>
get_participant_spherical <room_id> <listener_id> <source_id>
set_room_layout <room_id> <layout_id>
set_participant_name <room_id> <participant_id> <name>
set_all_participants_state <room_id> <control> <value>
set_participant_state <room_id> <participant_id> <control> <value>
set_participant_position <room_id> <participant_id> <x> <y> <z> <azimuth_heading> <elevation_heading>
set_participant_seat <room_id> <participant_id> <seat_id>
set_log_level <log_level>

The above set of functions exactly mirrors the functions in \ref immersitech.h (without the imm_ prefix) and the functions in \ref emw-commands.
To learn the details of these functions or parameters, visit either of the linked locations.