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

[feat] Let's do "fugue machine" #3: Ping-pong playback mode #8

Open
tildebyte opened this issue Feb 16, 2020 · 36 comments · Fixed by #43
Open

[feat] Let's do "fugue machine" #3: Ping-pong playback mode #8

tildebyte opened this issue Feb 16, 2020 · 36 comments · Fixed by #43
Assignees
Labels
enhancement New feature or request

Comments

@tildebyte
Copy link
Collaborator

Third of some ideas to give us a UX a little more like FM.

UX thought: Use the "reverse" button - first tap reverses, second ping-pongs, third goes back to forward.

@tildebyte tildebyte added the enhancement New feature or request label Feb 16, 2020
@tildebyte
Copy link
Collaborator Author

@millxing; Now that #4 has been addressed and merged, I'd like to think about this issue.

I don't think it will be difficult to implement; the real question here is UX.

My initial thought had been a 3-state on the current 'reverse', i.e. default: forward; press -> reverse; press again -> pingpong; press again, back to forward... but I've not convinced myself that that's a good idea.

Do you have any ideas as to how to present this to the user?

@tildebyte tildebyte self-assigned this Mar 2, 2020
@tildebyte
Copy link
Collaborator Author

@millxing; Incoming PR tomorrow, assuming testing goes well :)

@ben-alkov
Copy link
Contributor

@millxing, @justmat; PTAL @0f0bf0c - This works quite nicely, better than I expected; the three-state to change playback modes is actually pretty intuitive.

WDYT?

@millxing
Copy link
Owner

millxing commented Mar 3, 2020

Ben, I'm confused about how to try this out. Are you going to make a PR to the millxing/quence repo? Thanks, Rob

@tildebyte
Copy link
Collaborator Author

@millxing; Yes, I was planning to, but I wanted to get some feedback before that.

If you want to try running it from my branch, do

# add my fork as an additional remote source
git remote add tildebyte https://github.com/tildebyte/QUENCE.git
# Sync all remote sources. This lets git know what branches are available.
git fetch --all
# Checkout my topic branch locally
git checkout ping-pong
# Don't forget; when you're done, `git checkout` back to whichever branch you were on before so you're not working in the wrong branch ;p

@justmat
Copy link
Collaborator

justmat commented Mar 3, 2020

@tildebyte, just had a short play with your ping-pong branch. Seems like everything is working to me! I do sort of wish there was an indicator/icon for playback mode on the screen, but it's pretty intuitive as is.

@tildebyte
Copy link
Collaborator Author

tildebyte commented Mar 3, 2020

@justmat; Thanks! Yeah, I debated about this, and I'm loathe to change the button layout at all; I love the symmetry and really inspired use of negative space which @millxing originally came up with.

I've been toying with the idea of a SUBTLE change to the play_mode button - maybe solid for forward (as-is)/slow, gentle reverse "downward" pulse for reverse/slow, gentle triangle pulse for pingpong - but that's mere ideation at this point :)

@justmat
Copy link
Collaborator

justmat commented Mar 3, 2020

The button pulsing is a great idea!

@millxing
Copy link
Owner

millxing commented Mar 3, 2020

I'm digging it!

I'm not sure I've got a handle on the logic of this function. It seems like when I'm in PP mode and moving to the right, if I hit the reverse led then it switches to reverse mode. If in PP mode and moving to the left, if I hit the reverse led then it switches to forward mode. Is that correct?

I guess I was expecting that if it was in PP mode and I hit the reverse button, then it would move to forward mode (w/o PP), regardless which direction it ws currently moving. There's probably a reason you did it the way you did that I'm not seeing.

I do think some way of identifying PP mode is needed and I love the idea of a pulsing LED when in PP mode.

@tildebyte
Copy link
Collaborator Author

Nice! I’m glad you like it!

First: “reverse” button should really be “play_mode” now.

So, yeah, it’s a 0-1-2 cycle thing:

  • 0 - forward
    • press “play_mode” -> reverse direction
  • 1 - reverse
    • press “play_mode” -> ping-pong BUT! immediately first switches to forward direction. Yeah, it’s a little weird, and could probably be changed to only switch once it hits the “end” of it’s current play.
  • 2 - ping-pong
    • press “play_mode” -> back to forward, regardless of current direction
  • 0 - forward… etc.

I think the switch from reverse play direction to forward play direction when pressing “play_mode” from reverse mode is an artifact of my, er, design “process” (i.e. throw code until something works 😁). I think you’re right; intuitively and symmetrically, the reverse->ping-pong transition should complete its current play in its current (reverse) direction.

Also, already pondering pulsing LEDs :)

@tildebyte
Copy link
Collaborator Author

@millxing, @justmat; OK, just now the UX counterexample popped into my head...

As a user, if I'm playing a sequence in reverse and I press the play_mode button, I have no immediate indication that ping-pong mode has engaged IF I have to wait until the sequence finishes it's current play.

Now I'm not sure what to do :(

@justmat
Copy link
Collaborator

justmat commented Mar 4, 2020

I have no immediate indication that ping-pong mode has engaged

Wouldn't the solid/reverse ramp/pulsing LED clarify what mode the user is in?

@millxing
Copy link
Owner

millxing commented Mar 4, 2020

Wouldn't the solid/reverse ramp/pulsing LED clarify what mode the user is in?

That was my reaction also

@tildebyte
Copy link
Collaborator Author

LOL! Foiled by my own logic ;p

@tildebyte
Copy link
Collaborator Author

@millxing, @justmat; Not super-happy with this, but it works and works well.

I had high ambitions but in the end all of the grid light hijinks I tried ended up not working or not working very well.

PTAL if y'all don't mind.

