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
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.