1 votos

¿Applescript para obtener el número de pista de una canción de un álbum multicd en iTunes?

Tengo un Applescript que informa del nombre de la canción que se está reproduciendo, el álbum, el número de canción y el número total de canciones del álbum. Si el álbum viene de un solo CD o si la canción viene del CD 1 de un álbum multi-CD, todo funciona, y obtengo lo siguiente:

Song 2 of 30

Sin embargo, si el álbum procede de un juego de varios CD, el número de canción será incorrecto para las canciones del CD 2, CD 3, etc. He aquí un ejemplo: L'Elisir d'Amore tiene dos CD, y en iTunes se introduce como tal (por ejemplo, CD 1 de 2 y CD 2 de 2). El script informa correctamente de que hay 30 canciones (16 en el CD 1 y 14 en el CD 2). Al reproducir una canción del CD 1, todo es correcto. Cuando se reproduce una canción del CD 2, el número de canción comienza de nuevo en 1, por lo que la última canción aparece como

Song 14 of 30

porque es la decimocuarta canción del CD 2. ¿Existe alguna forma de conseguir que el script muestre la canción 30 de 30 para la última canción del CD 2 sin tener que calcular el número de CDs, contar las canciones del CD 1 y sumarlas al número de pista de la canción del CD 2? Este truco es bastante feo para los álbumes que abarcan hasta 14 CDs.

Este es el código simplificado:

tell application "iTunes"
    -- code to check that there is a current song
    set z_album to album of current track as string
    set z_num to count of (every track whose album is z_album)
    set z_song to name of current track as string
    set z_trk to track number of current track
    log z_song & " (" & z_trk & " of  " & z_num & ")"
end tell

0 votos

Sería bueno saber si mi kludge trabajado para usted, gracias.

0 votos

Gracias por la sugerencia, que sí funciona, y es menos kudgy que la mía. Esto fue realmente sólo con fines informativos que por cualquier razón importante: Tengo la información mostrada y no quería ejecutar repetidamente un largish script.

0voto

user3439894 Puntos 5883

Personalmente creo que no tiene mucho de una necesidad, si los hubiere, para automatizar iTunes con AppleScript. En el pasado me he encontrado iTunes a ser una de las más difíciles aplicaciones para automatizar. Sin embargo, eché un vistazo a su código, el Diccionario de AppleScript para iTunes, un par de búsquedas en la web, que básicamente se produjo nada digno de mención, y algunas error programático intenta fácilmente obtener una lista de los discos y track count para cada disco de un album.

Voy a asumir el parche el contexto de tu pregunta es porque no es nada fácil manera directa mediante programación pedir un album su disc count y track count por disco para hacer las matemáticas , en una recta de avance manera. Así que, con que... aquí está mi parche, el cual fue probado y funciona como se desea en mi Biblioteca de iTunes:

tell application "iTunes"
    try

        set theCurrentTrackProperties to (properties of current track)

        if (disc number in theCurrentTrackProperties) is not greater than 1 then

            set theSongName to (name in theCurrentTrackProperties)
            set theTrackNumber to (track number in theCurrentTrackProperties)
            set theTrackCount to (track count in theCurrentTrackProperties)

            log theSongName & " (" & theTrackNumber & " of " & theTrackCount & ")"

        else

            set theSongName to (name in theCurrentTrackProperties)
            set theTrackNumber to (track number in theCurrentTrackProperties)
            set theTrackCount to (count of (every track whose album = (album in theCurrentTrackProperties)))

            set theDiscNumber to (disc number in theCurrentTrackProperties)
            set theAlbumsTracksProperties to (properties of every track whose album = (album in theCurrentTrackProperties))

            set theAlbumsDiscNumberTrackCountInfo to ""
            repeat with i from 1 to (count of theAlbumsTracksProperties)
                tell item i in theAlbumsTracksProperties
                    set theAlbumsDiscNumberTrackCountInfo to (theAlbumsDiscNumberTrackCountInfo & disc number & space & track count & linefeed)
                end tell
            end repeat
            tell current application
                set theAlbumsDiscNumberTrackCountInfo to (do shell script "sort -n -k1 -u <<<" & quoted form of theAlbumsDiscNumberTrackCountInfo & " | sed '/^$/d'")
                set theTracksPerDiscCount to ""
                repeat with i from 1 to (theDiscNumber - 1)
                    set theTracksPerDiscCount to (theTracksPerDiscCount + (word 2 of paragraph i in theAlbumsDiscNumberTrackCountInfo))
                end repeat
                set theTrackNumber to (theTrackNumber + theTracksPerDiscCount)
            end tell

            log theSongName & " (" & theTrackNumber & " of " & theTrackCount & ")"

        end if

    on error eStr number eNum
        display dialog eStr & " number " & eNum buttons {"OK"} default button 1 with icon caution
        return
    end try
