-
-
Notifications
You must be signed in to change notification settings - Fork 17
Description
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
f32format. 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 likeOpus. - We need to figure out how to make the API friendly to
asynccode, as well as create examples on how to use them in bothasyncand 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
Labels
Projects
Status