Skip to content

Batteries-included network streaming nodes #76

@BillyDM

Description

@BillyDM

I get a lot of questions about how to use Firewheel to stream audio over the network.

We do have StreamReaderNode and StreamWriterNode, but they are a bit low level and I would like if there was a batteries-included solution that is much easier to use. However, a robust streaming audio player has a lot of tricky details and design decisions to make:

  • The existing stream nodes currently don't do any declicking, so there will be audible clicks/pops when the user pauses/resumes or when the audio skips when correcting for jitter. We need some way to reliably detect when these cases happen. The easiest solution might to be do declicking on the handle side instead of the audio processor side.
  • There is currently no way for the audio processor to automatically request more samples from the network. I am unsure what the API for this should look like.
  • The existing streaming nodes currently only work with samples that are already decoded into deinterleaved f32 format. But this is an inefficient use of bandwidth for real network use. Ideally we should provide an easy way to send/receive network packets coded in something like Opus.
  • We need to figure out how to make the API friendly to async code, as well as create examples on how to use them in both async and manual threads.
  • We might need to add a way to cache a given amount of samples in the past and in the future, given that seeking a few seconds behind/ahead is quite common. (see https://github.com/MeadowlarkDAW/creek for more details on caching)
  • The existing streaming nodes do automatically account for jitter, but we need to find the best default parameters to use that best balance latency and robustness for most use cases.

Also I personally have almost no experience in network programming, and so I would like some feedback from someone who does know more about it. What should the API for such a thing look like, and am I doing anything wrong in my current streaming nodes?

Alternatively if someone who knows more about streaming audio over the network wants to create and maintain their own third party nodes in their own repositories, I could link users to that in Firewheel's readme!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    Status

    Ready

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions