Skip to content
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

Add swng, spin, slsh to serial commands #716

Open
wants to merge 5 commits into
base: master
Choose a base branch
from

Conversation

NoSloppy
Copy link
Contributor

This not only adds good functionality for testing sounds and such, but facilitates access to trigger these sounds via remote control apps.

hybrid_font.PlayPolyphonic(&SFX_slsh);
return true;
}
if (!strcmp(cmd, "spin")) {
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This needs to be in #ifdef ENABLE_SPINS

Copy link
Contributor Author

@NoSloppy NoSloppy Dec 11, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

@@ -1376,6 +1376,18 @@ class PropBase : CommandParser, Looper, protected SaberBase, public ModeInterfac
}
return true;
}
if (!strcmp(cmd, "swing")) {
hybrid_font.PlayPolyphonic(&SFX_swng);
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

swing is a lot more complicated than this, as it can be monophonic or polyphonic, swng.wav or swing.wav
Perhaps we should even consider breaking the function in hybrid font into a swing-detection function and a swing playing function, and then we could just call the playing function from here.

Or even better, have the detection function emit an event, and then do the playing in SB_Event2...

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hmm. Does this small "perk" feature warrant all that?
Would it suffice to just check if swng OR swing exist and then play one that does with PlayCommon()?

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If it's worth doing, it's worth doing right....

I think what you suggest would be the minimum needed though.

Splitting it out in the code has other advantages though, because sending events means that blades and displays get to react to swing events, if they want to.

Dropping "swing" command for now and just checking in the other two is also a valid solution.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've updated things to a rough start that works. Monophonic stuff needs to be considered next, but how does it look so far now?

Copy link
Owner

@profezzorn profezzorn left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Overall I like it, needs some work, but I think it's going in the right direction.

@@ -320,9 +320,15 @@ class HybridFont : public SaberBase, public Looper {
float s = (rss - font_config.ProffieOSMinSwingAcceleration) / font_config.ProffieOSMaxSwingAcceleration;
effect->SelectFloat(s);
}
swing_player_ = PlayPolyphonic(effect);
current_swing_effect_ = effect;
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't want to pass the effect in a global variable like this.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hmmm. Are you thinking a singleton something instead?
Maybe another class needs to be created, or somehow add a parameter to SB_Effect?
I am not sure what to do instead.
Is there a problem with the use of the global variable?

@@ -320,9 +320,15 @@ class HybridFont : public SaberBase, public Looper {
float s = (rss - font_config.ProffieOSMinSwingAcceleration) / font_config.ProffieOSMaxSwingAcceleration;
effect->SelectFloat(s);
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should probably happen in SB_Effect() now.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

well wouldn't that mean it would need to be repeated for both EFFECT_ACCENT_SWING and EFFECT_ACCENT SLASH cases? Is it not neater to keep it in just one occurrence where it is?
Or again, is this lending itself to all of these changes somehow in a new class or function?
This is starting to grow out of my ability to brain this.

@@ -39,6 +39,8 @@ extern SaberBase* saberbases;
DEFINE_EFFECT(POWERSAVE) \
DEFINE_EFFECT(BATTERY_LEVEL) \
DEFINE_EFFECT(VOLUME_LEVEL) \
DEFINE_EFFECT(ACCENT_SWING) \
DEFINE_EFFECT(ACCENT_SLASH) \
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Probably want to add one for spins too.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants