An augmented piano with LeapMotion XR Controller. It assists the player at playing notes in correct rythm, identify chords etc.
-
Movements : https://www.youtube.com/watch?v=EnPYldUcp3Q&list=PLvsOC5PoBqO5ggNxiqPKSkO_ZL5-JctbU
-
Rythm assistant : https://www.youtube.com/watch?v=u1Y226gDEoo&list=PLvsOC5PoBqO5ggNxiqPKSkO_ZL5-JctbU&index=2
-
Scales assistant : https://www.youtube.com/watch?v=C232B-3eK2Y&list=PLvsOC5PoBqO5ggNxiqPKSkO_ZL5-JctbU&index=4
-
Chords assistant : https://www.youtube.com/watch?v=-Vk3yYAOV_4&list=PLvsOC5PoBqO5ggNxiqPKSkO_ZL5-JctbU&index=3
It can be difficult to learn the piano on your own, for many reasons. This may be due to motivation (why continue), a lack of knowledge (without a musical ear, it is difficult to know if a chord is really correct, and in what context it is usable), or even a lack of means. (whether in space, or in money for a piano). The solution we have chosen is to create a piano with LeapMotion Controller, in order to address these issues.
To start, we used Unity and the Unity SDK from LeapMotion. This gave us various selection tools such as the pinching fingers. However, the usefulness being rather limited we decided to make a clean sweep of these features and we have so re made from almost zero. By placing boxcolliders at the end of fingers, we gained a system of simple collisions but easily expandable. We have therefore also introduced the concept of velocity. The latter calculates the speed of movement of the fingers by based on the
We also worked on the movement of the camera on the piano. We need to control
-
camera zoom
-
the x position of the camera
For this, we calculate the difference of the two hands as an influencing variable
on the zoom, and the
You can see an example in action here : vidéo mouvement
What happens when we play? Can we play perfectly in tune? The answer is no, there will always be an accuracy human-related error. If we want to play at a time
A correction formula will therefore have to round our times to the closest quantified value.
To facilitate the learning of different musical scales, and to help find coherent melodies, we offer the player to choose a scale, which will be a working musical framework. All the keys that do not belong to the desired range are then disabled (not produce more sound) and appear grayed out. Note that a D major scale will be correctly adjusted with respect to the shift in semitone value. You can see an example in action here: video range
The next step for a good guide is to inform you in real time if you just played a chord, and tell you which one more precisely. As, in music, everything is cyclical (one C + 12 semitones is a do), we approached this problem with a dictionary of chords and a method of theoretical transposition. First, we start with a dictionary. The latter will include a list of 12 semitones. By example :
new bool[] { true, false, false, false,
true, false, false, true, false, false, false, true }, // C major 7
Each semitone represents a note (do, d minor, d, etc...). We
let's base everything on C and apply transpositions of