Cree listas de reproducción para álbumes completos en iTunes (es decir, álbumes con todas las canciones)

¿Cómo puedo crear listas de reproducción para todos los álbumes de iTunes de los que tengo todas las canciones? Suponga que los metadatos de número de pista y conteo de pistas son precisos donde se especifican, y no se preocupe por capturar pistas que carecen de esos metadatos. Supongo que esto requerirá AppleScript.

Respuestas (1)

Me di cuenta de que esta era una pregunta lo suficientemente complicada como para tratar de despellejar al gato yo mismo. Aquí hay un enfoque:

-- Creates a playlist for each full album you have in iTunes
-- Set the playlistPrefix and playlistSuffix as desired before running

-- Based on code by Brad Campbell
-- http://www.bradcampbell.com/2009/05/26/make-a-whole-album-playlist-in-itunes/

tell application "iTunes"
    set playlistPrefix to "FA: "
    set playlistSuffix to ""
    -- The "FA: " prefix will help cluster full albums in iTunes' playlists,
    -- and is narrow enough to not get in your way when viewing on an iPhone

    set albumBuckets to {} as list
    set allSongs to (every track of library playlist 1 whose enabled is true and podcast is false and kind contains "audio") as list

    -- Find all partial albums in iTunes
    repeat with currentTrack in allSongs
        set albumName to album of currentTrack as text
        set artistName to artist of currentTrack as text

        -- First check for missing values, then perform integer comparison
        -- Zero is on the left to force interger type coercion, just in case
        if album of currentTrack is not missing value and 0 is less than length of albumName then
            if artist of currentTrack is not missing value and 0 is less than length of artistName then
                if track number of currentTrack is not missing value and 0 is less than track number of currentTrack then
                    if track count of currentTrack is not missing value and 0 is less than track count of currentTrack then
                        if albumBuckets does not contain album of currentTrack then
                            copy album of currentTrack to the end of albumBuckets
                        end if
                    end if
                end if
            end if
        end if

    end repeat

    repeat with currentAlbum in albumBuckets
        set albumSongs to (every track of library playlist 1 whose album is currentAlbum)
        set firstTrack to first item of albumSongs

        -- Filter album list to act only on full albums
        if (count of albumSongs) is equal to track count of first item of albumSongs and 1 is less than (count of albumSongs) then
            -- This is a full album, construct the playlist

            -- Sort tracks by track number
            set albumSongsSorted to {} as list
            repeat with i from 1 to (count of albumSongs)
                repeat with trk in albumSongs
                    if track number of trk is i then
                        set nextSong to trk
                        copy nextSong to the end of albumSongsSorted
                    end if
                end repeat
            end repeat

            -- Don't show artist name for compilations
            if firstTrack is not compilation then
                set playlistNameArtist to artist of firstTrack & " - "
            else
                set playlistNameArtist to ""
            end if

            set albumPlaylistName to playlistPrefix & playlistNameArtist & currentAlbum & playlistSuffix

            -- Create playlist
            if user playlist albumPlaylistName exists then
                try
                    delete tracks of user playlist albumPlaylistName
                end try
            else
                make new user playlist with properties {name:albumPlaylistName}
            end if

            try
                repeat with trk in albumSongsSorted
                    duplicate trk to user playlist albumPlaylistName
                end repeat
            end try
        end if
    end repeat

    display dialog "Playlists created! Check iTunes for playlists beginning with '" & playlistPrefix & "'"
end tell

Para probar esto, simplemente copie y pegue el bloque de código en el Editor de AppleScript y presione Ejecutar. Tenga en cuenta que no hay un botón de "deshacer" fácil: tendrá que mantener presionada la tecla Eliminar si desea deshacerse de todas las listas de reproducción creadas.

Probablemente haya un algoritmo más rápido (es decir, uno que haga un solo paso a través de la biblioteca de iTunes), pero no pude entender cómo trabajar con variables bidimensionales en AppleScript, lo que parece un requisito previo.

Un efecto secundario adicional de este script es que puede mostrar álbumes antiguos en su biblioteca desde la que se mudó y puede eliminarlos de manera segura :)

Muy buena pregunta y excelente respuesta. Con ese código, uno se acerca mucho al destino. Sin embargo, si no me equivoco, no puede manejar álbumes completos que consisten en varios discos. Intenté modificar el código pero no tuve mucho éxito (por el momento).