I’ve just started playing around with applescript and i love what i can do with it. I’m finding it difficult to find good resources that cover itunes & applescript, so i’m rusty on the itunes db schema and on the applescript syntax in general. I’m learning though and it’s been fun so far!
What i’m trying to do right now is get a unique genre list back from itunes, running applescript in a bash shell.
I’ve tried iterating through the tracks and building a list eg:
tell application "iTunes"
set len to count of tracks
repeat with num from 1 to len
if num is equal to 1 then set genreList to {}
set gen to genre of track num
if gen is not in genreList then copy gen to the end of genreList
end repeat
end tell
but that method is too processor intensive, and takes way too long, so I can’t do it like that.
Ideally i’d like to do this:
tell application "iTunes" to (count(tracks whose genre is unique))
as i belive something like this would take be a LOT quicker but ofcourse that errors out with a ‘variable not defined’ error.
does anyone have any suggestions or links to resources where i can find out more about querying itunes? thanks
This goes pretty fast for an iTunes library of 1688 tracks:
tell application "iTunes" to set allGenres to genre of every track
set uniqueGenres to {}
repeat with i in allGenres
if (i as string) is not in uniqueGenres then if (i as string) is not "" then set end of uniqueGenres to (i as string)
end repeat
get uniqueGenres
this is a quite fast solution. It takes less than one second for approx. 3500 tracks
script o
property genres : ""
end script
tell application "iTunes"
set o's genres to (get genre of tracks of library playlist 1)
end tell
set genreList to {}
repeat with i from 1 to count o's genres
set g to item i of o's genres
if g is not in genreList then set end of genreList to g
end repeat
What i don’t understand is why using a repeat loop through a list takes so long. I have 42555 tracks in my music library, and it takes about 1m40s to complete with applescript running at 90% CPU.
Whereas if I just do:
tell application "iTunes" to set allGenres to genre of every track
it takes about 1-3 seconds to complete.
I’m going to try passing the ‘allGenres’ list into bash and build the unique list from there and see if it’s any faster. i’ll post my results. thanks for help!