Page 2 of 5
Re: Displaying iTunes Album Art
Posted: Sun Apr 01, 2012 10:33 pm
by ckeyes888
Tried compiling the entire script but get "Can’t set «class usTA» to false. Access not allowed."
It will compile and run with the Pandora Box sections removed but no artwork is saved.
Curious, when loading the script into Script Editor it prompts for the progressBar.app.
Is that something I should have installed?
Thanks,
Carl
Re: Displaying iTunes Album Art
Posted: Mon Apr 02, 2012 1:42 am
by gtreece
I don't have Pandora's Box, so I commented out the two Pandora-specific code blocks. The script compiled and ran, however it has no code to generate an image file, in the event the currently playing iTunes song has no artwork. You just don't get anything in that case.
I'd be curious about the down-scaling as well. It scales down based purely on resulting file size, rather than desired image dimensions. Seems like if you were using this for album art on a control page, you'd likely want consistent dimensions.
Here's a rework test that I did, that just deals with iTunes, uses a filler image file (need to create that yourself) in case the current song doesn't have artwork, and sets the resulting image to no more than 256 pixels on it's longest side. It's got quite a few comments in it. For the filler artwork (bogus.tiff), I just opened an existing album art file, filled it with a solid color and added "No Artwork" to it. You could use any tiff you wanted, as long as it was size appropriate.
Your mileage may vary. More for comparison purposes than anything else. I use this same general technique to produce a png file of the current SiriusXM channel logo playing on Pulsar, and reference that png file as a refreshing image on a control page.
Code: Select all
-- set the file paths to save the artwork in
-- tiff file is artwork coming from iTunes
-- png file holds converted artwork
-- bogus.tiff is just a filler artwork file, in case the song doesn't have artwork
property tiffFile : "/tmp/iTunes.tiff"
property pngFile : "/tmp/iTunes.png"
property bogusFile : "/tmp/bogus.tiff"
-- scale factor to reduce size of final image, if desired
property scaleFactor : 0.5
-- size to scale final image to (longest side), if desired
property targetSize : 256
-- call subroutine be sure iTunes is running
if isApplicationRunning("iTunes") then
tell application "iTunes"
-- if it is running, be sure a song is playing
if (player state is playing) then
-- call subroutine to get artwork for playing song
set theResult to my writeITunesArtworkToFile()
end if
end tell
end if
-- convert the tiff file to a png file
tell application "Image Events"
launch
-- if artwork was found, we'll use the tiff file created
if (theResult is equal to 1) then
set theImageReference to open tiffFile
else
-- artwork was not found, so use a filler file
set theImageReference to open bogusFile
end if
-- create the png file
scale theImageReference to size targetSize
save theImageReference as PNG in pngFile with icon
close theImageReference
end tell
-- subroutine to check for running application
on isApplicationRunning(appName)
tell application "System Events" to return (exists (some process where name is appName))
end isApplicationRunning
-- subroutine to write iTunes current track artwork to file
on writeITunesArtworkToFile()
try
tell application "iTunes"
-- get song artwork
set the_data to data of artwork 1 of current track
end tell
-- save the artwork to the tiff file
set iTunesArtwork to (open for access tiffFile with write permission)
write the_data to iTunesArtwork starting at 0
close access iTunesArtwork
-- return success code
return 1
on error
-- couldn't get artwork for some reason, return error code
return 0
end try
end writeITunesArtworkToFile
Re: Displaying iTunes Album Art
Posted: Mon Apr 02, 2012 9:51 am
by Dewster35
Carl,
Honestly I don't know much about what the script is actually doing. I'm no script writer. The developer of Pandora's box wrote it for me as a favor.
I do know I did not install anything new on my machine to be to make this work. I'm running the latest version mac OS (10.7.3) and the latest version of iTunes (10.6.1). It works for my purposes though... just to simply create the album art file if it's available from whatever is running and display it on my control page. Wish I could be more helpful. I do know he tried it and a couple of others have tried it and it does what they need as well.
Re: Displaying iTunes Album Art
Posted: Mon Apr 02, 2012 10:23 am
by ckeyes888
Thanks. Wish I could get it to work..still nothing. I'm running 10.5.
Code: Select all
-- set the file paths to save the artwork in
-- tiff file is artwork coming from iTunes
-- png file holds converted artwork
-- bogus.tiff is just a filler artwork file, in case the song doesn't have artwork
property tiffFile : "Library/Application Support/Perceptive Automation/iTunes.tiff"
property pngFile : "Library/Application Support/Perceptive Automation/iTunes.png"
property bogusFile : "Library/Application Support/Perceptive Automation//bogus.tiff"
-- scale factor to reduce size of final image, if desired
property scaleFactor : 0.5
-- size to scale final image to (longest side), if desired
property targetSize : 256
-- call subroutine be sure iTunes is running
if isApplicationRunning("iTunes") then
tell application "iTunes"
-- if it is running, be sure a song is playing
if (player state is playing) then
-- call subroutine to get artwork for playing song
set theResult to my writeITunesArtworkToFile()
end if
end tell
end if
-- convert the tiff file to a png file
tell application "Image Events"
launch
-- if artwork was found, we'll use the tiff file created
if (theResult is equal to 1) then
set theImageReference to open tiffFile
else
-- artwork was not found, so use a filler file
set theImageReference to open bogusFile
end if
-- create the png file
scale theImageReference to size targetSize
save theImageReference as PNG in pngFile with icon
close theImageReference
end tell
-- subroutine to check for running application
on isApplicationRunning(appName)
tell application "System Events" to return (exists (some process where name is appName))
end isApplicationRunning
-- subroutine to write iTunes current track artwork to file
on writeITunesArtworkToFile()
try
tell application "iTunes"
-- get song artwork
set the_data to data of artwork 1 of current track
end tell
-- save the artwork to the tiff file
set iTunesArtwork to (open for access tiffFile with write permission)
write the_data to iTunesArtwork starting at 0
close access iTunesArtwork
-- return success code
return 1
on error
-- couldn't get artwork for some reason, return error code
return 0
end try
end writeITunesArtworkToFile
The code runs and creates a png but it's not the current track. The script wouldn't run unless i had
a iTunes.tiff file in the save location, so I made one and put it there but the png that is created is just a copy of the it,
not the currently playing art.
I realize this script isn't well understood....I'll plug away at it a bit more
Thanks,
Carl
Re: Displaying iTunes Album Art
Posted: Mon Apr 02, 2012 10:55 am
by gtreece
Hi Carl. You'll need a leading "/" in your file name properties. They need to be valid paths.
Code: Select all
property tiffFile : "/Library/Application Support/Perceptive Automation/iTunes.tiff"
And of course, write permission to any location you specify. You should be good with yours, once you fix the path.
Greg
Re: Displaying iTunes Album Art
Posted: Mon Apr 02, 2012 10:57 am
by jay (support)
There's a bug in the file paths in the script - they need to start with "/Library" not "Library". Also the path to the bogus.tiff file has two slashes (which shouldn't make any difference) but you'll want to make sure that file exists or the script will fail when the first song that doesn't have an image hits.
[EDIT] someone beat me to it...
Re: Displaying iTunes Album Art
Posted: Mon Apr 02, 2012 12:03 pm
by ckeyes888
Fixed the paths but still no go. The png will update, and size correctly to however
I have it set in the script, but the tiff won't update to the currently playing artwork.
Should it matter that music is on an external drive?
Found this script that saves the current album as a pict file to the desktop. Seems to work fine.
Code: Select all
tell application "iTunes"
set s to item 1 of (selection)
set pd to data of first artwork of s
end tell
set fs to ("" & (path to desktop) & "MyArt.pict") as file specification
set rn to (open for access fs with write permission)
try
set eof rn to 512
write pd to rn starting at 513
close access rn
on error err_mess
close access rn
error err_mess
end try
tell application "Finder"
set file type of fs to "PICT"
set creator type of fs to "????"
activate
end tell
Would it difficult to mod it to scale the image and save as a png?
Thanks a bunch,
Carl
Thanks,
Carl
Re: Displaying iTunes Album Art
Posted: Mon Apr 02, 2012 12:40 pm
by gtreece
This is the part that gathers the iTunes artwork:
Code: Select all
try
tell application "iTunes"
-- get song artwork
set the_data to data of artwork 1 of current track
end tell
-- save the artwork to the tiff file
set iTunesArtwork to (open for access tiffFile with write permission)
write the_data to iTunesArtwork starting at 0
close access iTunesArtwork
-- return success code
return 1
It actually requires that two things happen successfully:
1 - that the current song actually has artwork (you'd be able to see it in iTunes)
2 - that the user running the script has write permission to the file specified for 'tiffFile'
So if you know the current song has artwork, then I'd say the script is failing to write it to the file (most likely either a permission issue, or the path is invalid). I didn't put anything in there to specifically alert if it had trouble writing the file to disk.
You might change the file path to the /tmp location that I used originally, to see if it yields different results. You can use the finder 'Go' menu to go to the /tmp folder to see the results.
Greg
Re: Displaying iTunes Album Art
Posted: Mon Apr 02, 2012 1:04 pm
by ckeyes888
The tiff definitely has read write privileges but still no go. Tried a different path as well.
Odd for sure. Guess I'll try to rework the one that does work to scale and save as a png.
Thanks,
Carl
Re: Displaying iTunes Album Art
Posted: Mon Apr 02, 2012 1:32 pm
by Dewster35
I was told that pulling information out of iTunes was messy, even though it was possible. If you have some suggestions for improvements, I'd be happy to pass them along if I think they are worthwhile.
Re: Displaying iTunes Album Art
Posted: Mon Apr 02, 2012 1:54 pm
by gtreece
That is odd, Carl. The functional differences between the script you found, and the one I posted are, a) where it writes the file, and b) the format it writes the file in (I don't know details, but the starting at 513 part is tied to creating a PICT).
Otherwise, the two are doing the same thing. There are slight differences in the way the two scripts address the artwork of the iTunes track, which could be version differences. There are many ways to say the same thing in Applescript, but they don't always work on every OS/App version.
I'm on 10.7.3. I don't have an earlier machine to test with at the moment, but I've run into similar oddities between major OS X versions before when working on Applescripts. Particularly with file/folder operations.
Re: Displaying iTunes Album Art
Posted: Mon Apr 02, 2012 1:58 pm
by ckeyes888
Well my last attempt works great if you select the songs directly in iTunes...but does not work if I
change the songs using AS within Indigo.
Code: Select all
tell application "iTunes"
set s to item 1 of (selection)
set pd to data of first artwork of s
end tell
set fs to ("" & (path to desktop) & "MyArt.pict") as file specification
set rn to (open for access fs with write permission)
try
set eof rn to 512
write pd to rn starting at 513
close access rn
on error err_mess
close access rn
error err_mess
end try
tell application "Finder"
set file type of fs to "PICT"
set creator type of fs to "????"
activate
end tell
property pngFile : "/Library/Application Support/Perceptive Automation/iTunes.png"
property targetSize : 125
tell application "Image Events"
launch
set theImageReference to open fs
-- create the png file
scale theImageReference to size targetSize
save theImageReference as PNG in pngFile with icon
close theImageReference
end tell
Any idea how that could be? Controlling iTunes from the Indigo iTunes server works fine.
Thanks,
Carl
Re: Displaying iTunes Album Art
Posted: Mon Apr 02, 2012 2:11 pm
by gtreece
The (selection) in iTunes will not be the same as the current track. A song is selected when it's highlighted, but any song could be playing.
That's why I went with:
Code: Select all
set the_data to data of artwork 1 of current track
Re: Displaying iTunes Album Art
Posted: Mon Apr 02, 2012 2:32 pm
by Dewster35
Just curious, is all this just to account for music that doesn't have album art in iTunes?
Re: Displaying iTunes Album Art
Posted: Mon Apr 02, 2012 3:11 pm
by gtreece
Dewster35 wrote:Just curious, is all this just to account for music that doesn't have album art in iTunes?
Not exactly. I just know that the first time I tested the script you posted originally, I got no artwork. I'd rather have a custom graphic show if there's no artwork, so I checked for it in the script I patched together.
Most of this has been working with Carl, to get a script running at all. Neither yours, nor the shorter one I did, worked for him.