Symphonia icon indicating copy to clipboard operation
Symphonia copied to clipboard

Status of OPUS Codec

Open perfectmak opened this issue 4 years ago • 33 comments

What is the status of work on the opus Codec? I see it marked as next in the readme, is there an ETA for release?

perfectmak avatar Apr 11 '20 00:04 perfectmak

Work on Opus hasn't started yet, but it's the next item on the road map.

Before I can begin work on Opus the OGG branch must be merged. However, before I can do that I first need to re-work some of Sonata's public API. This work is about 80% complete.

pdeljanov avatar Apr 11 '20 18:04 pdeljanov

Okay. Thanks for the update. I'll keep an eye on the repository in the meantime.

perfectmak avatar Apr 11 '20 19:04 perfectmak

Hi, any status updates on this? I'd love to replace libopus with a pure rust thing in one of my projects and Symphonia looks most promising.

Gelbpunkt avatar Nov 06 '20 17:11 Gelbpunkt

Hi @Gelbpunkt,

The prerequisite work noted above has been completed, however I'm afraid to say that not much progress has been made on the Opus decoder itself.

I'm on a bit of a temporary hiatus from my personal projects at the moment so I wouldn't expect anything soon.

pdeljanov avatar Nov 11 '20 04:11 pdeljanov

Some time has passed; any news on opus?

Beiri22 avatar May 29 '21 10:05 Beiri22

Sorry to say, but there's not much to report. :confused: Haven't had the time to do much beyond bug fixes. I'd suggest looking for alternative crates if you need Opus support.

pdeljanov avatar Jun 02 '21 13:06 pdeljanov

Hey @pdeljanov, can I give this a go?

thinking-tower avatar Jun 13 '21 06:06 thinking-tower

@thinking-tower, please, go ahead. You can use the opus branch to get you started. It contains all the required boilerplate and gets you to a point where you can work on decoding the audio packets. It just needs to be brought up-to date first. Best of luck!

pdeljanov avatar Jun 13 '21 14:06 pdeljanov

@pdeljanov I'm still working on this ticket btw! Thanks for your patience 😄

thinking-tower avatar Aug 15 '21 20:08 thinking-tower

Hey @thinking-tower, that's good to hear! Are you running into any challenges or issues?

Opus is a pretty complex codec, so feel free to submit multiple PRs to the opus branch. I believe that Opus will prompt some changes in symphonia-core, for example, adding arithmetic decoding to the BitReaders, or more DSP routines to the dsp module. We could collaborate on these changes if there is a central branch we can work off of.

pdeljanov avatar Aug 17 '21 00:08 pdeljanov

@pdeljanov At the moment, not any issues yet. I like the idea of splitting up the commits into multiple PRs!

thinking-tower avatar Aug 19 '21 06:08 thinking-tower

Hi @thinking-tower! Are you actively working on a decoder for Opus? I would like to help with the implementation.

darksv avatar Jan 31 '22 16:01 darksv

Hi @darksv,

Thanks for volunteering to work on this. Let's wait a bit longer to give a chance for @thinking-tower to respond, but as far as I know the Opus decoder hasn't been actively worked on in a long time.

There are two Opus related branches. The first is the opus branch which was my first attempt from two years ago before I focused my attention onto other priorities. The second, newer, branch is opus-dev which is where @thinking-tower was submitting PRs to.

It would probably be worthwhile to first bring opus-dev up-to-date, then port the remaining code from opus over to it. We can then make opus-dev the official Opus branch going forward.

I think for Opus you should aim for smaller PRs that can be merged into opus-dev. That way I, and other developers, can contribute to the effort. Opus is really two codecs in one, and will also likely drive many changes to symphonia-core and symphonia-utils-xiph.

pdeljanov avatar Feb 03 '22 05:02 pdeljanov

Hi @darksv and @pdeljanov, I am still working on the Opus decoder. I'm definitely happy to receive help!

@darksv I'm currently just debugging the official repo (https://github.com/xiph/opus) to get a better feel of how the decoding process works, are you familiar with Opus yourself?

@pdeljanov Thanks again for your patience!

thinking-tower avatar Feb 03 '22 06:02 thinking-tower

are you familiar with Opus yourself?

@thinking-tower Not really. I've read some parts of the RFC and looked into the official implementation a bit, but I'm not very familiar with Opus just yet.

darksv avatar Feb 05 '22 11:02 darksv

Perhaps this work should be divided into SILK and CELT sub-codecs. SILK being used for lower bandwidth speech and CELT is for higher bandwidth music, typically.

SunnyWar avatar Jan 24 '23 15:01 SunnyWar

I'll pay a bounty (~$500) to whomever lands opus / e1a70095c4409478c1ded499fb8dd4afa540fb90.

This is important for dealing with web uploads as browser APIs use opus.

Bonus points if media duration is easy to extract.

echelon avatar Apr 30 '23 07:04 echelon

I will match @echelon's offer. Also 100$ partial bounties for :

  1. bringing opus-dev recent upto master
  2. any complete SILK implementation
  3. any complete CELT implementation
  4. if 1 and 2 has been achieved integration of 1,2 algorithms
  5. any sub task as @pdeljanov sees fit.

all determinations as to (sub-)task completion decision is upto @pdeljanov and obviously these are payable to @pdeljanov as well (in this case I will request for tests to be implemented as well for objective review of achievement)

chris-ha458 avatar Sep 12 '23 11:09 chris-ha458

I think i might start with 1 myself

chris-ha458 avatar Sep 12 '23 11:09 chris-ha458

I just found this repository opus-native, which aims to implement opus codec in pure Rust.
From a rough glance at its codes, it seems that it can help others implement the codec at least.
Maybe it is worth sharing this information here. :)

JSDurand avatar Sep 18 '23 05:09 JSDurand

@JSDurand thanks for mentioning opus-native. But it seems that not only do the tests do not pass, they don't even compile atm.

chris-ha458 avatar Sep 18 '23 05:09 chris-ha458

@chris-ha458 Yes, that is not finished. But it did implement some decoding logics, such as the range decoding, and the outer-most decoder logic. I am not familiar with this topic, so I cannot tell how completed it is, though. Just thought this might help the implementers if they did not know about that repository previously.

JSDurand avatar Sep 18 '23 05:09 JSDurand

@JSDurand thanks for that link, it'll be helpful for me.

@chris-ha458 How are you getting on with this? I've got some time to work on this now.

thinking-tower avatar Oct 28 '23 09:10 thinking-tower

I think the only fair and reasonable approach would be to defer to the maintainer atm.

chris-ha458 avatar Oct 28 '23 14:10 chris-ha458

I was working on this before, so I'll continue. I'm happy to work with anyone interested.

thinking-tower avatar Oct 29 '23 00:10 thinking-tower

Hey, can I ask what the current state of this is? I would assume the API changes mentioned earlier are done and that the OGG implementation is now at a point where the opus codec can be implemented?

This looks interesting and I might take a shot at it over the weekends (no promises though). @thinking-tower are you still actively working on this? And if so, what are you working on atm?

FreezyLemon avatar Jan 23 '24 22:01 FreezyLemon