Obtención de la ruta del archivo de una pista de iTunes que se reproduce actualmente con Applescript

3

Tengo un programa Applescript que funciona muy bien para obtener la mayor parte de la información de una pista actualmente en reproducción en una serie de variables nombradas:

tell application "System Events"
    if application process "iTunes" exists then
        tell application "iTunes"
            set state to player state
            if state = playing
                tell current track
                    set theArtist to artist
                    set theTitle to name
                    set theAlbum to album
                    set theTime to time
                    set theGrouping to grouping
                    set theGenre to genre
                    set theKind to kind
                    set theYear to year
                    set theComments to comment
                    set playCount to played count
                    set theTrack to track number
                    set numTracks to track count
                    set theDisc to disc number
                    set numDiscs to disc count
                    set bitRate to bit rate
                end tell
            else
                set state to "none"
            end if
        end tell
    else
        set state to "none"
    end if
end tell

Pero estoy completamente desconcertado sobre cómo obtener la ruta real del archivo de la pista actual. La biblioteca Applescript para iTunes tiene una entrada de "pista de archivo" que tiene un elemento de "ubicación", pero no he podido averiguar cómo usarla en este contexto. Cualquier ayuda sería apreciada grandemente.

    
pregunta Charles Johnson 03.09.2017 - 02:51

2 respuestas

1

No necesitas eventos del sistema, iTunes puede saber si se está ejecutando o no.

También, establezca las propiedades de current track a una variable y luego obtenga la información de la variable . La razón de esto es que solo realiza una llamada de nivel inferior (properties of current track) y luego la asignación de las otras variables obtiene la información de una variable que contiene toda la información, y no Hacer 15 llamadas de nivel inferior por separado para obtener la información. Esto debería ser un código más rápido y más eficiente.

tell application "iTunes"
    if running then
        set state to player state
        if state = playing then
            set trackProperties to (properties of current track)
            set theArtist to artist in trackProperties
            set theTitle to name in trackProperties
            set theAlbum to album in trackProperties
            set theTime to time of trackProperties
            set theGrouping to grouping in trackProperties
            set theGenre to genre in trackProperties
            set theKind to kind in trackProperties
            set theYear to year of trackProperties
            set theComments to comment in trackProperties
            set playCount to played count in trackProperties
            set theTrack to track number in trackProperties
            set numTracks to track count in trackProperties
            set theDisc to disc number in trackProperties
            set numDiscs to disc count in trackProperties
            set bitRate to bit rate in trackProperties
            try
                set thePath to POSIX path of (get location of current track)
            on error
                set thePath to "Not playing from local library."
            end try
        else
            set state to "none"
        end if
    else
        set state to "none"
    end if
end tell
    
respondido por el user3439894 03.09.2017 - 03:48
0

Esto me funciona en la última versión de Sierra

tell application "iTunes" to POSIX path of (get location of current track)
tell application "iTunes"
    set fileLocation to POSIX path of (get location of current track)
end tell
tell application "System Events"
    if application process "iTunes" exists then
        tell application "iTunes"
            set state to player state
            if state = playing then
                set fileLocation to POSIX path of (get location of current track)
                tell current track
                    set theArtist to artist
                    set theTitle to name
                    set theAlbum to album
                    set theTime to time
                    set theGrouping to grouping
                    set theGenre to genre
                    set theKind to kind
                    set theYear to year
                    set theComments to comment
                    set playCount to played count
                    set theTrack to track number
                    set numTracks to track count
                    set theDisc to disc number
                    set numDiscs to disc count
                    set bitRate to bit rate
                end tell
            else
                set state to "none"
            end if
        end tell
    else
        set state to "none"
    end if
end tell
    
respondido por el wch1zpink 03.09.2017 - 03:20

Lea otras preguntas en las etiquetas