N.B.:

  1. This is an invasive change which puts grid updates on their own metro.
  2. I feel like the "play head" (i.e. row 1) isn't consistent, i.e. speeding up and slowing down, but I can't tell if it's just me (possibly related to 1 above?).

Questions for y'all:

  1. Does the grid display seem smooth (try different tempos)?
  2. Does the grid display update rate seem consistent?
  3. Do you think that the play mode button flashing is a good feature?
    1. Can you easily tell the difference between play modes?
    2. Do you think, in particular, that forward play is flashing too fast?

@justmat
Copy link
Collaborator

justmat commented Mar 31, 2020

I'll take a look this morning.

@justmat
Copy link
Collaborator

justmat commented Mar 31, 2020

So, everything seems to be working well. One nit/gripe is that I'm finding it hard to distinguish between playback modes. Maybe we could clean up the screen drawing a bit, then just add playback mode indication to the screen?

@ben-alkov
Copy link
Contributor

Not at all a bad idea, but requires enough screen real state to give indications for all 4 tracks...

Of course, this could minimally be something like "→→←↔" (not sure about norns' character set).

@justmat
Copy link
Collaborator

justmat commented Mar 31, 2020

We would need to draw the icons, or use one of the graphics libraries available. Or we could just use letters like F, R, and P. There are definitely ways we could regain some screen real estate, for instance we could switch to screen.font_face(26) (i think it's 26, i'd need to look to be sure) which is a smaller 6pt font called "tom thumb". With adjustments to spacing and a smaller font there might be enough room for another row.

@justmat
Copy link
Collaborator

justmat commented Mar 31, 2020

We could also just put BPM and Tonic on the same row, something like this...

test-m

@millxing
Copy link
Owner

Sorry guys, but I haven't had a chance to take a look at the new changes. Work has been nutty. Will try to do it tonight.

Hope you guys are safe and healthy.

@tildebyte
Copy link
Collaborator Author

@millxing; NP! IRL comes first :)

@justmat; The norns fonts don't include symbols? poo...

I think putting tonic up there with bpm is OK. I'm going to take a look at the smaller face as well, though, to see what I think.

@justmat
Copy link
Collaborator

justmat commented Mar 31, 2020

@millxing we are doing well here. Just living that at home life. :)

@tildebyte, No symbols, as far as I am aware.

I was thinking, if we decide to put bpm and tonic on the same line, It might read a little clearer if we use a brighter text for descriptors. It would look something like global bpm : 60. Maybe set the descriptors 2 levels above the values?

@tildebyte
Copy link
Collaborator Author

@justmat; Oh, nice idea. +1 on that.

Yeah, the fonts are pretty basic, so the best we could hope for would be like -> | <- | -> | <>, but I don't know how I feel about that...

@tildebyte
Copy link
Collaborator Author

@justmat; Like so? ;p
norns_ss
Apologies, from my phone; dratted screenshotting isn't working for me:

s_export_png("/home/we/screenshot.png")
lua: 
stdin:1: attempt to call a nil value (global 's_export_png')
stack traceback:
	stdin:1: in main chunk

@tildebyte
Copy link
Collaborator Author

BTW, @justmat, @millxing; If y'all don't like the blinky play mode light, just say so - you will not hurt my feelings ;p

@justmat
Copy link
Collaborator

justmat commented Mar 31, 2020

The screenshot command changed! I spent way too long tracking down the new command just before posting my screenshot lol. It's _norns.screen_export_png("path/stuff.png").

https://llllllll.co/t/norns-help/14016/2242

The brighter descriptors look much better to me! It may be annoying to write, but maybe the delimiters in the play mode line should be brighter as well?

Also re: play mode led, I think my vote is for a more simple play mode light. Maybe just pulsing with the bpm? With the play mode displayed on screen, it just doesn't need to be complex anymore.

@tildebyte
Copy link
Collaborator Author

I feel like if I'm not using it to indicate play mode, I'd rather the play light be static, like it is now...

@justmat
Copy link
Collaborator

justmat commented Mar 31, 2020

That works, and falls in line with the current UI design. lgtm

edit: oh! almost forgot, Tom Thumb font is screen.font_face(25) not (26), and if you want to use it, you should set the font_size to 6.

@tildebyte
Copy link
Collaborator Author

@justmat, @millxing; OK, I just pushed a final commit, and I think I have a finished feature. Try it out and let me know what you think. If you're OK with it, I'll open a PR.

@millxing
Copy link
Owner

millxing commented Apr 1, 2020

Just tried it out and it looks good to me! Nice work. Alexandernaut would be proud.

BTW, I follow him on Twitter and apparently he's been working on a new secret project for 3 years. Very curious to see what he's coming out with next. Fugue machine is a great app.

@tildebyte
Copy link
Collaborator Author

Nice! I’m glad you like it :)

@justmat
Copy link
Collaborator

justmat commented Apr 1, 2020

LGTM! I love the way you handled the redraw function. screen_write() is a clever idea that I wouldn't have thought to do. :)

@millxing
Copy link
Owner

millxing commented Apr 2, 2020

I just noticed a bug in ping-pong mode. I'm not sure how it happened or how to replicate it.

https://share.icloud.com/photos/0gbfOBEWjtBCkLgU0MNubOi3w

The video shows that the playhead is moving in reverse, but the screen shows all playheads moving forward.

@millxing millxing reopened this Apr 2, 2020
@millxing
Copy link
Owner

millxing commented Apr 2, 2020

In this state, if I hit the direction button (R6,C16), it changes the direction to forward, but now the screen indicates that it's moving in reverse.

@tildebyte
Copy link
Collaborator Author

Rats. OK, I'll take a look as soon as I can.

@millxing; Thanks for the report!

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

Successfully merging a pull request may close this issue.

4 participants