Calculer la durée d'un pas selon le tempo et la signature rythmique - Algo - Programmation
Marsh Posté le 18-11-2012 à 12:15:03
Salut,
Pour la signature rythmique, le chiffre du bas est une puissance de 2 qui ne dépasse pas 16 (j'ai jamais vu plus, en tout cas) --> juste pour info.
Si tu as la signature n/p, au tempo t correspondant à p (exemple : pour 7/8, p = 8 c'est-à-dire une croche, le tempo sera donc donné à la croche), avec d la durée de chacun des 128 pas :
d = (n*60/t)/128
Marsh Posté le 18-11-2012 à 12:36:44
Ok, salut, merci déjà pour ça.
Si tu pouvais me donner le même exemple avec une signature 3/4 ou 4/4 ce serait parfait je pense.
Marsh Posté le 18-11-2012 à 12:52:16
C'est-à-dire ?
3/4 c'est trois noires par mesure, 4/4 quatre noires par mesure, etc..
La formule marche toujours, si on se fixe comme règle générale que le tempo est défini par le nombre de (p) par minute, la durée du pas ne dépend pas de la valeur de p (2 pour blanche, 4 pour noire, 8 pour croche, 16 pour double-croche, sont les valeurs usuelles même si 2 et 16 sont rares)
Marsh Posté le 18-11-2012 à 14:11:22
simius_computus a écrit : C'est-à-dire ? |
Je dois construire un système qui prend en paramètre la signature rythmique.
Je doit définir à partir de la signature, le nombre de pas par mesure et la durée des pas.
simius_computus a écrit : |
Avec une signature 4/4 j'aurais pas la même durée de pas que pour 4/8. Puisque le dénominateur vaut une noire en premier lieu et une croche en second, c'est bien ça ?
Autre question :
Pour le moment, je sais que je travaille avec une signature 4/4 et en tout cas 32 pas par mesure.
J'applique ((60000.0/tempo)/8)/1000.0 pour avoir la durée d'un pas.
Donc, avec une signature n/p je devrais avoir des mesure de combien de pas ?
Marsh Posté le 18-11-2012 à 15:44:17
tu as dit dans le 1er post que tu gardais un nombre de pas constant par mesure !
Ben si la durée sera la même (si je prends l'hypothèse de départ de 128 pas par mesure) puisque si par ex ton tempo est de 120, avec 4/4 ce sera 120 à la noire (120 noires par minute), et avec 4/8 ce sera 120 à la croche (120 croches par minute), croches et noires n'ont dans l'absolu pas de durée.
Ou alors tu définis ton tempo comme étant toujours par rapport à la noire, dans ce cas pour un tempo donné sur une mesure à 4/8 effectivement les mesures dureront 2x moins longtemps donc pareil pour le pas.
32 pas par temps tu veux dire ?
Explique clairement quelles sont tes données de départ, celles que tu veux faire varier et celles qui resteront constantes..
J'ai jamais bossé avec du midi, je pensais que la définition était constante, en nombre de pas par seconde.
Marsh Posté le 18-11-2012 à 16:09:27
Je pense pas qu'on verra le midi ici, c'est juste pour construire la musique en fonction de la signature.
Au départ dans le projet j'ai pas vraiment de constante, aujourd'hui j'ai fait un truc sans me soucier de la signature, je comprend pas comme la signature interviens dans l'architecture musicale.
Mais maintenant que tu es là, , je vais tout comprendre et je vais reprendre le projet au début en intégrant les paramètres rythmiques.
Si non, j'ai rien capter.
Pour spécifier mes besoin un peut, donc un noire une croche n'on pas de durée dans l'absolue.
Alors je commence par quoi pour construire mon système musicale ?
J'ai besoin de construire des phrases d'un certain nombres de pas tout en voulant jouer toujours des double croche.
Pour ça il me faut borner un tableau du nombre de pas en question, j'ai besoin du nombre de pas phrase, si ce ne sont des mesures...
Et il me faut placer les notes en fonction de la signature, et calculer la durée des pas pour jouer au tempo.
est-ce que c'est plus clair ?
En tout cas merci pour tes réponses.
Marsh Posté le 18-11-2012 à 17:49:46
Bon en gros pour une signature n/p tu dois avoir n notes (ou silences) de valeur p dans une mesure, p étant une puissance de 2.
p = 1 correspond à une ronde
p = 2 une blanche (dure deux fois moins qu'une ronde)
p = 4 une noire (dure deux fois moins qu'une blanche)
p = 8 une croche (...
p = 16 une double-croche (...
Ce sont des fractions en fait :
Une mesure à 7/8 pourra par exemple être remplie par 7 x 1/8 (huit croches donc), ou par 2 x 1/4 + 3 x 1/8 (deux noires et trois croches), ou encore 1/2 + 1/4 + 1/8 (une blanche, une noire, et une croche). Dans l'ordre qu'on veut évidemment, le tout est que la somme soit égale au quotient donné en signature.
On peut également introduire des valeurs ternaires (qui cependant ne sont jamais utilisées en tant que dénominateur dans la signature), comme le triolet qui représente 1/3 de la durée d'une noire, soit 1/12; triolet de noires 1/3 d'une blanche soit 1/6; sextolet 1/6 d'une noire soit 1/24. D'autres valeurs impaires moins communes : quintolet (1/5 d'une noire), septolet (1/7 d'une noire)
Note bien qu'à aucun moment on ne parle de durées en secondes.
Maintenant si on fixe un tempo, par exemple 120 à la noire, ça voudra dire que ta noire durera 0.5s, ta croche 0.25s, etc.
120 à la croche donnera 1s pour la noire, 0.5s pour la croche, etc. Bref..
Selon les besoins de la musique on peut avoir dans un même morceau des changements de tempo, et/ou de signature.
Ensuite pour les pas, le problème c'est que si ton morceau contient à la fois des double-croches (1/16) et des sextolets (1/24), si tu veux avoir le même débit de pas sur tout le morceau, c'est-à-dire diviser chaque mesure en un nombre constant de cases permettant de structurer la musique, il faudra que ce nombre soit le plus petit multiple commun entre double-croches et sextolets; exemple si la signature est 4/4 ça donnera 192 pas/mesure (48 par noire, soit 3x16 et 2x24)
Mais l'idéal serait d'avoir un premier aperçu de ton programme, j'ai du mal à visualiser pour le moment.
Marsh Posté le 18-11-2012 à 18:11:21
Ok, merci bein, beaucoup pour ça. Je pense que la réponse est là.
Mon projet en est à la version 0.1.3 : dans http://jovalise.net/dev
Si tu lis Ada; Le paquet q.ads dans src/lib définit le nombre de pas par temps donc, si tu le dis...
Après dans le src/quatuor je donne à q-sequencer.ads un facteur de ce nombre de pas, qui étaient des bar à l'origine pour moi.
En suite comme tu peux le voir le quantum pour chaque pas est calculé sur la base hypothétique d'une signature constante 4/4.
Je vais réviser, augmenter mon programme grâce à toi. Merci beaucoup donc.
A propos:
Citation : Ensuite pour les pas, le problème c'est que si ton morceau contient à la fois des double-croches (1/16) et des sextolets (1/24), si tu veux avoir le même débit de pas sur tout le morceau, c'est-à-dire diviser chaque mesure en un nombre constant de cases permettant de structurer la musique, il faudra que ce nombre soit le plus petit multiple commun entre double-croches et sextolets; exemple si la signature est 4/4 ça donner 192 pas/mesure (48 par noire, soit 4x16 et 3x24) |
Effectivement, c'est ce que je cherchais à faire dans un premier temps. Donc, à ton avis, je fais des mesures de 192 pas et je peut faire la musique que je souhaite ?
Reste à savoir comment je vais gérer la signature après pour composer la musique....
Je te laisse regarder un poil le projet écrit avec Ada, je suis certain que tu retrouvera le C plus tard.
Le code est pas commenté dans cette version du projet par contre, je suis dessus, si tu veuxdes commentaire, signale le moi.
Marsh Posté le 18-11-2012 à 18:18:57
Ah non, mais c'était pour l'exemple.... Allah là.
Donc, je vais relire avec le doigt.
Dans mon programme la signature va être un paramètre variable, peut-être.
Marsh Posté le 18-11-2012 à 18:50:44
Je vais essayer de voir ça, sans rien garantir mais bon
Sinon j'ai édité mon post entre-temps :
Citation : ... exemple si la signature est 4/4 ça donnera 192 pas/mesure (48 par noire, soit 3x16 et 2x24) |
(j'avais écrit 4x16 et 3x24 )
Marsh Posté le 18-11-2012 à 19:25:40
Ok, merci pour les corrections.
Si non, voilà ce que je veux faire à la base.
1# ./main |
Et après tous générer automatiquement. Enfin, le plus possible.
Mais c'est très abstrait encore aujourd'hui. Vu que je connais que très peu chacun de ces styles
Marsh Posté le 18-11-2012 à 20:02:23
C'est très ambitieux comme truc quand même.
Concernant l'utilisation des RDN ça se passerait comment ?
Marsh Posté le 18-11-2012 à 21:00:23
simius_computus a écrit : C'est très ambitieux comme truc quand même. |
Une entrée/sortie du réseau correspond à une note sur le clavier.
En suite un tire les n note sur le clavier pas par pas où l'on souhaite des notes.
A l'initialisation une note joué doit valoir 1.0, 0.0 si non.
En sotie du réseau les notes jouées sont sensées avoir une valeur supérieur ou égale à 0.5 et inférieur si non.
La j'ai eu la flemme de faire des échantillons., alors j'initialise tout aléatoirement, et j'interroge aléatoirement aussi + une intervention du clavier maître sur les basse et Lead.
edit : inférieur si non.
Marsh Posté le 19-11-2012 à 23:12:25
Bonjour,
J'essaie de battre la mesure en fonction de la signature mais j'ai pas compris en fait, j'ai tout essayé, je ne sais même plus ce que je doit faire à l'instant.
Un bout de code pour afficher la position dans la mesure et afficher boom ! quand il faut, mais c'est loin d'être le cas.
Code :
|
Marsh Posté le 19-11-2012 à 23:31:39
Ah, je crois que j'approche...
Code :
|
Marsh Posté le 20-11-2012 à 00:52:45
simius_computus a écrit : |
T'es certain de ta formule, parce que je fait des essais et je m'approche d'avantage de la vérité, ou alors, je ne sais pas écrire la musique mais bon.
j'ai fait ((60000/t)/2**p)/1000.0, mais j'ai un boum sur deux pas dans la position mais dans le temps. Si non, mon boom colle avec la position. Mais donc aucun des deux dans le temps.
Ah, j'essaie un truc et je reviens.
edit correction de ma formule.
Marsh Posté le 20-11-2012 à 01:32:49
Je colle le dernier code, maintenant que j'y suis donc, le code complet actuel pour bien comprendre.
Code :
|
Donc, les calcul semble bon, j'ai essayé quelques trucs, sauf que j'ai un boum sur deux dans le temps à comparer avec ce que j'écris comme musique habituellement.
Alors une question de théorie, en techno pose- t- on un kick au temps et à contre temps ? Je pense pas, mais sait-on jamais... j'y connais rien.
Celui qui me répond parfois je le ban. lol
Marsh Posté le 20-11-2012 à 01:57:57
En fait le code ci-dessus me va parfaitement.
Merci. merci simius, merci beaucoup, si tu as un complément ou au cas ou je me goure encore, merci de me corriger encore.
Marsh Posté le 20-11-2012 à 09:41:12
J'ai quand même un problème là. jusque la ça allez, mais là j'ai plus mon boom à chaque temps. J'y suis allé doucement pourtant je sais ce que j'ai fait, je vois pas mon erreur.
Le mieux c'est de tester le truc, parce que c'est chelou.
Genre, j'ai un boom au 4 premier pas, puis 1 toute les mesures puis encore tout les pas .. etc.
Si vous voyez...
Code :
|
Merci pour le coup de main.
Marsh Posté le 20-11-2012 à 09:57:25
Ca y est j'ai trouvé. Dans le If not Is_Empty, faut écrire
Code :
|
Bon j'attends mon amis Simius pour qu'il valide mes compétences.
Marsh Posté le 20-11-2012 à 11:18:34
Si tu obtiens ce que tu voulais, pas de souci. En fait si je devais créer un compositeur virtuel je pense que je m'affranchirais de la nomenclature musicale, en raisonnant juste sur des pulsations, le regroupement de ces pulsations en mesures, et le tempo définissant l'espace entre 2 pulsations (tempo qui peut être flottant si tu veux que ton programme fournisse une interprétation non-robotique). Ensuite les notes seront jouées sur des subdivisions paires ou impaires, avec une durée qui pourra déborder (exemple un coup de cymbale).. Mais bon courage pour obtenir un programme qui compose de façon cohérente, encore une fois c'est très ambitieux, on a déjà du mal à faire des logiciels d'écriture musicale capables de jouer les choses de façon un peu "humaine", alors si on ajoute l'aspect composition
Marsh Posté le 20-11-2012 à 11:26:12
Si tu réussis à créer une vraie IA tu pourras lui payer des cours de musique par contre, en plus de lui apprendre à parler
Marsh Posté le 20-11-2012 à 12:08:35
simius_computus a écrit : Si tu obtiens ce que tu voulais, pas de souci. |
Faut voir. En fait, j'ai ceci à l'affichage :
Sign: 6/ 8 ; Tempo:1.740E+02 ; Bar beat: 2. 1. 7 |
Avec 8 constant, j'ai un kick à chaque fois que le nombre du milieu de Bar_Beat change. Quelque soit le numérateur. je me demande si c'est normal...
Marsh Posté le 20-11-2012 à 13:55:59
A quoi correspondent les chiffres de "Bar_Beat" ?
Marsh Posté le 20-11-2012 à 14:11:12
simius_computus a écrit : A quoi correspondent les chiffres de "Bar_Beat" ? |
En théorie....
Le premier chiffre c'est le numéro de mesure selon la signature courante.
Le second, c'est le temps dans la mesure
le dernier est le numéro de note dans un temps selon de dénominateur de la signature.
Je suis en train de tester une signature pouvant prendre 1..16/1...16 en tirant les deux aléatoirement. à chaque mesure. Ca donne pas mal.
Marsh Posté le 22-11-2012 à 13:50:21
Bon, ça va pas du tout ça.
Qui c'est qui m'aide ?
S'il vous plaît !
Marsh Posté le 22-11-2012 à 18:03:25
Je ne comprends pas bien ta définition des deux derniers chiffres.
Pour moi une mesure en 6/8 est une mesure à 6 "temps" (6 pulsations on va dire, le "temps" étant la définition de la durée d'une noire, or là ce sont 6 croches mais ça n'a d'importance que dans la notation musicale); Donc le "temps dans la mesure" ce serait la place de ta note dans la mesure, par exemple 4 pour une note placée pile au milieu.
"numéro de note dans un temps selon le dénominateur" je ne vois pas
Marsh Posté le 22-11-2012 à 20:32:54
simius_computus a écrit : |
Merci simius déjà pour ça.
Je suis en train de prendre un exemple sur un soft existant.. Je crois qu'en fait, j'étais pas très loin de ce qui se fait.
Faut que je réfléchisse.
Marsh Posté le 22-11-2012 à 22:07:17
Donc, merci encore Simius. je crois que je vois le bout de la fin.
Voici ce que j'ai fait avec Ada. Le but est d'afficher correctement les information de la division du temps en musique.
Un paquet déclarant les types de base.
Code :
|
Une paquet fournissant le type ad'hoc pour mesurer le temps.
Code :
|
Le main qui affiche l'information sur le transport et incrémente celle ci au tempo correspondant.
Code :
|
Marsh Posté le 21-06-2012 à 21:54:29
Bonjour,
Je cherche comment calculer la durée d'un pas selon le tempo et la signature rythmique.
Pour le moment j'ai une résolution fixe de 128 pas par mesure.
Pour calculer la durée d'un pas avec une signature rythmique 4/4 je fais : ((60000.0/tempo)/32.0)/1000.0
Ainsi, pour un tempo de 120.0 je passe 8 mesures en 16 secondes.
Mais comme je digère pas les wikipedia sur la théorie musicale, je reviens ici en espérant avoir un indice.
Merci.
Message édité par Profil supprimé le 21-06-2012 à 21:58:22