end tell

El ejemplo de AppleScript de código, se muestra más arriba, hace lo siguiente:

  • Establece las propiedades de la current track a la variable theCurrentTrackProperties.
  • Comprueba si el valor de la disc number de propiedad en la variable, theCurrentTrackProperties, no es mayor que 1.
  • Si el valor de la disc number de la propiedad no es mayor que 1, es sencillo y procesamiento de registros de la información deseada.
  • Si el valor de la disc number de la propiedad es mayor que 1, entonces el else rama de preformas el parche para hacer las matemáticas, y los registros de la información deseada.

Lo que el parche :

  • Establece algunas adicionales inicial de las variables.
    • Uno para el valor de la disc number de la propiedad de la current track,theDiscNumber, se utiliza para determinar cómo muchos de los discos de la track count es necesario para.
    • Otro para mantener las propiedades de cada track de cada disc en la album, theAlbumsTracksProperties.
      • El valor de la variable, theAlbumsTracksProperties, se procesa en un repeat bucle para que la salida de se celebra en la variable theAlbumsDiscNumberTrackCountInfo.
  • La variable theAlbumsDiscNumberTrackCountInfo, es una lista de la disc number y track count de cada track en la album.
    • Esta lista es luego procesada para eliminar todos los duplicados de información, así como contar con un singular entrada para el track count de cada disc number en la album.
  • El do shell script comando utiliza sort y sed para proceso de la lista, el valor de la variable theAlbumsDiscNumberTrackCountInfo.
    • sort -n -k1 -u <<<
      • -n comparar de acuerdo a la cadena de valor numérico
      • -k1 inicio una clave en POS1
      • -u sin -c, la salida de la primera de igualdad de ejecutar
      • <<< dirige a la entrada de la línea de comandos, no un archivo
    • theAlbumsDiscNumberTrackCountInfo la lista como entrada de línea de comandos dirigidos a sort
    • | sed '/^$/d'
      • | tubo de la salida de la sort comando a sed
      • sed '/^$/d' eliminar líneas en blanco
      • Debido a que el valor de la variable theAlbumsDiscNumberTrackCountInfo es una concatenación con un linefeed al final de cada repeat de bucle, se convierte en la primera línea de salida de la sort comando y se retira con sed, para no tener que dar cuenta de la principal línea en blanco después de la secuencia de comandos. Si se dejó como una parte de valor de la variable theAlbumsDiscNumberTrackCountInfo, que (re)establecer el retorno de la do shell script de comandos, a continuación, word 2 of paragraph i tendría que ser word 2 of paragraph (i + 1) para omitir el líder en la línea en blanco. Para que tenga más sentido para eliminarlo antes de que termina como parte de la decisión final el valor de la variable theAlbumsDiscNumberTrackCountInfo.
  • Con la variable, theAlbumsDiscNumberTrackCountInfo, ahora sólo contiene una lista de disk number con su correspondiente track count, una línea para cada disco en el album, ahora es fácil hacer las matemáticas, si el album contiene 2 discos o 14 discos, o más.
  • El resto de AppleScript código, que incluye otra repeat de bucle, preformas las matemáticas necesarias para añadir el track count de cada disc number anterior a la disc number el current track , y suma y, a continuación, los registros de la información deseada.

Dicho esto, si alguien sabe de una fácil manera directa mediante programación pedir un album su disc count y track count por disco para hacer las matemáticas , en una recta hacia adelante de manera de evitar un parche, por favor enviar una respuesta.

0 votos

He aceptado la respuesta, que funciona y puede ser adecuada para otros fines. También me ha gustado mucho la claridad de la explicación. Sin embargo, seguiré respondiendo en la canción 12 del disco 3 de 4 simplemente para mantener el script en sólo media docena de líneas.

0 votos

@RPW, Gracias. usted dijo: "Voy a seguir para responder en la presentación de informes Canción 12 del disco 3 de 4, simplemente para mantener la script a sólo una media docena de líneas.", y si se me permite, ¿por qué hay y problema con mantener el número de líneas de código hacia abajo?

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