3 votes

Un Applescript qui copie en lot la balise Song dans la balise Movement

J'ai une bibliothèque iTunes assez grande (~300 Go) qui est principalement composée de musique classique. J'aime beaucoup le format Œuvre et Mouvement, mais malheureusement il n'est pas pratique de mettre à jour manuellement mes métadonnées dans ce format. Presque tous les balises de chansons existantes sont dans le format suivant :

Telemann - Concerto en mi mineur : I. Andante
II. Allegro
III. Largo
IV. Allegro
etc.

Un script qui pourrait automatiser la mise à jour du système de balisage ressemblerait à ce qui suit.

  1. Sur toutes les chansons sélectionnées, copier la balise Chanson dans la balise Mouvement
  2. Supprimer le chiffre romain, le point et l'espace au début de la balise Mouvement. Ou, si le format inclut le nom complet de l'œuvre dans la balise Chanson, le supprimer.

Toute aide ou indication pour mettre réellement en œuvre ce script serait très appréciée. J'ai examiné et utilisé les scripts de travail et de mouvement de Doug, mais ils ne couvrent pas le processus d'appariement nécessaire pour supprimer les chiffres romains du début.

MODIFIER

Il est devenu évident que de nombreuses balises ne sont pas dans le format ci-dessus, mais dans un format comme ci-dessous :

Sérénade pour cordes en do majeur, Op. 48 - I. Allegro
Sérénade pour cordes en do majeur, Op. 48 - II. Adagio
Sérénade pour cordes en do majeur, Op. 48 - III. Allegro moderato
etc.

OU dans le même format que ci-dessus sauf en utilisant des chiffres arabes à la place des chiffres romains.

Le script devrait donner aux balises "Mouvement" les sorties suivantes :

Allegro
Adagio
Allegro moderato

L'idée est que je récupère la première partie de ceci ("Sérénade pour cordes en do majeur, Op. 48") et la copie dans la balise "œuvre", ce que j'ai déjà mis en œuvre, puis je récupère le texte restant, supprime les numéros de mouvement, et l'assigne à la balise Mouvement. Toute aide pour mettre en œuvre un système qui ferait cela serait appréciée.

Voici le script sous sa forme actuelle. Il est basé sur le script de Nom à Œuvre de Doug.

tell application "iTunes"
    set sel to selection of front browser window
    if sel is {} then
        try
            display dialog "Rien n'est sélectionné…" buttons {"Quitter"} with icon 0
        end try
        return
    end if

    set c to (count of sel)
    set songName to (get name of item 1 of sel)

    set userOptions to display dialog "Modifier pour un nom d'œuvre et ensuite cliquer sur OK." default answer songName --demander un nom d'œuvre

    repeat with i from 1 to c --définir les numéros de mouvement
        set thisTrack to item i of sel
        try
            set work of thisTrack to text returned of userOptions
            set movement number of thisTrack to i
            set movement count of thisTrack to c
            set movement of thisTrack to my delRomNum(name of thisTrack) -- copier le texte du mouvement du nom de la chanson et supprimer les chiffres romains
        end try
    end repeat

end tell

