-
Notifications
You must be signed in to change notification settings - Fork 239
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
User stories/usecases/experiences (please add!) #626
Comments
@dvdsk , should we add it here . |
please do, we can always move it to its own issue if we have questions. And thank you very much! |
Something that seems very hard/impossible with rodio now:
I am trying to write an example on how to do this using the current API, maybe I am wrong and it is relatively doable. In that case an example would help out. |
I'm simply adding a few use cases I had in the past -- without re-checking if they would currently be possible already. Sample perfect schedulingThink of a metronome app that needs to schedule its click sound dynamically (the user can control bpm e.g. via a slider), but with utmost temporal precision (you don't want any fluctuation in a metronome). This requires a to have sample/frame perfect scheduling, i.e., one would need to express start playing this sound at sample index i=xxx. Sample perfect loopingSometimes I had to loop sounds also without any gap in the audio output (note that waiting for the sound to finish, and re-schedule it again introduces a gap). This would require to set up a loop information that specifies same Low-latency schedulingI was once trying to implement a kind of drum synthesizer in rodio, where certain key-presses triggered certain sounds. However I noticed that the input latency was way too large for musical purposes. I would assume that mainly comes down to the large default buffer size, and #512 should improve that. |
Very helpful thank you! |
My primary use case: Rust-based music player (iced gui). I got pretty much everything I need out of rodio, without too much hassle either. (All inside of this function). The only thing that I am waiting on (or perhaps, I do not know how to implement. And frankly, haven't tried too much) is crossfade between songs. I do see the fade in / fade out stuff. But that applies more to a setup where you take source A, and source B, then add them into the sink or whatever, then apply it. I add my sources more 'dynamically'. Where once the playing song ends a new one is appended. So there is no point where I can apply it. I had an idea for a potential workaround, but I have literally 0 clue how this library works under the hood (and not too much experience with this type of programming, so I don't think I could help too much). But be able to somehow change when Also, weird bug, when music is playing, and I drag my scrubbing bar, the timer got reset to 0 nano seconds for a split second my comment here. Dunno if it is related at all. |
Thanks for all the feedback!
This is an issue I ran into myself too, good to hear others have trouble with it too. We should make this easy/doable and add a full example. |
I used rodio for music playback in my project termusic: https://github.com/tramhao/termusic . |
Could you specify which features you specifically need for your app? |
From #636 by callum-jones19
|
Some of these are pretty specific and my fall outside the scope of this project/may be implemented I just haven't found them yet, buuut... I would love easier ways to manage channels. Including:
|
Rodio has existed for about 9 years. When it was written there where no audio libraries for rust. Therefore rodio can do everything but not everything perfectly. A lot has changed since then and new libraries have popped up for specific goals such as game-audio (kira) & digital signal processing. This is a good thing in my opinion, when developing a library you have to make choices and they exclude some use cases. When I started maintaining rodio I had a short exchange with the bevy devs (1/3 of rodio downloads are from bevy) about their planned move from rodio to kira. Note the have not migrated to kira as of this writing. See bevyengine/bevy#9076 (comment) I also had a short exchange with the kira dev to see if kira could support all audio usecases, that seems to not be the case. See: tesselode/kira#87 Over the past few weeks we have collected the use-cases for rodio, see issue #626. After talking to the bevy dev and kira dev I made some goals for rodio in my head. Now that rodio is (very) actively maintained we need to write those down and discuss them. That way we do not make contradicting decisions in rodio. Please let me know what you think.
Also, I've used the crate Hodaun as an alternative to Rodio in the past for some of the features it has, mostly automation of parameters. Could be a good place to look for desirable features. |
very useful, we are definitely looking at it closely! |
For my use case, which is a Tauri-based music player (a Rust app with a web UI), it would help a lot to have a callback assignable to source changes directly on the Sink. When one source ends and possibly another begins, it would be great if there's a callback that provides both the ended and newly-begun (if any) source as function params. |
from #349 audio processing without playback (as some sort of lighter implementation of DASP). |
A collection of user stories/usecases & experiences to be used to inform (breaking) api changes.
Please add your own!
The text was updated successfully, but these errors were encountered: