3 votos

Un Applescript que copia por lotes la etiqueta Song en la etiqueta Movement

Tengo una biblioteca de iTunes bastante grande (~300GB) que es principalmente música clásica. Me gusta mucho el formato Work and Movement, pero lamentablemente no es práctico actualizar manualmente mis metadatos al formato Work and Movement. Casi todas las etiquetas de las canciones existentes están en el siguiente formato:

Telemann - Concerto in E minor: I. Andante
II. Allegro
III. Largo
IV. Allegro
etc.

Un script que podría automatizar la actualización del sistema de etiquetado tendría el siguiente aspecto.

  1. En todas las canciones seleccionadas, copie la etiqueta Canción en la etiqueta Movimiento
  2. Borre el número romano, el punto y el espacio de la parte delantera de la etiqueta Movimiento. O, en el formato en el que todo el nombre de la obra está incluido en la etiqueta Canción, elimínelo.

Cualquier ayuda o indicación para implementar realmente este script sería muy útil. He mirado y utilizado El trabajo y el movimiento de Doug scripts pero no cubren el proceso de coincidencia que sería necesario para eliminar los números romanos desde el principio.

EDITAR

Se ha visto que muchas de las etiquetas no están en el formato anterior, sino en un formato como el siguiente:

Serenade for strings in C major, Op. 48 - I. Allegro
Serenade for strings in C major, Op. 48 - II. Adagio
Serenade for strings in C major, Op. 48 - III. Allegro moderato
etc.

O en el mismo formato que el anterior, pero utilizando números arábigos en lugar de números romanos.

El script debe hacer que las etiquetas "Movimiento" tengan las siguientes salidas:

Allegro
Adagio
Allegro moderato

La idea es que obtenga la primera parte ("Serenata para cuerdas en Do mayor, Op. 48") y la copie en la etiqueta "obra", que ya he implementado, y luego obtenga el texto restante, elimine los números de movimiento y lo asigne a la etiqueta Movimiento. Se agradecería cualquier ayuda para implementar un sistema que haga esto.

Aquí está el script en su forma actual. Está basado en el script de Doug.

tell application "iTunes"
    set sel to selection of front browser window
    if sel is {} then
        try
            display dialog "Nothing is selected…" buttons {"Quit"} 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 "Edit for Work name and then click OK." default answer songName --prompt for work name

    repeat with i from 1 to c --set the movement numbers
        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) -- copy movement text from song name and delete roman numerals
        end try
    end repeat

end tell

on delRomNum(t) -- the perl command search and delete any roman numeral (must be a word followed by the period and a space character)
    do shell script "/usr/bin/perl -pe 's/\\b[IVXLCDM]+\\b. //g' <<< " & quoted form of t
end delRomNum

0 votos

@jackjr300 ¿Podrías ayudar? Toma esto como un complemento.

0 votos

@kopischke Tú también podrías ayudar. Hazme saber si puedes :) Estoy haciendo un ping a los "expertos" de AppleScripting.

0 votos

Por favor, edite su "EDIT" y muestre la salida esperada que busca asignar a la etiqueta Movimiento de " Se ha visto que muchas de las etiquetas no están en el formato anterior, sino en un formato como el siguiente: " porque la salida que desea no es obvia.

2voto

Baczek Puntos 150

Para eliminar los números romanos, puede utilizar el botón delRomNum() de este script:

--- this text as an example.
set movementText to "Telemann - Concerto in E minor: I. Andante
II. Allegro
III. Largo
IV. Allegro
etc."

set movementText to my delRomNum(movementText) -- delete roman numerals

on delRomNum(t) -- the perl command search and delete any roman numeral (must be a word followed by the period and a space character)
    do shell script "/usr/bin/perl -pe 's/\\b[IVXLCDM]+\\b. //g' <<< " & quoted form of t
end delRomNum

El resultado del script es

"Telemann - Concerto in E minor: Andante
Allegro
Largo
Allegro
etc."

Actualización:

Si he entendido bien :

De cada línea de una cadena, el comando debe borrar los caracteres desde el principio de la línea hasta la primera aparición de (un un número romano o un número arábigo) seguido del punto y un carácter de espacio, por lo que se debe utilizar este manejador:

-- call it, like this --> set movement of thisTrack to my delRomNum(name of thisTrack)
on delRomNum(t)
    (***  from  the contents of the 't' variable (the end of lines must be an Unix Line Endings), so the 'tr' command change the carriage returns (Mac Line Endings) to linefeed (Unix Line Endings)
    the 'perl' command delete the first character in each line through the first occurrence of a word  which contains (a roman numeral or a number) followed by the period and a space character ***)
    do shell script "tr '\\r' '\\n' <<< " & (quoted form of t) & " | /usr/bin/perl -pe 's/^.*?\\b[IVXLCDM0-9]+\\b. //g'"
end delRomNum

Ejemplo: el script pasa esta cadena al manejador como parámetro

Serenade for strings in C major, Op. 48 - I. Allegro
Serenade for strings in C major, Op. 48 - II. Adagio
Serenade for strings in C major, Op. 48 - III. Allegro moderato
Serenade for strings in C major, Op. 48 - 4. Allegro  Molto Appassionato
Serenade for strings in C major, Op. 48 - 5. Adagio - Allegro Molto
Serenade for strings in C major, Op. 48 - 6. Allegro moderato
VII. Adagio - Allegro Non Troppo
8. Allegro Ma Non Tanto
9. Largo
Adagio
etc.

El manejador regresa:

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

0 votos

Esto funciona muy bien, muchas gracias. Realmente no sé lo que estoy haciendo y de hecho añadí una sección a la pregunta y mi actual script, si pudieras echar un vistazo y darme algún consejo sería extraordinariamente útil. Gracias de nuevo.

1voto

willem.hill Puntos 116

Bueno, yo mismo lo he descubierto. Por si le sirve a alguien más, este es el script.

tell application "iTunes"
    set sel to selection of front browser window
    if sel is {} then
        try
            display dialog "Nothing is selected…" buttons {"Quit"} 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 "Edit for Work name and then click OK." default answer songName --prompt for work name
    set movementLength to display dialog "Edit to everything except the movement name. Do not include the roman numeral if one is present. If an arabic numeral is present, include it." default answer songName --prompt for movement length

    repeat with i from 1 to c --set the movement numbers
        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) -- copy movement text from song name and delete roman numerals
    end repeat

end tell

on delRomNum(t) -- the perl command search and delete any roman numeral (must be a word followed by the period and a space character)
    do shell script "/usr/bin/perl -pe 's/\\b[IVXLCDM]+\\b. //g' <<< " & quoted form of t
end delRomNum

0 votos

Ver mi respuesta actualizada.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X