Skip to content
GitLab
  • Menu
Projects Groups Snippets
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in / Register
  • Opus Opus
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 30
    • Issues 30
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 3
    • Merge requests 3
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Packages & Registries
    • Packages & Registries
    • Container Registry
  • Monitor
    • Monitor
    • Incidents
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Wiki
    • Wiki
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • Xiph.Org
  • OpusOpus
  • Issues
  • #2358
Closed
Open
Created Jun 24, 2021 by Francis Quiers@cisquiers

Excessive noise generated by CELT PLC

We recently came across a situation where bursty loss resulted in relatively loud noise in output of the Opus decoder.

The previous frames (before the gap) were all encoded as CELT, and since the gap was more than 5 frames, the noise-based CELT PLC eventually got triggered (because of this piece of logic), and this is when the noise starts.

The problem can be reproduced using the following branch, which is based on tag v1.3.1, plus an extra option in opus_demo in order to be able to feed a stream that does not include the "final range" check, but only each packet's length (or 0 for a lost packet) followed by the opus data: https://gitlab.xiph.org/cisquiers/opus/-/tree/opus_demo_support_for_decoding_external_streams

The commands to run are the following:

./autogen.sh
./configure --enable-fixed-point
make
./opus_demo -d 48000 1 -external_stream stream.opus output.pcm

Input stream: stream.opus

Output raw audio (mono, 16-bit, little-endian, 48kHz): output.pcm

Note that I tried to reproduce the problem by starting from raw audio (either using silence, or a small negative DC as what the stream decodes to prior to the gap) and encoding it using opus_demo, but I wasn't unable to do so. Unfortunately I don't have access to the original raw audio, or the source code for the client that generated this stream. I cannot actually guarantee that the encoder that was used was a vanilla Opus release, without any custom modification that could perhaps have generated this (perhaps slightly unusual?) bitstream (particularly the DC offset). However, since the bitstream appears to be valid, perhaps the CELT decoder should still not generate such a noise in output in this case.

Assignee
Assign to
Time tracking