Personalmente, no tengo mucha necesidad, si la hay, de automatizar iTunes con AppleScript. En el pasado, he encontrado que iTunes es una de las aplicaciones más difíciles de automatizar. Sin embargo, eché un vistazo a su código , el AppleScript Dictionary para iTunes, algunas búsquedas en la web que básicamente no dieron nada notable, y algunos intentos programáticos fallidos para fácilmente obtener un < em> list de discos y track count
para cada disco de un album
.
Asumiré que el contexto kludge en tu pregunta es porque no hay una forma directa fácil para solicitar mediante programación un album
para su disc count
y track count
por disco para hacer math con, de una manera sencilla . Así que con eso ... aquí está mi kludge , que se probó y funciona como se desea en my 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 del código de AppleScript, que se muestra arriba, hace lo siguiente:
- Establece las propiedades del
current track
a la variable theCurrentTrackProperties
.
- Comprueba si el valor de la propiedad
disc number
en la variable , theCurrentTrackProperties
, no es mayor que 1.
- Si el valor de la propiedad
disc number
no es mayor que 1, es un procesamiento directo y registra la información deseada.
- Si el valor de la propiedad
disc number
es mayor que 1, entonces la rama else
realiza el kludge para hacer math , y registra la información deseada.
Lo que hace kludge :
- Establece algunas variables iniciales adicionales .
- Uno para el valor de la propiedad
disc number
de current track
, theDiscNumber
, se usa para determinar cuántos discos el track count
es necesario para.
- Otro para mantener las propiedades de cada
track
de cada disc
en el album
, theAlbumsTracksProperties
.
- El valor de la variable ,
theAlbumsTracksProperties
, se procesa en un repeat
loop a la cual da como resultado of se mantiene en la variable theAlbumsDiscNumberTrackCountInfo
.
- La variable
theAlbumsDiscNumberTrackCountInfo
, es una lista de disc number
y track count
de cada track
en el album
.
- Esta lista se procesa para eliminar toda la información duplicada, a fin de tener una entrada singular para el
track count
de cada disc number
en el album
.
- El comando
do shell script
utiliza sort
y sed
para procesar la lista , el valor de la variable theAlbumsDiscNumberTrackCountInfo
.
-
%código%
-
sort -n -k1 -u <<<
compare según el valor numérico de la cadena
-
-n
start a key en POS1
-
-k1
sin -c , genera solo el primero de una ejecución igual
-
-u
dirige la entrada desde la línea de comando , no un archivo
-
<<<
la lista como entrada de línea de comando dirigida a theAlbumsDiscNumberTrackCountInfo
-
%código%
-
sort
canaliza la salida de | sed '/^$/d'
comando a |
-
sort
eliminar líneas en blanco
- Como el valor de la variable
sed
es una concatenación con un sed '/^$/d'
al final de cada theAlbumsDiscNumberTrackCountInfo
loop , se convierte en la primera línea de salida del comando linefeed
y se elimina con repeat
, para no tener que dar cuenta de la línea en blanco inicial más adelante el script . Si se dejó como parte del valor de la variable sort
, eso se establece (re) por el return del sed
comando , entonces theAlbumsDiscNumberTrackCountInfo
tendría que ser do shell script
para omitir la línea en blanco. Por lo tanto, tiene más sentido eliminarlo antes de que termine como parte del valor final de la variable word 2 of paragraph i
.
- Con la variable ,
word 2 of paragraph (i + 1)
, ahora solo contiene una lista de theAlbumsDiscNumberTrackCountInfo
con su correspondiente theAlbumsDiscNumberTrackCountInfo
, una línea para cada disco en disk number
, ahora es fácil hacer math , si track count
contiene 2 discos o hasta 14 discos , o más.
- El código de AppleScript restante, que incluye otro
album
loop , preforma el math necesario para sumar el album
de cada repeat
que precede a track count
del que proviene disc number
, los agrega y luego registra la información deseada.
Dicho esto, si alguien sabe una forma directa fácil para solicitar mediante programación a disc number
su current track
y album
por disco para hacer el math con, de una manera directa para evitar un kludge , publique una respuesta.