This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

Opus - SILK vs CELT

Hi,

I wish to have a complexity comparison of SILK and CELT (CPU usage and memory footprint) as I have an audio (speech) encoding and decoding application, I think this might be done already for "Smart Remote" Application.

Is it possible to use SILK instead of CELT to reduce bit rate along with BLE stack running in an nRF52811 or nRF52832?

  • Hello,

    it is possible to use SILK instead of CELT, but bear in mind that SILK generally uses more RAM and CPU resources than CELT.

    We have generally avoided SILK for this reason, and that CPU usage for SILK varies a lot more based on the audio input. CPU usage is more consistent when using CELT.

    Don't expect to be able to run Opus (SILK or CELT) on the nRF52811. Opus stack usage alone is in the order of 20 KiB.

    Smart Remote 3 (SR3) uses Opus v1.2.1. It has been modified to remove the Opus hybrid mode (which automatically chooses SILK and CELT at runtime) such that the choice of using SILK or CELT has to be made at compile time. Hybrid mode required too much RAM to use on the nRF52832.

    The SR3 codebase might be a good starting point for your comparison.

    I have some data for various CELT configurations already, in case you might find this useful. Adding this below.

    -Audun

  • Hi,

    Thank you very much for the answer. Do you have a similar table for SILK, and have you tried any other codec like speex (obsolete but I think it has low CPU requirement)?

    I am asking this because my application is speech and CELT is better for audio/music as per their documentation.

  • No problem!

    Sadly I don't have any updated metrics for SILK.

    The only data point I have at hand is from several years ago that showed CPU usage in the range of 40-100% even when using SILK complexity 0. Average bitrate in this case was around 19 kbit/s, but this varies based on the audio contents.

    Regarding SILK vs CELT for voice, I don't think CELT is a poor choice for voice, but you might be able to get lower bitrate audio with SILK at the same quality as a higher bitrate CELT stream.

    If you haven't already, I would encourage you to evaluate different bitrate and mode combinations using for example opus-tools (http://opus-codec.org/downloads/) using relevant audio samples.

    (Note that opus-tools uses the floating point Opus implementation, while the SR3 implementations uses fixed point)

    I do have some sample code that loops an audio sample through an Opus encode-decode cycle and measures RAM and CPU usage. This was used for a CELT metrics assessment, but should work for SILK as well. If you think this might be useful, I can send you an email with the code.

    - Audun

Related