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

AppleScript Discussion :

valeur d'une variable non accessible [AppleScript]


Sujet :

AppleScript

  1. #1
    Membre à l'essai
    Homme Profil pro
    assistant informatique
    Inscrit en
    Mai 2013
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : assistant informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Mai 2013
    Messages : 27
    Points : 20
    Points
    20
    Par défaut valeur d'une variable non accessible
    Bonjour,

    je vais essayer d'être le plus clair possible sur mon problème:

    je cherche à créer un applescript qui auto-créé des patterns de musique.
    -je créé des tableaux contenant les cases a utiliser sur les cordes d'une guitare en fonction des gammes.
    -je demande à l'utilisateur de choisir la gamme puis la tonalité
    -ensuite j'assemble ces 2 valeurs pour avoir le nom de la gamme afin de pouvoir sélectionner une corde puis une note
    et c'est là que ça bloque, la sélection ce fait sur le nom de la variable et pas sur sa valeur.

    voici une partie du code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    --on créé les listes de note en fonction des différentes gammes
    --mineur
    set do_mineur to {{1, 3, 4, 6, 8, 10, 11, 13, 15, 16, 18, 20, 22, 23}, {1, 3, 4, 6, 8, 9, 11, 13, 15, 16, 18, 20, 21, 23}, {0, 1, 3, 5, 7, 8, 10, 12, 13, 15, 17, 19, 20, 22, 24}, {0, 1, 3, 5, 6, 8, 10, 12, 13, 15, 17, 18, 20, 22, 24}, {1, 3, 5, 6, 8, 10, 11, 13, 15, 17, 18, 20, 22, 23}, {1, 3, 4, 6, 8, 10, 11, 13, 15, 16, 18, 20, 22, 23}}
    set do_diese_mineur to {{0, 2, 4, 5, 7, 9, 11, 12, 14, 16, 17, 19, 21, 23, 24}, {0, 2, 4, 5, 7, 9, 10, 12, 14, 16, 17, 19, 21, 22, 24}, {1, 2, 4, 6, 8, 9, 11, 13, 14, 16, 18, 20, 21, 23}, {1, 2, 4, 6, 7, 9, 11, 13, 14, 16, 18, 19, 21, 23}, {0, 2, 4, 6, 7, 9, 11, 12, 14, 16, 18, 19, 21, 23, 24}, {0, 2, 4, 5, 7, 9, 11, 12, 14, 16, 17, 19, 21, 23, 24}}
    set re_mineur to {{0, 1, 3, 5, 6, 8, 10, 12, 13, 15, 17, 18, 20, 22, 24}, {1, 3, 5, 6, 8, 10, 11, 13, 15, 17, 18, 20, 22, 23}, {0, 2, 3, 5, 7, 9, 10, 12, 14, 15, 17, 19, 21, 22, 24}, {0, 2, 3, 5, 7, 8, 10, 12, 14, 15, 17, 19, 20, 22, 24}, {0, 1, 3, 5, 7, 8, 10, 12, 13, 15, 17, 19, 20, 22, 24}, {0, 1, 3, 5, 6, 8, 10, 12, 13, 15, 17, 18, 20, 22, 24}}
    set re_diese_mineur to {{1, 2, 4, 6, 7, 9, 11, 13, 14, 16, 18, 19, 21, 23}, {0, 2, 4, 6, 7, 9, 11, 12, 14, 16, 18, 19, 21, 23, 24}, {1, 3, 4, 6, 8, 10, 11, 13, 15, 16, 18, 20, 22, 23}, {1, 3, 4, 6, 8, 9, 11, 13, 15, 16, 18, 20, 21, 23}, {1, 2, 4, 6, 8, 9, 11, 13, 14, 16, 18, 20, 21, 23}, {1, 2, 4, 6, 7, 9, 11, 13, 14, 16, 18, 19, 21, 23}}
    set mi_mineur to {{0, 2, 3, 5, 7, 8, 10, 12, 14, 15, 17, 19, 20, 22, 24}, {0, 1, 3, 5, 7, 8, 10, 12, 13, 15, 17, 19, 20, 22, 24}, {0, 2, 4, 5, 7, 9, 11, 12, 14, 16, 17, 19, 21, 23, 24}, {0, 2, 4, 5, 7, 9, 10, 12, 14, 16, 17, 19, 21, 22, 24}, {0, 2, 3, 5, 7, 9, 10, 12, 14, 15, 17, 19, 21, 22, 24}, {0, 2, 3, 5, 7, 8, 10, 12, 14, 15, 17, 19, 20, 22, 24}}
    --etc etc
     
    --pop-up choix de gamme
     
    set optionsGamme to {"mineur", "majeur", "harmonique_mineure", "diminuee_inverse", "mineure-melodique"}
     
     
    set gamme to (choose from list optionsGamme with prompt "Création de patterns automatisée:
     
     
    Quel gamme?" with title "Création de patterns") as text
     
    --pop-up choix de tonalité
     
    set optionsTonalite to {"do", "do#", "re", "re#", "mi", "fa", "fa#", "sol", "sol#", "la", "la#", "si"}
     
     
    set tonalite to (choose from list optionsTonalite with prompt "Création de patterns automatisée:
     
     
    Quel gamme?" with title "Création de patterns") as text
     
    if tonalite contains "#" then
    	set tonalite to findAndReplace("#", "_diese", tonalite)
    end if
     
     
    	--création d'un nombre aléatoire
    	set i to random number
    	set iBis to (i * (6 - 1)) + 1
    	set i to round of iBis
     
    	--on créé la variable de gamme
    	set gamme_complete to tonalite & "_" & gamme
     
    	--on selectionne la corde
    	set chord_selected to item i of gamme_complete
     
     
     
     
    ---------------------------------------------------------------------------------------------------------------------------------
     
    on findAndReplace(tofind, toreplace, TheString)
    	set ditd to text item delimiters
    	set text item delimiters to tofind
    	set textItems to text items of TheString
    	set text item delimiters to toreplace
    	if (class of TheString is string) then
    		set res to textItems as string
    	else -- if (class of TheString is Unicode text) then
    		set res to textItems as Unicode text
    	end if
    	set text item delimiters to ditd
    	return res
    end findAndReplace
    je vous épargne tout le code.
    Si on selectionne mi en tonalité et mineur en gamme, "set chord_selected to item i of gamme_complete" va selectionner entre les lettres mi_mineur et plutot que de selectionner sur {0, 2, 3, 5, 7, 8, 10, 12, 14, 15, 17, 19, 20, 22, 24} par exemple

    en gros j'ai la variable "gamme_complete" qui pointe vers "mi_mineur" qui pointe vers la liste de chiffre. Je ne sais pas comment faire pour que gamme_complete pointe vers la liste de chiffre.

    Merci de votre attention.

  2. #2
    Membre éprouvé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    601
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 601
    Points : 1 237
    Points
    1 237
    Par défaut
    Bonsoir Blackjacking,
    Effectivement la lecture de ton script confirme que gamme_complete sera bien une variable de type string, par exemple "do_mineur".

    Ce que tu veux faire demande une structure de données un peu plus complexe. (en fait, je pense que tu devrais sans doute étudier une approche différente, mais, ne sachant pas ce que tu fais ensuite, c'est impossible pour moi de te conseiller sur la suite)
    Pour l'instant :
    1) tu as des listes de chiffres (de 13 à 15 chiffres visiblement)
    2) ces listes sont regroupées par 6 en liste de gammes.
    Si je suis bien ton raisonnement, tu as autant de gammes que de combinaisons (mineur, majeur, haro_mineure, diminuée_inverse, mineure_mélo) x (do, do#, re,re#, ...la#, si), soit 5 gammes x 12 tonalités = 60 listes.
    Ton exemple ne montre que 5 gammes, mais tu dois en avoir 60 en tout !

    Il faut donc que tu compliques pour ajouter une liste de liste de liste.
    La difficulté sera de bien positionner les items de la liste d'ordre générale et de pouvoir retrouver facilement l'item selon la sélection de l'utilisateur.
    Pour cela je suggère de leur donner un nom : par exemple, l'item 1 de la liste globale sera un record fait de 2 attributs : son nom (exemple : "do_mineur") et sa valeur : la liste des 6 listes de chiffres.

    Ce type de structure ralenti un peu Applescript, mais avec 60 items cela devrait encore aller.

    Une fois déclaré tes 60 listes do_mineur, do_diese_mineur,... tu déclares et rempli une variable ListeGlobale dont chaque item est fait d'un record {N:nom, V:valeur}
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    set Listeglobale to {}
    set end of Listeglobale to {N:"do_mineur", V:do_mineur}
    set end of Listeglobale to {N:"do_diese_mineur", V:do_diese_mineur}
    set end of Listeglobale to {N:"re_mineur", V:re_mineur}
    -- etc
    Ton script actuel demande ensuite à l'utilisateur la gamme et la tonalité que tu assembles dans la variable gamme_complete. Rien à changer ici.

    Il faut ensuite trouver l'item de la Listeglobale, dont le nom est égale à gamme_complete. Le script doit assigner chord_selected à la valeur de cet item.
    Pour cela, il faut une boucle sur les 60 items et, à chaque itération, tester le nom N avec Gamme_complete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    repeat with I from 1 to (count of Listeglobale)
        if N of item I of Listeglobale = gamme_Complete then -- l'item est trouvé !
            set chord_selected to V of item I of Listeglobale
        end if
    end repeat
    --la variable chord_selected contient une liste de 6 listes de chiffres correspondant au choix de l'utilisateur
    J'ai supposé, dans cette boucle, que les choix précédents de l'utilisateurs coincident forcément à une valeur existante !
    Cordialement

  3. #3
    Membre à l'essai
    Homme Profil pro
    assistant informatique
    Inscrit en
    Mai 2013
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : assistant informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Mai 2013
    Messages : 27
    Points : 20
    Points
    20
    Par défaut
    Merci PBELL,

    Bravo, tu as compris l’entièreté de ce que je veux faire dans mon code, j'avais peur que ça ne soit pas évident.
    Je n'avais pas poussé la complexité au point de faire un tableau à "3 niveaux". Excellente méthode.

    Je met ça en œuvre et je reviens sur le forum.

    Bonne soirée et merci encore.

  4. #4
    Membre à l'essai
    Homme Profil pro
    assistant informatique
    Inscrit en
    Mai 2013
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : assistant informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Mai 2013
    Messages : 27
    Points : 20
    Points
    20
    Par défaut
    Ca marche du feu de dieu,

    merci beaucoup

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Afficher la valeur d'une variable et non son nom dans une cellule
    Par dafchap dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 25/04/2016, 20h58
  2. Réponses: 3
    Dernier message: 23/04/2015, 15h09
  3. Réponses: 4
    Dernier message: 21/09/2012, 23h19
  4. Réponses: 3
    Dernier message: 26/09/2009, 01h06
  5. Réponses: 4
    Dernier message: 16/01/2009, 18h46

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