Symphonia
Symphonia copied to clipboard
Status of OPUS Codec
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?
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.
Okay. Thanks for the update. I'll keep an eye on the repository in the meantime.
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.
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.
Some time has passed; any news on opus?
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.
Hey @pdeljanov, can I give this a go?
@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 I'm still working on this ticket btw! Thanks for your patience 😄
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 BitReader
s, 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 At the moment, not any issues yet. I like the idea of splitting up the commits into multiple PRs!
Hi @thinking-tower! Are you actively working on a decoder for Opus? I would like to help with the implementation.
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
.
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!
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.
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.
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.
I will match @echelon's offer. Also 100$ partial bounties for :
- bringing opus-dev recent upto master
- any complete SILK implementation
- any complete CELT implementation
- if 1 and 2 has been achieved integration of 1,2 algorithms
- 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)
I think i might start with 1 myself
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 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 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 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.
I think the only fair and reasonable approach would be to defer to the maintainer atm.
I was working on this before, so I'll continue. I'm happy to work with anyone interested.
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?