mozilla / cubeb-rs

ISC License
67 stars 19 forks source link

Clarifying the goals of `cubeb-rs` #47

Open mitchmindtree opened 4 years ago

mitchmindtree commented 4 years ago

Hi folks! I was made aware of the cubeb and cubeb-rs projects by @padenot after his excellent WebAudio talk at Native Instruments last night. It's exciting to see the Mozilla cross platform audio backend peeking into Rust, I only wish I came across the project sooner.

I am currently one of the main maintainers/developers of the CPAL project, a project that seems to have very similar goals to cubeb though is far less mature and less battle-tested. I am also one of the founders of nannou, a creative coding framework for Rust. We recently received a grant to work on CPAL and improve the state of cross-platform audio in Rust. We've made a few improvements already over the past month or two, but even after the rest of the work we currently have planned we would still be a long way from the exhaustive set of features and backends that cubeb currently supports.

While I think CPAL is making decent progress, cubeb with its experienced team and Mozilla backing has piqued my interest, and I wonder if our efforts would be better combined in cubeb-rs.

This brings me to some questions:

Thanks for your time!

ChunMinChang commented 4 years ago
* Is the ideal goal for `cubeb-rs` to eventually become a pure-Rust (down to the platform API) port and replacement to the `cubeb` C++ library for eventual use within gecko? 

I guess the answer is yes, at least on the major platforms like Windows, Mac OSX, and Linux. But it takes time to convert the cubeb implementation from C/C++ to Rust on different platforms. @kinetiknz might be a better person to answer this.

* Are you interested in seeing `cubeb-rs` used in projects unrelated to the rest of the Mozilla ecosystem? E.g. as the audio backend for a creative coding framework like nannou? Do you have any interest in non-Mozilla devs contributing

IIRC, the main cubeb project is currently used as part of the dolphin project, which is unrelated to the gecko engine.

padenot commented 4 years ago

In addition to what Chun-Min said:

Are you interested in seeing cubeb-rs used in projects unrelated to the rest of the Mozilla ecosystem?

Certainly. As I said during the meetup I'm using it myself for other things (personal projects). We know various other people and projects use it as well.

E.g. as the audio backend for a creative coding framework like nannou?

cubeb will work very well for this. In particular, low-latency input/output with tight latency reporting for all platforms allows for very nice audio/visual synchronization.

Do you have any interest in non-Mozilla devs contributing?

We've been accepting patches to cubeb from non-Mozilla devs more or less since it's creation. Whether it is new backends, new features for existing backends, bug fixes, build fixes for configuration different from what we have/the CI has, etc. I don't expect this to be different for the rust bits of cubeb.

Note that you can see that it's all a bit of a mess right now, with various repos under the developer's account, etc. This is going to be consolidated in a way that makes more sense, hopefully in the short term.

kinetiknz commented 4 years ago

Chun-Min and Paul covered most of it, I think. The plan is for cubeb-rs to eventually be pure Rust down to the platform APIs. The existing Rust backends currently live at https://github.com/djg/cubeb-pulse-rs and https://github.com/ChunMinChang/cubeb-coreaudio-rs. I'll be rewriting the WASAPI backend soon, starting in a couple of months. Also, I'm working on making https://github.com/mozilla/cubeb the master repository for all cubeb-related projects in the very near future.

Contributions and use of cubeb outside of Gecko is very welcome. You can find us on Matrix in https://chat.mozilla.org/#/room/#media:mozilla.org if you'd like to chat in realtime (timezones permitting).

mitchmindtree commented 4 years ago

Thank you all for the quick response! This all sounds really promising, it certainly seems like we share the same set of goals.

I think the first area in which I could start helping significantly might be repo accessibility and documentation. I would be happy to begin submitting PRs for README.mds, CI, examples and API documentation. This might be a nice way for me to familiarise with the code-base while also making the project friendlier to newcomers.

@kinetiknz I might start opening issues/PRs at this repository in the meantime, but I'm happy to move them over to mozilla/cubeb once you make the transfer!

kinetiknz commented 4 years ago

That sounds great, thank you!

djg commented 4 years ago

I wrote djg/cubeb-rs as an experiment and mainly for djg/audioipc-2 to talk to cubeb. There's a lot of language barrier crossing that currently happens:

audioipc (Rust) <=> cubeb-rs (Rust) <=> cubeb (C++) <=> cubeb-pulse-rs (Rust) <=> pulseaudio (C)