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.