Logo

[SM5] Flow-DJ: Automatic song picking by score

Register Log In Back To Forums

Post #1 · Posted at 2018-05-24 05:28:42pm 5.8 years ago

Offline wondible
wondible Avatar Member
3 Posts
Not Set
Reg. 2018-04-17


Last updated: 2018-05-27 12:22pm
Flow DJ

A Stepmania 5 theme mod which replaces music selection with an auto song picker.

https://wondible.com/stepmania/flow-dj_1.0.0.zip

Features

- Selects steps by player score with some variation in target score.
- Prefers songs by inverse play count to maximize variety.

https://wondible.com/stepmania/screenshots/flow-dj.PNG

They Whys

The problem for me was I tended to run through songs in the same order every time. Since I usually to do a kind of warm up/warm down, this also meant I would play the same songs on lower and higher levels in each group. I found the random options to be inconvenient to use and/or restrictive. I tried drunken-shame, but found the challenge adjustment stayed too easy for my taste.

This module picks songs by score independently of fixed orders to mix up the easy/hard ones, and tries to introduce some variation within a session, both for warm up/down, and for difficulty spikes and relaxes. Beyond that it prefers least played songs for variety, with some random noise to prevent it from cycling the same order over and over.

If you use Flow-DJ, you don't have to think about which song to play. Once you find score ranges that work for you, you usually don't have to think about what level to play, though you can tweak the settings as needed. (My range seems to be 60s-80s.) Unlike drunken shame, it pauses between every song, which works for me to monitor how things are going and take a drink.

Limits

Most limits up for discussion if there is sufficient interest. This is built around the way I play and there are probably a lot of issues I have never run into.

- Single player only.
- Stacks on `default` theme only, unlikely to work on all other themes.
- Development started on Stepmania 5.0, and is now on Stepmania 5.1. It should still work with 5.0 and the old default (now legacy) theme, but I'm not running it regularly.
- No means to filter songs. There is currently a hard-coded exclusion of a song group named `Muted` (which I use for songs muted by Twitch)
- Score estimation assumes a single player set the high scores. However you can still request songs based on any target score, even if you won't get that score yourself.
- I play in event mode, and have not tested other modes.
- I play FailOff; providing scores, even bad ones, will help improve the model for estimating scores.
- Runs for a set (but easily configurable) number of songs.
- Always pauses on pick screen (time on this screen is also used to improve the estimated score model.)

Usage

Functionally a theme since that is the only extension mechanism available, Flow-DJ uses the fallback mechanism on the default theme. Install in your Themes folder and select it as the active theme.

The select music screen is effectively replaced with a screen that performs the picks and shows the current queue. The initial view will be a report on the model for estimating scores. It will switch to the normal screen when the model has improved a bit.

Main screen

- Top left: current options
- Top center: Stage number
- Upper left: Song title image
- Lower Left: Score distribution graph, this is intended to show where the next song sits within your overall range of scores.
- Center/Right: song list each item has:
- Grey box: score selection range
- White mark: actual high score
- Blue mark: estimated score
- First line: meter, song name, song group
- Second line: notes-per-second, song artist, steps author


Controls

- START starts the song.
- BACK exits to the title screen.
- SELECT Cycles control modes for the arrow buttons. A short help line is shown on the bottom of the screen, long description follows:

Default Controls

- LEFT/RIGHT adjust the target score used to select songs. One confusing thing is there are only two score numbers: the start/end target used for warm-up/cool-down, and main target. Adjustments will be made to those numbers based on how they influence the current item.
- UP Enables you to go to the standard select music screen to manually pick a song. The song will receive the highest priority for use in the flow, but must still match the score selection conditions.
- DOWN allows you to review the last song's score screen. It is skipped by default.

Alt Controls 1

- LEFT/RIGHT adjust the amount of wiggle or variation in the target scores.
- UP/DOWN adjust the number of stages.

Alt Controls 2

- LEFT toggles playing the music sample from the current song
- UP toggles the view to the model display

Model Screen

The model for estimating scores of unplayed steps is a linear regression over the basic stats and groove-radar values available about each set of steps.

The left side shows the relative size of the weights for each factor.

Right shows a plot of the actual versus estimated scores. A perfect model would be a flat diagonal line. Below the plot, the overall model error is shown.

Bootstrapping

The model for estimating scores relies on high scores. If there are no scores on the current profile (or machine profile if no profile is selected), there is a bootstrapping mode that runs successively higher meters until a sufficiently low score is seen. However, you may wish to simply play a selection of songs in normal play mode to provide startup data.

Credits

The code was made with reference both to Stepmania code, and the Consensual theme in particular. It incorporates pieces of code from both upstream Stepmania (MIT) and Consensual (BSD 3-Clause), especially around saving settings.
The remainder of the original work is Apache License 2.0.

Contact

- https://twitter.com/wondible
- https://github.com/JustinLove/flow-dj
- Gameplay and development sometimes at https://twitch.tv/wondible

Post #2 · Posted at 2018-05-25 07:41:47pm 5.8 years ago

Offline dbk2
dbk2 Avatar Member
332 Posts
Not Set
Reg. 2012-04-30


