II. Renommer des morceaux iTunes▲
Nous allons voir dans cette deuxième partie comment AppleScript permet d'automatiser des tâches répétitives et donc fastidieuses, tel renommer des morceaux dans une bibliothèque iTunes.
II-A. Objectif▲
Importer un album ou des fichiers audio dans iTunes conduit parfois à ce que les informations associées aux morceaux (titre, auteur, etc.) soient mal formatées. Un numéro peut avoir été collé au titre du morceau, ou ce dernier se trouver collé au nom de l'artiste.
Éditer ces informations à la main peut s'avérer fastidieux… Nous allons donc réaliser un script AppleScript permettant de supprimer des caractères à la fin ou au début des champs titre, artiste et album, cela pour tous les morceaux sélectionnés dans la fenêtre iTunes.
II-B. Algorithme▲
Le script suit l'algorithme suivant :
- Obtenir les morceaux sélectionnés par l'utilisateur.
- Demander à l'utilisateur quel champ il souhaite éditer, parmi les champs Nom, Artiste, Album.
- Demander à l'utilisateur combien de caractères il souhaite supprimer dans le champ, et à quel endroit (en tête ou en fin de champ).
- Appliquer l'édition du champ sur tous les morceaux sélectionnés.
II-C. Le script▲
Nous allons maintenant réaliser cet algorithme, étape par étape.
II-C-1. Obtenir les morceaux sélectionnés par l'utilisateur.▲
Le script commence par une instruction tell, qui indique à AppleScript quelle application est l'objet de nos actions :
tell application "iTunes"L'instruction suivante permet d'obtenir d'iTunes la liste des morceaux sélectionnés par l'utilisateur, et de l'affecter à la variable morceaux :
set morceaux to selectionselection est une propriété de la classe application, mais aussi des classes browser window et playlist window. On obtient des informations à son sujet en la recherchant dans le dictionnaire de pilotage d'iTunes.
Remarque. Pour prendre en compte le cas où l'utilisateur aurait ouvert plusieurs fenêtres, il faudrait
utiliser une instruction du type :
set morceaux to selection of window iIl convient ensuite de tester que l'utilisateur a bien sélectionné des morceaux. Cela se fait en testant que la variable morceaux est une liste vide :
if morceaux is {} then
display dialog "Vous devez sélectionner des morceaux !"
buttons {"OK"} with icon caution giving up after 15
return
end ifDans ce cas, on affiche un message à l'aide de la commande display dialog. Celle-ci comprend un certain nombre d'options, permettant de paramétrer les boutons affichés, une éventuelle icône et le temps d'affichage du message.
Remarque. On pourrait aussi envisager de tester la cardinalité de la variable morceaux, afin d'identifier le cas où l'utilisateur aurait sélectionné un très grand nombre de morceaux, ce qui serait suspect. La cardinalité d'une liste est donnée par l'instruction length of liste.
II-C-2. Demander à l'utilisateur quel champ il souhaite éditer, parmi les champs Nom, Artiste, Album.▲
On définit d'abord une variable de type liste, champs, contenant les noms des champs éditables :
set champs to {"Nom", "Artiste", "Album"}Puis on demande à l'utilisateur de sélectionner un champ dans cette liste, à l'aide de la commande choose from list
set champ to (choose from list champs with prompt "Quel champ éditer ?"
default items "Nom") as string
Remarque. Les capacités de dialogue avec l'utilisateur d'AppleScript sont assez limitées. Pour définir des IHM plus élaborées, il faudra se tourner vers AppleScript Studio.
La commande choose renvoie une liste contenant un des chaînes de caractères de la liste champs, ou bien le booléen false, si l'utilisateur a cliqué sur le bouton Annuler. En transtypant en type string, on peut ensuite tester la réponse de l'utilisateur, et quitter éventuellement le script avec la commande return:
if champ is "false" then
display dialog "Abandon du script !" buttons {"OK"} with icon note
giving up after 15
return
end ifII-C-3. Demander à l'utilisateur combien de caractères il souhaite supprimer dans le champ, et à quel endroit (en tête ou en fin de champ).▲
Une variante de la commande display dialog va permettre de faire saisir une valeur par l'utilisateur. En précisant l'option default answer, un champ de saisie apparaît dans la fenêtre de message :
set choix to display dialog "Combien de caractères supprimer dans \""
& champ & "\" ?" default answer "2"
buttons {"Au début", "À la fin", "Annuler"}Après interaction avec l'utilisateur, la variable choix contient une liste du type :
{text returned:"2", button returned:"À la fin"}Il est ensuite possible d'obtenir les informations qui nous intéressent avec ces deux instructions :
-- le nombre de caractères à couper
set longueur to text returned of choix
-- en début ou en fin de champ
set ou to button returned of choixRemarque. La marque des commentaires de code est -- dans AppleScript.
Si le bouton Annuler a été cliqué, une erreur est déclenchée par la commande display dialog - laquelle se base sur l'intitulé du bouton lui-même : seuls les intitulés « Annuler » et « Cancel » fonctionnent.
Cette erreur peut être capturée par un gestionnaire on error, afin de détecter le cas où l'utilisateur a annulé la saisie :
try
set choix to display dialog ...
on error
display dialog "Abandon du script !" with icon caution buttons {"OK"}
return
end tryIl reste ensuite à vérifier que la valeur saisie par l'utisateur est bien un entier naturel. On procède également à l'aide d'un bloc try, d'un gestionnaire on error et d'une boucle repeat :
repeat
try
set longueur to (longueur as integer) + 1
exit repeat
on error
display dialog "Vous devez entrer une valeur numérique !"
with icon caution buttons {"OK"}
set choix to display dialog "Combien de caractères supprimer ?"
default answer "2" buttons {"OK"}
set longueur to text returned of choix
end try
end repeatCe code est basé sur le fait que la tentative de transtypage de longueur déclenchera une erreur si celui-ci n'est pas un nombre.
II-C-4. Appliquer l'édition du champ sur tous les morceaux sélectionnés.▲
L'édition de tous les morceaux sélectionnés se fait à l'aide d'une boucle repeat with, qui permet d'appliquer un traitement à tous les éléments d'une liste :
repeat with un_morceau in morceaux
tell un_morceau
...
end repeatL'édition du champ est réalisée avec la commande text thru, qui permet d'extraire une portion d'une chaîne de caractères :
text idx1 thru idx2 of chaineL'utilisation d'index à valeur négative permet de réaliser ce que nous souhaitons, soit couper des caractères au début ou à la fin d'une chaîne :
if ou is "Au début" then
set idx1 to longueur
set idx2 to -1
else
set idx1 to 1
set idx2 to -longueur
end ifIl reste finalement à identifier quel champ iTunes à éditer, à l'aide d'un test conditionnel sur la variable champ, et à positionner le champ considéré avec une commande set, à partir de la valeur obtenue par une commande get et modifiée par text thru :
if champ is item 1 of champs then
try
set name to text idx1 thru idx2 of (get name)
end try
else if champ is item 2 of champs then
try
set artist to text idx1 thru idx2 of (get artist)
end try
else
try
set album to text idx1 thru idx2 of (get album)
end try
end ifVoilà, le script est terminé ! La figure suivante montre son application à un jeu d'essai (suppression des numéros de piste).

Ce script pourra facilement être généralisé à d'autres champs éditables des morceaux iTunes, selon vos besoins.





