itunes, applescript, and the eternal blank box

rjbs on 2006-04-05T21:43:32

Why is AppleScript so slow? Whenever I try to do a bunch of things repeated tasks with it, it feels like it takes forever. I assume it isn't really AppleScript per se, but the underlying Apple Events layer. When I've used Mac::Glue, it's been about as slow.

I wanted to re-name a bunch of mp3 files, last night. Actually, I didn't want to rename the files, I just wanted to get their ID3 tags set properly. First, I worked with their track numbers. I had the files in a play list in order, so I wanted to iterate over them, giving them sequential track numbers. First, I tried iterating over selection, but it seems like the repeat with loop gets confused if the list changes as it works. I got things working quickly, though.

tell application "iTunes" set num to 1 set song_list to selection

repeat with song in song_list
  set track number of song to num
  set num to num + 1
end repeat

end tell

In my first pass, I used songs instead of song_list. It turns out that it's an iTunes object. I don't know what. It's not in the dictionary. I don't know enough to inspect the object further. You can just tell iTunes to get songs, though, and you'll get back "songs." Huh.

Some of the files I was working with were named like this:

02 - Your Favorite Song

To get rid of the now-fixed track number, I did something else very simple.

tell application "iTunes" repeat with song in selection set songtitle to name of song set titlelength to length of songtitle set fixedname to text 6 thru titlelength of songtitle set name of song to fixed_name end repeat end tell

Other tracks were more like this:

Your Favorite Band - Their Best Album - 01 - Stupid Spoken Intro

So fixing the titles was simple:

set the text item delimiters to " - " tell application "iTunes" set song_list to selection

repeat with song in song_list
  set title to name of song
  get text items of title
  set name of song to text item 4 of title
end repeat

end tell

Yeah, I could've done something like that to get all the data, but by the time I got to this stage, I'd fixed everything else. This script seemed to update files at a rate of about one file ever three or four seconds. Often, when I have to sit through this kind of delay, a modal dialog box pops up with no caption and no status bar. It tends to appear and disappear just frequently enough to keep me from doing anything useful.

AppleScript continues to be extremely useful and extremely annoying. I like Mac::Glue a lot, but I feel like it's often faster to struggle through AppleScript. That's probably because it has the dictionary browser, a compiler that catches a lot of simple problems, and a lot of ways to get instant feedback.

I just wish it ran faster.


Slowness

pudge on 2006-04-06T05:43:35

Why is AppleScript so slow? Whenever I try to do a bunch of things repeated tasks with it, it feels like it takes forever. I assume it isn't really AppleScript per se, but the underlying Apple Events layer. When I've used Mac::Glue, it's been about as slow.

Sorta. Except it is "Apple events," not "Apple Events." "Event" in this context is capitalized only when part of a proper name like "Apple Event Manager." FWIW.

And it's not so much Apple events, but the iTunes Apple events implementation. It's slow. Always has been. Dunno why.

Also, I still use AppleScript sometimes for prototyping. And I sometimes use the AppleScript dictionary in Script Editor for my Mac::Glue coding.