Documentation

Support

Vivox Core SDK

Vivox Core SDK

Reduce Opus CPU load on low-powered Android devices

How to reduce Open CPU load.
Read time 1 minuteLast updated 20 hours ago

If you need to reduce the Vivox CPU load for lower-power Android devices, the Vivox SDK exposes the
vx_opus_set_complexity
method to set the algorithmic complexity of the codec to another value. The Vivox SDK uses a default complexity value of 9, but you can set this down to 0 to reduce the CPU usage. The lower the value, the more the audio quality is negatively affected. For example, in a speech signal test where the complexity value was decreased to 0, the encoding time decreased to 39% of the default settings (Complexity: 9, Bandwidth: Auto).
It is also possible to use the
vx_opus_set_bandwidth
method to change the audio bandwidth that Opus uses. If you pass the
vx_opus_bandwidth::opus_bandwidth_nb
value, this also reduces the CPU usage, but might have a significant negative impact on audio quality. Lowering the audio bandwidth makes the audio signal sound duller by discarding high frequency content.
Note that reducing complexity has more impact on CPU use reduction than changing the audio bandwidth. For example, a speech signal test with a complexity of 0 combined with
vx_opus_bandwidth::opus_bandwidth_nb
got the lowest CPU time of 27% of the CPU time of the default settings (Complexity: 9, Bandwidth: Auto).
If either of these methods do not reduce CPU use enough, you can use the Siren14 codec, which takes 14% of the CPU time of Opus at its default settings. To use the Siren14 codec, perform either of the following actions:
  • When you initialize the SDK, update
    vx_sdk_config_t
    to set the
    default_codecs_mask
    field to
    VIVOX_VANI_SIREN14
    .
  • When you create your connector object, update the
    vx_req_connector_create_t
    request to set
    default_codec
    to
    VIVOX_VANI_SIREN14
    .