IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Algo Quantiser valeur à la volée


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 18
    Par défaut Algo Quantiser valeur à la volée
    Bonjour à tous!

    Voici mon problème, je vais essayer d'être clair, c'est pas évident...
    - Ma fonction reçoit une valeur comprise entre 0 et 127 de type int. (c'est un programme de convertion midi pour ceux à qui ça parle)
    - Je dois renvoyer cette valeur à une autre fonction après l'avoir modifié de la sorte:
    Valeur maximale (variable)
    Valeur minimale 0
    Type double
    L'idée étant que la valeur 0 reçue corresponde à la valeur minimale, la valeur 127 à la valeur maximale, et que les valeurs intermédiaires soient réparties équitablement entre ces deux extrêmes.
    La complication supplémentaire est que je voudrais que ces valeurs soient arrondies au "quart" le plus proche (x.0, x.25, x.50, x.75....)
    Et tout cela sans libraire externe, sous python 2.5 maximum, et bien sûr avec la meilleure performance possible niveau cpu...

    Même si vous avez juste des pistes à me donner, ça serait bien (je débute en python, je connais pas bien encore toutes les fonctions disponibles)

    Merci d'avance

  2. #2
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 060
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 060
    Par défaut
    Bonsoir,

    J'ai pas tout compris!

    - Je dois renvoyer cette valeur à une autre fonction après l'avoir modifié de la sorte
    Quelle fonction? Elle va faire quoi cette fonction? Changer un nombre type int en type double?

    La complication supplémentaire est que je voudrais que ces valeurs soient arrondies au "quart" le plus proche (x.0, x.25, x.50, x.75....)
    Une solution sur papier?

    Et tout cela sans libraire externe, sous python 2.5 maximum, et bien sûr avec la meilleure performance possible niveau cpu...
    Et 100 balles et un mars aussi, non?

    Propose un début de code ou d'algorithme, rien que pour montrer que tu as cherché...

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 18
    Par défaut
    Merci pour ta réponse rapide. Désolé, je me suis dit qu'en expliquant tout, ça embrouillerait plus que ce clarifierait ce que je cherche. Mais bon, je me lance:

    Il s'agit d'un programme de musique (Ableton Live). Il permet de créer des programmes en python pour interpréter les messages midi reçus depuis une "surface de contrôle" et d'accéder à son api. Exemple: je peux faire en sorte que lorsque la surface de contrôle envoie le message midi x, je déclenche une fonction de mon choix dans le logiciel en utilisant son api.

    En l'occurrence, la fonction que j'essaie de créer modifie le point de départ d'un fichier audio. Le contrôleur envoie des valeurs entière allant de 0 à 127, je dois alors les interpréter pour régler ce point de départ dont la valeur est exprimée en "beat" (unité musicale, j'ai pas fait d'erreur d'orthographe . Le nombre de valeurs possibles à renvoyer à l'api dépend de la longueur du fichier et suit cette règle:
    1 (beat 1), 1.25 (subdivision du beat 1), 1.50, 1.75, 2 (beat 2), 2.25 ... X (longueur en beat du fichier musical)

    Ce que j'ai réussi à faire via la fonction ci dessous (ça fonctionne), c'est quantizer les valeurs 0 à 127 sur les valeurs entières les plus proches de beat possibles (0, 1, 2, 3...)

    def _start_value(self, value): # value = valeur reçue du controlleur
    assert (value in range(128))
    nb_de_beats = live.detail_clip.length # Je recupère ici la taile du fichier audio en beats
    live.detail_clip.loop_start = int((nb_de_beats / 127.0) * value) * 1.00 # je règle ici la valeur directement sur l'objet.

    Mais ce que je voudrais, c'est quantizer les valeurs sur les subdivisions:
    Le calcul serait donc:
    live.detail_clip.loop_start.round((nb_de_beats) / 127.0) * value), 2)
    J'arrondi 2 chiffres après la virgule mais après, je bloque pour quantiser le résultat vers les valeurs 1.00, 1.25, 1.50,...

    Voilà...

  4. #4
    Membre Expert

    Homme Profil pro
    Diverses et multiples
    Inscrit en
    Mai 2008
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Diverses et multiples

    Informations forums :
    Inscription : Mai 2008
    Messages : 662
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    round((((value / 127.0) * nb_de_beats) * 4), 0) / 4
    …Non*?

    Autrement dit, tu fais ta règle de trois, tu multiplies par 4, tu arrondis à l’entier, et tu divises par 4 –*donc tu obtiens des valeurs quantisées au quart…

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 18
    Par défaut
    Merci beaucoup, c'est exactement ça

    (je suis vexé de pas l'avoir trouvé tout seul)

    Encore merci

Discussions similaires

  1. [Google Maps] Modifier une valeur à la volée
    Par josse34 dans le forum APIs Google
    Réponses: 8
    Dernier message: 09/02/2014, 11h19
  2. Algo pour quantiliser une valeur
    Par tnarol dans le forum SL & STL
    Réponses: 10
    Dernier message: 17/09/2008, 09h45
  3. [Très gros fichier] Algo pour recherche de valeurs
    Par djibril dans le forum Langage
    Réponses: 7
    Dernier message: 05/05/2008, 10h47
  4. Modification d'algo problème de valeur null
    Par goblin dans le forum Langage
    Réponses: 5
    Dernier message: 09/03/2007, 18h41
  5. changer valeur input a la volée
    Par epeichette dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 19/05/2006, 11h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo