Tap temp
Discussion générale entre passionnés et amateurs de mathématiques sur des sujets mathématiques variés
-
Carat
- Messages: 9
- Enregistré le: 22 Juil 2013, 09:29
-
par Carat » 22 Juil 2013, 09:39
Bonjour à tous,
Je suis programmeur et je développe en ce moment une application pour Windows Phone qui fait office de metronome et de Tap Tempo. (Pour ceux qui ne savent pas ce qu'est un Tap Tempo, il s'agit d'un bouton sur lequel on clique en rythme sur une musique, pour en connaître le BPM.)
Pour y arriver, je me base sur le nombre de millisecondes écoulées entre chaque Tap.
Voici cette liste:
0
396
827
1251
1708
2170
2554
3020
3419
3853
4283
4706
5121
5554
5983
6468
6899
7315
7753
8172
8613
9060
9496
9925
10354
10776
11197
11649
12092
12543
12985
13421
13826
...
Comme vous pouvez le remarquer, s'agissant d'un TAP manuel, la precision laisse grandement à desirer (pourtant, je vous jure que je me suis appliqué :))
Voilà mon soucis: je recherche désespérément une méthode de calcul qui me donnerait le plus vite possible un BPM assez précis.
Il existe des utilitaires qui arrivent à résoudre un BPM assez proche de la réalité (+/- 0.2 BPM) en seulement trois ou quatre TAP...
J'ai tenté le calcul de moyenne standard, j'ai tenté le nombre total de MS / nombre de TAP... mais rien de satisfaisant... j'ai des variations parfois de 1 ou 2 BPM entre deux TAP...
Ha oui, la precision de mon BPM est de deux decimales (au cas où ça changerait quelque chose :))
Si quelqu'un avait une idée, ça serait vraiment chouette :)
Seb
-
ampholyte
- Membre Transcendant
- Messages: 3940
- Enregistré le: 21 Juil 2012, 07:03
-
par ampholyte » 22 Juil 2013, 10:42
Bonjour,
A partir du moment où l'on touche au manuel c'est assez délicat de trouver des algorithmes rapides et précis.
Que penses-tu de cette solution ?
On calcule une moyenne (non pas avec l'ensemble des valeurs) mais en retirant les valeurs "les plus fausses". Par exemple en fixant un seuil de différence entre deux pulsations. Si la différence entre deux pulsations est supérieur au seuil, on ne prendra pas cette différence entre compte lors du calcul de la moyenne.
Comprends-tu ce que tu te proposes ?
-
Carat
- Messages: 9
- Enregistré le: 22 Juil 2013, 09:29
-
par Carat » 22 Juil 2013, 10:49
Salut Ampholyte,
Merci beaucoup pour ta réponse... mais la question qui me vient (dans ma petite tête de programmeur) c'est: comment definir un seuil acceptable?
Mon programme va de 0.01 à 240 BPM, sans oublier le fait qu'on ne peut pas savoir à l'avance le tempo de la musique que l'utilisateur recherche...
Donc, on pourrait se baser sur les trois premiers TAP afin de definir le seuil (trois me semble être le minimum vu le manque de précision)... Trois à quatre TAP (gros minimum) supplémentaires seront nécéssaires afin de pouvoir commencer à détecter un semblant de BPM...
Je viens de simuler cette approche dans mon code et la réalité veut qu'après plus de vingt TAP, la variation d'un TAP à l'autre est toujours trop grande :(
Cette approche est malheureusement trop longue :(
Mais vraiment, merci d'avoir proposé cette solution :)
-
ampholyte
- Membre Transcendant
- Messages: 3940
- Enregistré le: 21 Juil 2012, 07:03
-
par ampholyte » 22 Juil 2013, 12:50
Hum je pensais plutôt à définir un seuil à partir de l'ensemble des valeurs trouvées, ce qui rend la chose plus réel mais plus complexe à calculer.
En revanche d'après ce que tu me dis, tu souhaites définir le nombre de TAP avec au maximum 10 TAP ?
Une autre solution serait de coupler ton système avec un détecteur BPM automatique.
Il y un svn ici :
http://sourceforge.net/projects/beatdetektor/.
Ou encore un autre système
http://aubio.org/download (il y a également les sources)
Je te laisse trouver des informations sur la précision et sur la justesse du BPM trouvé.
Mais peut-être en couplant la résultat des TAP avec celui d'une lib automatique tu pourras affiner ta précision.
-
Carat
- Messages: 9
- Enregistré le: 22 Juil 2013, 09:29
-
par Carat » 22 Juil 2013, 17:46
ampholyte a écrit:En revanche d'après ce que tu me dis, tu souhaites définir le nombre de TAP avec au maximum 10 TAP ?
Je n'ai pas de maximum defini, par contre j'aimerais obtenir un resultat pertinent avec le moins de TAP possible...
ampholyte a écrit:Une autre solution serait de coupler ton système avec un détecteur BPM automatique.
Malheureusement, il ne s'agit ici que d'un TAP BPM, pouvant faire egalement office de metronome... il n'y a aucun son a analyser... (j'avoue, c'est mon projet suivant, un logiciel de mixage, mais nous n'y sommes pas encore

)
Pour l'instant, je ne suis concentre que sur un tap manuel, d'ou ma graaaande frustration

En tout cas encore une fois, merci beaucoup pour ton aide

-
ampholyte
- Membre Transcendant
- Messages: 3940
- Enregistré le: 21 Juil 2012, 07:03
-
par ampholyte » 23 Juil 2013, 08:14
Hum je comprends, tu cherches simplement à déterminer le tempo non pas d'un morceau mais de ce que l'utilisateur pourrait souhaiter.
Du coup je ne suis pas sûr qu'il existe un moyen (sans musique derrière) d'affiner ta recherche avec un nombre de point aussi restreint (3/4 TAP serait pas mal).
Le problème ne proviendra pas d'un algo plus ou moins puissant mais plutôt de l'utilisateur. Supposons que tu es le résultat suivant en fonction du temps)
TAP 1 : 0s
TAP2 : 1s
TAP3 : 1.8s
TAP4 : 3s
Tu ne pourras que faire une moyenne de tempo.
Pourquoi ne pas proposer une fourchette de tempo. En reprenant l'exemple précédent on pourrait prendre la fréquence min et max et renvoyer cette fourchette à l'utilisateur.
TAP 1 : 0s
TAP2 : 1s
TAP3 : 1.8s
TAP4 : 3s
Min : (1.8 - 1) * 60 = 48
Max : (3 - 1.8) * 60 = 72
Tu peux également proposer la "moyenne" entre min et max :
Moyenne : (48 + 72)/2 = 60
Le but étant de définir un seuil entre le min et max pour que l'utilisateur ne puisse pas faire n'importe quoi :
TAP1 : 0s
TAP2 : 1s
TAP3 : 1.2s
TAP4 : 3s
TAP5 : 3.1s
Min : 6 BPM
Max : 108 BPM => Ecart trop grand entre min et max, donc tempo indéterminé.
Je ne pense pas qu'à partir uniquement de quelques TAP on peut faire plus précis puisque c'est uniquement l'action humaine qui en est l'action.
Il est beaucoup plus "simple" (en terme de résultat évidemment) d'avoir un BPM très précis à partir de l'analyse fréquentielle d'un morceau plutôt qu'à partir de 3/4 TAP manuel.
Par ailleurs pour ne pas faire une sorte d'IA permettant au fur et à mesure d'affiner la recherche, je m'explique.
Pourquoi ne pas faire une sorte de "score" de l'utilisateur.
Voici une proposition :
- L'utilisateur TAP 3 / 4 fois, le programme détermine le min / max et la moyenne (quand le seuil n'est pas trop grand)
- A partir de ces résultats, l'utilisateur est amené à choisir précisemment son tempo
- Une fois le tempo choisi, le programme vérifie si le tempo choisi est proche ou non de la moyenne déterminée auparavant (à l'aide d'un seuil par exemple, + ou - 5 BPM par exemple). S'il est proche l'utilisateur marque 2 points, sinon il perd 1 point.
Avec ce score tu peux par exemple t'absternir de demander par la suite à l'utilisateur de devoir choisir manuellement son score et lui renvoyer directement la moyenne.
Ce système a un gros défaut mais cela peut-être une idée à pousser =).
edit : désolé pour le roman !
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 12 invités