nicolasbrailo / PianOli

Android baby game
GNU General Public License v3.0
59 stars 18 forks source link

ability to scroll across keyboard / move up and down in octaves #93

Open RustoMCSpit opened 7 months ago

juleskers commented 7 months ago

Going by the title, I'm guessing you are looking for a broader musical range.

I see two challenges with that:

  1. Merely technical: The app ships with only two octaves of samples for the instruments, so a broader range would require lots of additional sound files.
    This isn't a blocker per set, but historically, we really struggle with sound samples, since none of us currently are in any way musically affiliated.
  2. Scrolling the keyboard is behaviour that would make the app more complicated for the primary audience: very young children. This for me is the big thing. While generally I don't mind "moar features", I would like to understand the motivation better before changing anything that makes babies/3-year-olds less happy.

@RustoMCSpit : could you elaborate a bit on what you hope to achieve? It's always very interesting for us maintainers to learn how people use our project ❤️

RustoMCSpit commented 7 months ago

Going by the title, I'm guessing you are looking for a broader musical range. yes, exactly, the ability to change octaves

Merely technical: The app ships with only two octaves of samples for the instruments, so a broader range would require lots of additional sound files. This isn't a blocker per set, but historically, we really struggle with sound samples, since none of us currently are in any way musically affiliated.

what format are the samples stored in? i can try find creative commons ones.

Scrolling the keyboard is behaviour that would make the app more complicated for the primary audience: very young children. This for me is the big thing. While generally I don't mind "moar features", I would like to understand the motivation better before changing anything that makes babies/3-year-olds less happy.

i just think kids will be happier to play songs they know in the keys they played in. locking kids to middle c with an octave and a half forces drastic transpositions and limits what they can play. if my kid wants to play a certain song, theyre able to tell it's in the wrong key and get confused. it also inhibits their ability to learn the basics of piano as theyre generally locked to c major (and its parallel modes).

the biggest challenge is gui honestly, the settings menu is already designed in a very bizarre way. i suggest turning the final f note into a clickable settings pull-up menu instead (this could be an option? this would get rid of the need of the cog system on the accidentals) or deleting it and using its horizontal space and splitting it between left and right as arrow keys to new octaves

the problem with arrow keys jumpping to new octaves is that we're still locked in c major, just in different octaves. is scrolljng hard to implement?

juleskers commented 7 months ago

what format are the samples stored in? i can try find creative commons ones.

We use mp3, since that is what the Android API we use accepts the easiest. However, if you find any other format (flac, wav, etc), conversion is, for me, a fairly trivial ffmpeg command line operation. (Note: .mid is different, those only have "play this note at time X", without actually having any soundwaves in them, the soundwaves must be known to the playing computer)

As an example: the samples for the "piano 2" instrument:
https://github.com/nicolasbrailo/PianOli/tree/master/app/src/main/assets/sounds/soundset_piano2


locking kids to middle c with an octave and a half forces drastic transpositions and limits what they can play.

I know what you mean, I had to transpose "Frère Jacques/Brother John", and that's about the simplest song you can imagine.
However, don't overestimate how much you can do on a tiny phone screen. Squishing an entire (~2 meter wide!) piano keyboard into ~2000 pixels isn't an easy task.


the biggest challenge is gui honestly

Oh yes, very much agreed!
I think for conveniently playing a song spanning more keys, we would want a way to scroll (or "scroll") without the settings menu, but I'm unsure how to have scrolling UI that isn't accidentally triggered by babies (although: how bad is that?)
Before someone suggests "it could be a setting": Joel Spolsky (stackoverflow founder) on "Choices"

Every time you provide an option, you’re asking the user to make a decision.
That means they will have to think about something and decide about it. It’s not necessarily a bad thing, but, in general, you should always try to minimize the number of decisions that people have to make.

I am not against settings, but I am cautious with them.


the settings menu is already designed in a very bizarre way. i suggest turning the final f note into a clickable settings pull-up menu instead

What is important to keep in mind: The "bizarre way" functions as a screen-locker against baby fingers.
When we write "very young children", we mean 3 months to 3 years. That is: newborns and kindergarten, not able to read yet. That really limits how much you can do in a UI.
The settings menu is intended for the supervising parent, not the child.
It is amazing how many iterations of screenlocker we had that were defeated by "baby wipes their slobbery fist over the screen" (that's drag-up, holds multiple keys simultaneously, and if you're really unlucky, the slobber registers as a touch-and-hold event :sweat_smile: )

I am enjoying this discussion, and learning something from it. Please don't take my hesitance as unwillingness!
I am very much in favour of expanding the age-range that the app is fun for, but I am also trying to do so in a "can I have my cake and eat it too" way :smile:

RustoMCSpit commented 7 months ago

We use mp3, since that is what the Android API we use accepts the easiest. However, if you find any other format (flac, wav, etc), conversion is, for me, a fairly trivial ffmpeg command line operation. (Note: .mid is different, those only have "play this note at time X", without actually having any soundwaves in them, the soundwaves must be known to the playing computer)

i can look into creative commons samples. im not sure if this is usable, they use the .sfz format to produce sound but im sure they have raw audio in their githubs https://sfzinstruments.github.io this has githubs linked and licenses (for example https://github.com/sfzinstruments/karoryfer.black-and-blue-basses/tree/main/Samples/babyblue/fake_det)

I know what you mean, I had to transpose "Frère Jacques/Brother John", and that's about the simplest song you can imagine. However, don't overestimate how much you can do on a tiny phone screen. Squishing an entire (~2 meter wide!) piano keyboard into ~2000 pixels isn't an easy task.

thats why we need octave movement :D

Oh yes, very much agreed! I think for conveniently playing a song spanning more keys, we would want a way to scroll (or "scroll") without the settings menu, but I'm unsure how to have scrolling UI that isn't accidentally triggered by babies (although: how bad is that?) Before someone suggests "it could be a setting": Joel Spolsky (stackoverflow founder) on "Choices" What is important to keep in mind: The "bizarre way" functions as a screen-locker against baby fingers. When we write "very young children", we mean 3 months to 3 years. That is: newborns and kindergarten, not able to read yet. That really limits how much you can do in a UI. The settings menu is intended for the supervising parent, not the child. It is amazing how many iterations of screenlocker we had that were defeated by "baby wipes their slobbery fist over the screen" (that's drag-up, holds multiple keys simultaneously, and if you're really unlucky, the slobber registers as a touch-and-hold event 😅 )

right, well splitting arrow keys on both sides and having to hold the cog could work.

I am enjoying this discussion, and learning something from it. Please don't take my hesitance as unwillingness! I am very much in favour of expanding the age-range that the app is fun for, but I am also trying to do so in a "can I have my cake and eat it too" way 😄

i understadn and thank you!!!