Last updated: 2018-05-25 07:54pm
This seems like an interesting project! Kudos to that.

After reading your write up, however, I don't have a good sense of what this actually does, and without that, I'm not sure I'm inclined to download it and try it. I think this is unfortunate because it is evident you put a significant amount of time and effort into this.

There are many ways you might describe your work. For example:

• What problem did you set out to solve?
• How does this theme (extension, modification, etc.) attempt to address it?
• If a player were use this, how would a game session be structured differently than, say, "normal" EventMode?


From there, perhaps a little more information on the screenshot you provided might help the statistically-savvy reader out some.

• What are the four columns from left to right? The leftmost appears to be a trend line, but it doesn't appear to be labeled(?).
What exactly are you modeling with linear regression? How is that represented in the screenshot above?

I realize you have a section of your write up dedicated to describing the "Main screen" but it's ... not entirely apparent to me what is what after reading it. Perhaps considering marking up the screenshot with labels? Alternatively, sometimes a video can go a long way in quickly demonstrating what a new feature does/how it works.

I'm really interested to learn more about what you've done!

Post #3 · Posted at 2018-05-26 12:13:34pm 5.8 years ago

Offline wondible
wondible Avatar Member
3 Posts
Not Set
Reg. 2018-04-17

Quote: dbk2
This seems like an interesting project! Kudos to that.

Thanks, that is very helpful feedback. I'll think about how to restructure the readme/post. Meanwhile:

The problem for me was I tended to run through songs in the same order every time. Since I tend to do a kind of warm up/warm down, this also meant I tended to play the same songs on lower and high levels in each group. I found the random options to be inconvenient to use and/or restrictive. I tried drunken-shame, but found the challenge adjustment did not work to my taste.

This module picks songs by score independently of fixed orders to mix up the easy/hard ones, and tries to introduce some variation within a session, both for warm up/down, and for difficulty spikes and relaxes. Beyond that it prefers least played songs for variety, with some random noise to prevent it from cycling the same order over and over.

If you use this, you don't have to think about which song to play. Once you find score ranges that work for you, you usually don't have to think about what level to play, though you can tweak the settings as needed. (My range seems to be 60s-80s.) Unlike drunken shame, it pauses between every song, which works for me to monitor how things are going and take a drink.

Re-describing in terms of columns, left to right (not really how I think of it, so another place for possible rework)

1. Next song title image, and score distribution graph, with selected songs highlighted. The intent was to show where the current sits within your overall score range, but I don't think it worked out very well, as I don't refer to it much myself.
2. Flow graph shows where each song sits in the flow (hard left, easy right)
- Grey box: score selection range
- White mark: actual high score
- Blue mark: estimated score
3. meter, notes-per-second, song name, song artist
4. song group, steps author

Linear regression is used to estimate scores for songs you have never played. Ratings are notoriously all over the place (the regression found a heavily overrated 10, for instance) I might be a bit biased against note-per-second from drunken-shame, but there are several factors beyond just speed that might affect the difficulty for a particular player. I'm assuming that high scores represent "easy" songs and low scores represent "hard" songs, in a very player dependent way. The regression fills in the missing data for new songs, or just a step level you have never played before.

Regression isn't very evident in the screenshot. It is mainly visible in the blue estimated-score marks. The distribution graph also includes estimated scores when no actual score is available, but these are not identified there. There is a separate model view for the curious, but I don't use it during typical play, though it does appear briefly before each round as some model startup/improvement is done.

Post #4 · Posted at 2018-05-27 08:15:20pm 5.8 years ago

Offline dbk2
dbk2 Avatar Member
332 Posts
Not Set
Reg. 2012-04-30


Last updated: 2018-05-27 08:27pm
I understand much better now! Thank you for taking the time to explain it all.

It's definitely a hefty technical accomplishment, so kudos to that. I often find I have the same problem of picking the same, safe (but, tired) songs, so this seems pretty helpful.

It seems like, broadly, your idea could be incorporated into a "workout mode" (which often gets requested on Reddit to be part of Simply Love...). That might be something to consider if it interests you. And, if not, what you've already accomplished is pretty cool! Smile

Post #5 · Posted at 2018-05-28 11:07:00am 5.8 years ago

Offline wondible
wondible Avatar Member
3 Posts
Not Set
Reg. 2018-04-17

Quote: dbk2

It seems like, broadly, your idea could be incorporated into a "workout mode" (which often gets requested on Reddit to be part of Simply Love...). That might be something to consider if it interests you. And, if not, what you've already accomplished is pretty cool! Smile

It kindof is, but I was never interested in the workout modes I've seen. I'm not concerned with calories, and at least one game would edit the steps to remove the off-beat notes.
Register Log In Back To Forums

0 User(s) Viewing This Thread (Past 15 Minutes)

©2006-2024 Zenius -I- vanisher.com -5th style- IIPrivacy Policy
Web Server: 4% · Database: 4% · Server Time: 2024-03-29 11:12:26
This page took 0.006 seconds to execute.
Theme: starlight · Language: englishuk
Reset Theme & Language