从itune读取歌词来制作文件

时间:2010-08-04 16:31:09

标签: applescript itunes

我从http://www.dougscripts.com/itunes/得到提示以提出以下代码。但它需要更多的改进。

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

2 个答案:

答案 0 :(得分:2)

以下是我用来管理将数据写入文本文件的两个子程序:

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    

请注意,write_to_file()是来自Essential Subroutines中自己的旧Applescript网站的Apple代码。 WriteToLog()是我自己的子程序,只用一个参数写入与write_to_file的接口,即文本本身。加盐调味。要重写脚本可以容纳上面的子程序,我会这样做:

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

答案 1 :(得分:1)

你只是有一些事情超出范围所有开幕结束和文本文件的写作必须在iTunes之外完成,并且不需要texedit

 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)