Skip to main content

Default USB Audio Device Prioritization

Solstice Pods attempt to provide consistent behavior related to audio when USB devices are plugged in and removed. When USB audio devices are plugged into a Pod, the Pod considers the following properties (from high to low priority) to decide which device will be used for audio capture and playback:

Prioritization by Device Type

  • Speakerphones are the highest priority device type due to their echo-cancelling abilities. A speakerphone will take precedence over standalone speakers and standalone microphones.

  • Standalone speakers and standalone microphones are of equal priority. If a standalone speaker and a standalone microphone are plugged in at the same time it is assumed that they might be used together and both will be available.

  • If there is a tie (for example, between two speakerphones, standalone speakers, or standalone microphones) the next prioritization property will be assessed to break the tie.

Prioritization by USB Port Address

  • Lower USB port addresses take precedence over higher USB port addresses. On a Gen3 Solstice Pod, there are two USB-A ports on the back which may be used. The USB port next to the 3.5mm stereo out jack has a lower port address (USB Port 1) and thus will be prioritized over the USB port next to the HDMI out ports (USB Port 2).

    For example, if there are two USB speakerphones plugged in, the one closer to the 3.5mm stereo out jack (USB Port 1) will be selected over the one next to the HDMI out ports (USB Port 2).

  • If a USB hub is plugged into one of the Pod's USB ports, the same port address logic applies. You may need to play around with the hub to find which port has the lowest address. Keep in mind that this information is only used for breaking ties between devices of equal priority.

Overriding Default USB Audio Device Prioritization

If the default USB audio device prioritization logic does not satisfy the needs of a particular installation, an integrator can override it using the Solstice Open Control API.

One example of this might be high-end room microphones coupled with a conference device that has a camera and speakerphone. In this case, the room-integrated microphones are preferred over the conference device's microphone, and the default prioritization logic can be overridden as follows:

  • Send an HTTP request to the Pod to query the available USB audio devices. Take note of the complete name corresponding to the room-integrated microphones.

    The command:

    curl -s -k -H "Authorization: Bearer $token" https://$POD_IP:5443/v2/info -X GET | jq -r '.usb_audio_devices'

    Note

    Note that the binary jq needs to be installed and in the current PATH environment variable.

    Might return something like:

    [
      "USB-Audio - My Awesome Microphone"
    ]
  • A second HTTP request may then be sent to the Pod telling it to always prefer My Awesome Microphone, if it is available. If the device is not available, normal prioritization logic will be used.

    curl -ki -H "Authorization: Bearer $token" https://$POD_IP:5443/v2/config -X PATCH -d ‘{“audio”: { “usb”: { “microphone”: { “override”: "USB-Audio - My Awesome Microphone" }}}}’

    Warning

    Copying and pasting into some terminals may substitute the wrong quotation mark characters. Writing out the JSON (rather than copying and pasting) is recommended. You can also write the JSON into a file and tell curl to upload it with: -d @audio_override.json

    Note

    Sending the second HTTP request does not automatically change the USB audio selection over to the preferred device. Either restart the Solstice Pod or manually unplug and plug back in the preferred device.

    Tip

    In the above example, rebooting the Pod or unplugging/replugging the room-integrated microphone will enact the override.

    To remove an override, use an empty string in your HTTP request, rather than the name of a device. Factory resets will also clear the overrides.

  • The override can be verified with:

    curl -k -H "Authorization: Bearer $token" https://$POD_IP:5443/v2/config | jq -r .audio

    The above should return:

    {
      "usb": {
        "microphone": {
           "override": "USB-AUDIO - My Awesome Microphone"
        },
        "speaker": {
           "override": ""
        }
      }
    }

Related Topics

Supported Video Conferencing Peripherals

OpenControl API for Solstice