Bonsoir à tous,
J'essaye de développer un counter version MSP qui reprend les fonctionnalités du counter de Max, mais en restant dans le domaine audio. Il s'agit d'un simple phasor et d'un signal accumulator. Et c'est ce dernier qui pose le plus de souci, car on est obligé de le remettre à zéro régulièrement sinon il perd de sa précision une fois qu'il a accumulé trop de données. C'est pourquoi j'utilise l'objet rate pour réinitialiser l'objet de manière cyclique. Par exemple, un rate 4 va le réinitialiser toutes les 4 valeurs en restant synchronisé avec le signal du phasor.
Le compteur en lui-même fonctionne bien, les problèmes arrivent dès que je veux changer les valeurs min et max du compteur.
Exemple :
- Mon rate est à 4
- Mon compteur va donc compter de 0 à 3, puis être réinitialisé.
- Si je change la valeur du rate (par exemple 5), le compteur va compter une fois de 1 à 5 (voire 6 ou plus parfois), et toutes les fois suivantes, il comptera normalement de 0 à 4. Mon problème est que je veux qu'il compte immédiatement de 0 à 4 ! Et là, je m'arrache les cheveux !
Quelqu'un aurait-il une solution à me proposer (sachant que je ne souhaites pas utiliser d'objets externes) ?
Voici 2 vidéos qui montrent le problème, suivies du patch :
http://www.deb8076.eu/Videostutos/CompteurMax.mp4
http://www.deb8076.eu/Videostutos/CompteurMax1.mp
Merci d'avance à tous !
----------begin_max5_patcher----------
695.3oc4XFsaaCBEF9ZmmBjucYQFG.mLoMs8bLUMQroIrYCQ1DszV07rOC1z
51tfIoodoY2PjwD7+4i+yAruaTP3B4VVUH3SfuCBBtaTPfoKcGAsWGDVP2ll
SqLCK75boXSQ33laslpRWwEK+QIKU0LMwQnIQiAyI5VbjtMttEbU6egmYlG4
he9wjH67bsTnDzBl4VeqjSys2o9gwE4Lk4oCerS4Fks23NSRE+Vyj.iqevMc
2LR0MqYMBTGBTU3XP3BpXYH3J8vtezHcyXOoPprnfITVQpXaMQudPtPiQUfD
S6zoNQC7jfln8fliHjqm3ErxctBOyBe7bS3gItBOD5.CO6ZbgLi085CxITwW
Zfx9sF0iPnUf0jbRMGUqYrLG7iXRVlZvGxo6.Bwu+rGsNBBpe6A4B1cvtMil
5hSvDCafjYFi.119WyiHN4wyVsOB01a49lExFqq6p8nYuWq1KX+tN.dQ9bIU
w1APfuVciHEjKS+kqU0HyxIroHID5L+FGcjI.OEUvCDUs96SIi9xt5DJb+bI
NpiaeuXAdofE5hpcdXVl0riPhSnfNIoUmAPIikqn9fEbyVjHmXAeofkO7YO1
Ucp4mDnycUi+uoph83Ey5+rTDzaGUfSvywvYImOUVZ.isvh6Cg8FlA8O.L8V
coEMsEWhchFxEEZVuhVIK2AfSr2JUlKKaK5pAQzCMvNDYuPblIui31dkbdk2
YzXXNW77uGhIJ08+TvVI2TlZmP6oS.OFpYrJEWPUbonyfz0fAvGFzJdVFSz8
UwJ3YqkbgpUD6YY1WMo+BK8pI8oMGPMg8QS5OPPmAcVnI8QJFPMoSP7as6.z
DAOAqe8i1eRd3pWK.Q9HV3vBPjuIjCnQC6CmFVyud2r94z.a98gSjAlSw9no
AUR5uoR+RJ47qtE40vo5KtezeLqvqZI
-----------end_max5_patcher-----------
Hors ligne
Voilà peut-etre une idée :
un simple accumulateur, et un diviseur...
Il y a 2 problèmes majeurs :
- quand on met la borne du compteur à une valeur inférieure à la valeur de sortie du compteur, il saute à 0 (bien sûr), et du coup il perd la périodicité
- on ne peut pas boucler un signal sur lui-même, et donc il faut utiliser un send~ pour délayer d'un vecteur : du coup on perd à chaque remise à zéro de l'accumulateur on prend un vecteur de retard
La solution la plus évidente est de diminuer la taille de vecteur pour diminuer le retard, et de limiter les remises à zéro avec un modulo.
une autre solution serait de se mettre dans un poly~ avec un vs très petit...
Mais je suis intéressé par des améliorations de ce bout de patch !
<pre><code>
----------begin_max5_patcher----------
1261.3oc0Z0taaaCE821OEDBXXaodthjhTRCKEXOGCEExRLNpUlxSe3ksh52
m9bzWrwOjRrasooSrnU9iBLEE08d38dtmKU97zIdKJefU6A9cveAlL4ySmLQ
MjbfIc+dh2pjGRKRpUSyKsb0JFuwal9dMrGZTi+G2BVW8sullWmWx6u6cUKW
Huq+b+tQ3sqJaaJXMpUqez0IMo2myW9gJVZi1ZBvwhGB.CCj+IRtB.j3J38c
OSdl58Vt3i+FL5wWXIugmrhot0eVkmTr6cpy+O0cfncsmbdu4.ki8koSkWlY
IdvY+ivD9A3nNe4VuC5yvtQ0C07uqYZGV9Hbg89nCd.PAGflSDfBkJgCL1Dn
PGcXxOsEPt7XBLNTACHMlDYBSHWFLAcAiSX7rsfMBuorx6byQPQj4HQ7.hFd
5jDzo88zxBgUnVZ+4Q3XDjNSk6JufoA9HQr2NqtUwO8leES3qMIMB5gc287k
Azh0t6snt.d+y.fMPLkmlCZ4fbdCqZSRAntsB7KhG9lmXr9U.qtATkTTTxW9
suBx9YwCH2VXh4d665W0hbNKsrkqVZ7KmkiPUtOQy0En1FkWOHKWn+nKktnL
IaEqt9rSrshlCpBHBQF49oQiWTAeIQkNhNk8eRPI7JBJsqVvNBYF5XddtLyE
3sHgu7IPXQYUFqZOVI+XLxOTxRDFDF5i6HM1kU5PATQ5.JsXBhYwDzfSicqS
pDiKnS9.imrnfsaZtiC1tY6YGlYuRCjOQUUs6GGCw7Gc0Ueqnxhu+7yDXtSj
41XDWzD1PLpmo1.rPnWOXYQaSyS5vsz82O66PTPAJQVcDyHy4QDj2.G5mjUK
DTzVCpOW5FIWijx4za0wJOVSbffGwUOy8Y7fG9Kq.o1MuvA.ZLgpDYSMu8G.
udkfNlVPwjt.slhgJRQntWi.yv.lN9fg6Dxd+6VFOkAxZAhYsVJy8fZbQub3
BQfyCkpb0Mof5ac8vvEYzolK8dQVAa6f04JFpT+SLWLAiu1J51dlbrcHvren
r5pxL1tO4ghYPp9B6ZrkPMCMWJ4GcCJL7tP8mAVI7UwhdlPkFflYSE3tXFcZ
Dz23Q.AQgupjxVuN+Smch1o0r0iYA5tr6jsbrZ4HxnqZtvUX4aXlOmnWBSDR
n1WdPRZfJ1buk9zqzIIckyFubci1c7FZ8Cl6FMl9pJC9c2J5F0e.BP6OoSrR
HtNS9nXVvnqczlpVd5vIg.FopPFDXDVviNoU2HyW7gCEiO0lDLz0KXYTxN0W
sL7zXWTzqJxo2tUlg.GtrPhtgPieBpH536aPMHeqxNPoKZxnN0nwWSeu41Aj
sViFlOT0nAnHl58n5u+69j+JaUN99.UcYaUZu+83YiCdxdyX0M4b02zauYIT
..fONq6yyxX7cS7yxqkbAJu8vMYYqEQs1d7ch878uqCaQREJNBfjU8sydbC.
EaSDDxc6W91DAE4t8KhMAzX2EPGaC9Pcl4Xi0PFWIWDmAN1E6fcHYXjMjOTG
ZPg1jsG4LCJxl34X2siEYC6bjC2vHTaMH2jwq9rVmNIyc.zdd9QrFhK2vP1V
O0QFD1FNZ0o95JKBYEOMJzcY8jw0dVjUkMbmHwXqhoetQP5txRVudCqptaMU
lhnQ0OpOMG5L0Oy45ep5A0qhsIue9p+UD8RpDcb1HZ2rsR2s3CBlwox2yWl9
+jAIiOA
-----------end_max5_patcher-----------
</code></pre>
Dernière modification par flocon (2013-09-20 21:25:09)
Hors ligne
Un grand merci pour ton retour flocon !
Je ne savais pas qu'on ne pouvait pas boucler un signal sur lui-même ! Je comprends enfin l'origine du problème...
Un timing parfait semble donc impossible pour ce type de fonctionnalité.
De mon côté, j'ai trouvé une version fonctionnelle, mais avec un seul objet qui passe par Max (un edge qui envoie un bang au signal accumulator...). Ce n'est donc pas une version 100% MSP, mais elle fonctionne.
Je vais étudier ta version.
<pre><code>
----------begin_max5_patcher----------
1007.3oc0Y0taaBCE82IOEH94ZaFWarCLsNo8bLUMQ.mTlHPDPzxZUyy9v1j
OZDIw353wZk.ECwbOGetm60jWGOxcVwFVkqyWb9gynQuNdzHwP7AF094QtKi
1DmEUItMW1KIQwacuWdo70KSyyX0hqgZGbUTc7yo4K9YIKtVN2Hj2Du6cvA9
7S9jcGcd5vDUrtd2L40NZZh3YVL6WOfnt7wda7X9g6ULZal1Yrx8g67h75pz
WX7qAnIdWBEKKRXWAUDr.Gf3DgxOxw4Y.EpCPQNNxxiVJdhteuLMJa2UpRWH
nj8QqbJq+yJlLJ32QN+9cbmmUD0DaOoASUWrXQFqy0U37L.3EJQMrC7WjBfN
n.e2ygqzbMwhbUuOK5WBhTIDCDmHdZrJit9pbmfuYEcVT9hA.IfnxE3.PWR.
B+umDHS4vlRzkBn+SX.1uad16l+Z1lZY5tybm4lJCQZ8gA4IzDReYFLVCpQZ
18wb8hKVtjwo3SnmFf6DWr9vU9vlHAB8h7DEeEwSW0+fKPQlD4QaLJxQTYlh
TiPo8G4PfcPdRJOpSKxM0ZNtErdJ0dPWHmZGjWshwRLkIo.m9BL6qgNG7MKl
Oi+2mcZzk5zV3YgLz1hqe+6ARe2OSVRHsgRLJiD17Ea9CHJTTnqNC8zrdoQq
DDutrrYbi5IRPhrCYRR.nQw.qji70G25.lJIA78k6.z6vN.6mdXpuF5g18FY
x7DVxB1VSUiPxJ9dAREQ+apbpNlGh1IuEsUdm4DLn90UYGBFxvvWstbcd7Vi
VdcWVjF0ZHngQVzcac7l.FsdSqTQGuE+vgAqrpHeQioqimydyt3hrhxV2BNv
71e.NBgui.gIjPBDLsKVDeUVrUUAgZPijAh35wsFUYgBBz0DBvCCJoJNJi0n
qfl+enW4czK85+jaqEKZnIfpA8nicjQIlO0juYVwhbGuZIV7FFhkuwMmIt80
a45TiTnb08E1E0LLXlnYUa6Mub054HOYywTM3E5.gYRXY0Q2.tAlJqpizgaF
HM6r54nphC+LTFtj90e0D9BaZhNocDSU+R7LcyRyO82aTD17weOuVUrtLd2D
195ycND4Irp5z7Hw6q6v8vemAGcSOmljvxOdSzKSSVUjlW2FCmYQV0P5jGW2
wD1pgDnPDA1kk303UKl.6ESprxA1coinBOw+IisXLgwJDS719s3ZmOQgXh+1
h5COQI710vSA9oFWu8e5iFrgpRfdCKB7D03MW7qrPCYO6ceULIrKOgTwj.a4
ZNpnwI1MlTQNAVNllhUsniEKDpTdWnc0STk5XfBVNpTp2J6FSJYadJedy04p
3aNEa+FY.UZZP2bulO713+5trxQ.
-----------end_max5_patcher-----------
</code></pre>
Hors ligne
Ah bien vu ! J'avais envisagé le count au départ, mais je n'arrivais pas à obtenir ce que je souhaitais initialement.
Cela dit, j'ai développé un peu ton patch et j'obtiens une version fonctionnelle 100% MSP et avec beaucoup moins d'objets !
Le seul défaut est que le compteur se réinitialise dès qu'on modifie la valeur minimale, mais c'est logique vu qu'il commence à compter à partir de cette valeur. Il faudrait que j'ajoute un bout de code pour que la réinitialisation se fasse de manière transparente, en mettant en attente la nouvelle valeur jusqu'à ce que le compteur atteigne la valeur max.
<pre><code>
----------begin_max5_patcher----------
598.3ocyWtrbaBCEFdM7TngksItHwMQ10miNY5fAEG0Aj7.hV2jI9YuBATSi
C0BEEFuAFqq+mOcN+H+rqi2V9ARiG3Nv2.NNO653nZpqAmge63UkcHuLqQML
OF4W7s+v6l9tDjCBUyeBDFB882L1wCblng9DoqSHZi+Pyr1JJqjHTqEZnw8Y
h7GorceuljK50B1WNE4Dwcuhh5dhjMAt+z5vaEiKDbnUZgRKR8caLdpRXYUJ
k380ZZV4XO8qf326I8ap2Ck7Lo.tuq6Wbc6dbilXImWUQXhy3hLbWBRfWBIg
JhD3eAh3+FDI8+PDChX4FtkTa0fKAoNtuTvgNO3R7M33l1cdA71lw1Y1g9L0
BeF.sTY.LruNvW8J.sIZo0AIPCAiY.wl4DCA+6Ho.cEkTXYCxwLCycHSBtNb
HaH41JgIEcJgAktbKxjP6ZQNWHmyY+jTK.BNnIqZeo7Kv1h.wSxJfPnALHZc
XfbP10mX3KiAFDxweDeY7nIU5U7BhVWMB0GzQwFXKlb4B+F5NEr9qZOyIPNB
V23eWdBy3UJpaY4Gs5UKPpYJ8fMvnzjqRNfGaRkub7C4N1XERhgF.lzqCvjy
aYhi1kJ8EVI3M3fTXHZonA6uxng7TQ1oRlkErnXk0YXz3S8sNggSMHUyyqjx
d8eoTs0cs+uQPCusNeL5GwF3z1WPZDTVlfxYSFTWZ2jA8HsnfvlpuJZwdt7d
bChXFdpqld01MilvqqlBzPSJXBWOMgzgSv0kSPczTv5pIrNZJYc0jN0cwqaN
dLV2bbS0j7Gu39G.OLuVc.
-----------end_max5_patcher-----------
</code></pre>
Dernière modification par grigou (2013-09-22 13:59:46)
Hors ligne
Décidément... j'aime me compliquer la vie ! J'étais parti sur tout un système en MSP à base de delta alors qu'un simple min $1 gère tout parfaitement !
Je souhaite développer un counter en version MSP pour améliorer la précision de ma drum machine. Je préfère tout gérer en MSP pour éviter au maximum les imprécisions de timing dues au passage par des objets Max.
Je cherche donc à refaire l'objet counter (avec les mêmes fonctionnalités) en version MSP.
J'ai ajouté la gestion du maximum, car lorsqu'on choisit une valeur max inférieure à la valeur actuelle du counter, il repart à zéro. Et il me reste à ajouter la gestion de la direction (compter en descendant).
<pre><code>
----------begin_max5_patcher----------
739.3ocyX1sjaBBFF9XyUAiG1llB3+c5I85nyNcLJIqcTHihso6Nat1KfZS1
rIUjk3jb.FQTe+d3kO.edgi6Z1dRiK3KfuCbbddgiipJYEN8m63VktOqLsQ0
LWJ42r0+zcY2k3j8bU0j7sjCC0tgQ4MEOQjWAgWA6ql1VUPKIb0CB0W4tTd1
iEzs+nljw6Dher3V.3Xe4AeUIFtBBd33yg0xGdP39ZKxUBQHtOgCNUIzzJkR
b+VcQZ4vU5dB7+riz8RcWmR25tr+H3AYqdYwBYwx2GZ95A.b0TPCdTzDDJO3
EOBZPW.M9FfllhsTwksITxIk7TKaXvwZYXtDU7tOnxFKYSPcFDjjBBeRfADA
a.Q1TxR4VEH6pI6HzbfHrspWAgT.JJZ5jAEFa.ZrJU9fvjifVNoRrpLv.uhQ
.4c3UxXUUDJ+MXw1lDw3lD4uPwegifE3EvRx+AKlXFZqVSpsZDFpBq.3zmhM
BZPedgrS6FLC6GAHak3LBq3RW+OdUvTGKDgLjKlwCaZI5icey8D36HOgkyQ1
CmjPSSRF4cejjrgjYI+BF6ezufSldBxHe6lf7ZgbFi9KRMGvYflzpckhM7XK
BDezTfPHCPPv7f.QiraVBzIyM5YPbGdKla7fIC1qX4jQF720AigcYFCMHyXz
3C9EamPAq+o1qsgik2hEZyqaoYVd+Xc7xj8iEEeererOe3VrR6gEYfL.LI2G
fIi0R4xuqgHGHLP.H.xZqAqGRc9FD1fsnECmYJQdJO83nmoEndntkcELTpeV
Tj+o4JU2maYA87Onm5UKq+0QPCqsNaH5G9rYfiu9bRCuflxKXzSaD9UM5wh7
bB8T8UUjuiIVUWuHtBO0VSd5nI+4US95nofYUSxLliqIu4USd55mPyWeGVCM
IyeLiZRq9N4RHly9NjNZZl8S5z2clvu4ZJQGMEOuZBpglBmWMEqilNCl2ZME
py3NzLCJjVp5LbNMQIN4kE+EhA9YQB
-----------end_max5_patcher-----------
</code></pre>
Dernière modification par grigou (2013-09-22 16:08:48)
Hors ligne
Le seul truc que je ne vois pas c'est comment on peut changer simplement le BPM avec l'objet count~ : avec trunc~ il incrémente forcément chaque seconde.
Et si on scale la sortie, je ne vois pas comment changer la vitesse sans créer une discontinuité dans le compte ...
Hors ligne
ça paraît vraiment bizarre que tu puisses pas avoir de timing "précis" avec les objects max de contrôle. Normalement, le calcul par des objets max n'induit pas d'imprécision de timing. Surtout que là où tu vas le plus perdre de précision, c'est particulièrement dans les passages entre contrôle et msp...
Hors ligne
Pages: 1