Reputation: 190659
I got hints from http://www.dougscripts.com/itunes/ to come up with the following code. But it needs much more improvements.
tell application "iTunes" if player state is playing then set sel to current track as list else if selection is not {} then set sel to selection end if set noSong to "" set summaryFile to ((path to desktop as Unicode text) & "songs2.txt") set ff to open for access file summaryFile with write permission repeat with this_track in sel set the_lyrics to this_track's lyrics set {art, nom} to {this_track's artist, this_track's name} if the_lyrics is not "" then tell application "TextEdit" activate set myVar to art & nom & the_lyrics write myVar to ff starting at eof end tell else beep end if end repeat end tell
Upvotes: 0
Views: 251
Reputation: 5045
Here are two subroutines I use to manage writing data to a text file:
on WriteLog(the_text)
set this_story to the_text
set this_file to (((path to desktop folder) as text) & "MY STORY")
my write_to_file(this_story, this_file, true)
end WriteLog
on write_to_file(this_data, target_file, append_data)
try
set the target_file to the target_file as text
set the open_target_file to ¬
open for access file target_file with write permission
if append_data is false then ¬
set eof of the open_target_file to 0
write this_data to the open_target_file starting at eof
close access the open_target_file
return true
on error
try
close access file target_file
end try
return false
end try
end write_to_file
Please note write_to_file() is Apple's code from their own old Applescript site in Essential Subroutines. WriteToLog() is my own subroutine that wrote to interface with write_to_file with only one argument, the text itself. Add salt to taste. To rewrite the script accomodate the above subroutines, I would do it like this:
tell application "iTunes"
if player state is playing then
set sel to current track as list
else if selection is not {} then
set sel to selection
end if
set noSong to ""
repeat with this_track in sel
set the_lyrics to this_track's lyrics
set {art, nom} to {this_track's artist, this_track's name}
if the_lyrics is not "" then
set myVar to art & nom & the_lyrics
my WriteLog(myVar)
else
beep
end if
end repeat
end tell
Upvotes: 2
Reputation: 17640
you just had some things out of scope all the opening closing and writing of the text file must be done outside of itunes and texedit is not needed
set summaryFile to ((path to desktop as Unicode text) & "songs2.txt")
try
close access (summaryFile as alias) -- close the file if its open alreayd
end try
set ff to open for access file summaryFile with write permission
tell application "iTunes"
if player state is playing then
set sel to current track as list
else if selection is not {} then
set sel to selection
end if
set noSong to ""
repeat with this_track in sel
set the_lyrics to lyrics of this_track
set {art, nom} to {artist of this_track, name of this_track}
if the_lyrics is not "" then
tell me
set myVar to art & nom & the_lyrics
write myVar to ff starting at eof
end tell
else
beep
end if
end repeat
end tell
close access (summaryFile as alias)
Upvotes: 1