on delRomNum(t) -- la commande perl recherche et supprime tout chiffre romain (doit être un mot suivi du point et d'un espace)
    do shell script "/usr/bin/perl -pe 's/\\b[IVXLCDM]+\\b. //g' <<< " & quoted form of t
end delRomNum

2voto

Pour supprimer les chiffres romains, vous pouvez utiliser le gestionnaire delRomNum() de ce script :

--- ce texte comme exemple.
set movementText to "Telemann - Concerto en mi mineur: I. Andante
II. Allegro
III. Largo
IV. Allegro
etc."

set movementText to my delRomNum(movementText) -- supprimer les chiffres romains

on delRomNum(t) -- la commande perl recherche et supprime tout chiffre romain (doit être un mot suivi du point et d'un espace)
    do shell script "/usr/bin/perl -pe 's/\\b[IVXLCDM]+\\b. //g' <<< " & quoted form of t
end delRomNum

Le résultat du script est

"Telemann - Concerto en mi mineur: Andante
Allegro
Largo
Allegro
etc."

Mise à jour :

Si j'ai bien compris :

À partir de chaque ligne dans une chaîne de caractères, la commande doit supprimer les caractères depuis le début de la ligne jusqu'à la première occurrence d'un chiffre romain (ou d'un chiffre arabe) suivi du point et d'un espace, utilisez ce gestionnaire :

-- appeler, comme ceci --> set movement de thisTrack to my delRomNum(name de thisTrack)
on delRomNum(t)
    (***  du contenu de la variable 't' (la fin des lignes doit être en Line Endings Unix), donc la commande 'tr' change les retours chariots (Line Endings Mac) en linefeed (Line Endings Unix)
    la commande 'perl' supprime le premier caractère de chaque ligne jusqu'à la première occurrence d'un mot contenant (un chiffre romain ou un nombre) suivi du point et d'un espace ***)
    do shell script "tr '\\r' '\\n' <<< " & (quoted form of t) & " | /usr/bin/perl -pe 's/^.*?\\b[IVXLCDM0-9]+\\b. //g'"
end delRomNum

Exemple: le script passe cette chaîne de caractères au gestionnaire comme paramètre

Sérénade pour cordes en ut majeur, Op. 48 - I. Allegro
Sérénade pour cordes en ut majeur, Op. 48 - II. Adagio
Sérénade pour cordes en ut majeur, Op. 48 - III. Allegro moderato
Sérénade pour cordes en ut majeur, Op. 48 - 4. Allegro  Molto Appassionato
Sérénade pour cordes en ut majeur, Op. 48 - 5. Adagio - Allegro Molto
Sérénade pour cordes en ut majeur, Op. 48 - 6. Allegro moderato
VII. Adagio - Allegro Non Troppo
8. Allegro Ma Non Tanto
9. Largo
Adagio
etc.

Le gestionnaire renvoie :

Allegro
Adagio
Allegro moderato
Allegro  Molto Appassionato
Adagio - Allegro Molto
Allegro moderato
Adagio - Allegro Non Troppo
Allegro Ma Non Tanto
Largo
Adagio
etc.

1voto

willem.hill Points 280

Eh bien, j'ai compris tout seul. Au cas où cela serait utile à quelqu'un d'autre, voici le script complet.

tell application "iTunes"
    set sel to selection of front browser window
    if sel is {} then
        try
            display dialog "Rien n'est sélectionné…" buttons {"Quitter"} with icon 0
        end try
        return
    end if

    set c to (count of sel)
    set songName to (get name of item 1 of sel)

    set workName to display dialog "Modifier le nom du travail puis cliquer sur OK." default answer songName --pour le nom du travail
    set movementLength to display dialog "Modifier pour tout sauf le nom du mouvement. Ne pas inclure le chiffre romain s'il est présent. Si un chiffre arabe est présent, l'inclure." default answer songName --pour la longueur du mouvement

    repeat with i from 1 to c --définir les numéros de mouvement
        set thisTrack to item i of sel
        set songName to (get name of thisTrack)
        set work of thisTrack to text returned of workName
        set movement number of thisTrack to i
        set movement count of thisTrack to c
        set movement of thisTrack to my delRomNum(text ((length of text returned of movementLength) + 1) thru (length of songName) of songName as string) -- copier le texte du mouvement à partir du nom de la chanson et supprimer les chiffres romains
    end repeat

end tell

on delRomNum(t) -- la commande perl recherche et supprime tout chiffre romain (doit être un mot suivi d'un point et d'un espace)
    do shell script "/usr/bin/perl -pe 's/\\b[IVXLCDM]+\\b. //g' <<< " & quoted form of t
end delRomNum

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X