Ich hab aus Spaß und v.a. dringendem Bedarf an Abwechslung ein Script geschrieben, das folgendes macht:
1. Es testet, ob iTunes läuft, wenn nicht steigt es aus

2. Es testet, ob iTunes gerade was abspielt, wenn nicht meckert es und steigt aus

3. Es holt sich den momentan abgespielten Titel sowie name, artist und rating
4. Es frag nach der neuen Bewertung
5. Es loopt für die Länge des Tracks+20s in sekunden und checkt bei jedem loop (alle 5s), ob sich der Titel geändert hat. Wenn ja, setzt es die neue Bewertung und ist fertig.
=> Die neue Bewertung wird erst angewandt, wenn schon ein anderer Track gespielt wird.
Jetzt ließe sich das mit ner Cocoa-App viel geiler umsetzen, aber das hätte mir vieeel zu lange gedauert.
Die eigentliche (sinnvolle) Lösung für euer Problem ist übrigens, den iTunesDJ mit der entsprechenden Liste zu füttern (unten links im iTunes DJ kann man die Quell-Playlist auswählen). Dann kann man die Bewertung ändern, ohne dass der Song aufhört zu spielen. Dennoch verschwindet der Song aus der Quell-Playlist.

EDIT: Und natürlich aus dem iTunes DJ abspielen, wa?
Hier ist das Script:
Code:
--check if itunes is running
set iTunesRunning to getItunesRunning()
if (iTunesRunning) then
--generate ratings map
set r0s to {rValue:0, rString:"☆☆☆☆☆"}
set r1s to {rValue:20, rString:"★☆☆☆☆"}
set r2s to {rValue:40, rString:"★★☆☆☆"}
set r3s to {rValue:60, rString:"★★★☆☆"}
set r4s to {rValue:80, rString:"★★★★☆"}
set r5s to {rValue:100, rString:"★★★★★"}
set ratingsList to {r0s, r1s, r2s, r3s, r4s, r5s}
--generate list for choose from
set ratingsSrings to {}
repeat with aRating in ratingsList
set ratingsSrings to ratingsSrings & (rString of aRating)
end repeat
tell application "iTunes"
--get current track
try
set cTrack to current track
on error
display alert "nothing playing" as warning buttons {"OK"} cancel button 1 giving up after 10
end try
--get Track attributes
set cTrackPID to persistent ID of cTrack
set cTrackName to (name of cTrack)
set cTrackArtist to (artist of cTrack)
set cTrackRating to {rValue:(rating of cTrack), rString:""}
repeat with aRating in ratingsList
if (rValue of cTrackRating) = (rValue of aRating) then
set (rString of cTrackRating) to (rString of aRating)
exit repeat
end if
end repeat
--get new rating for current track from user
set newRatingChosen to (choose from list ratingsSrings with prompt "Choose the new Rating for the song:" & return & "'" & cTrackName & "' (" & cTrackArtist & ")" & return & "Current Rating: " & (rString of cTrackRating) with title "Ratings Changer after PB ;-)")
if newRatingChosen = false then
return "user canceled"
end if
--get value for chosen rating
set newRating to 0
repeat with aRating in ratingsList
if (newRatingChosen as string) = (rString of aRating) then
set newRating to rValue of aRating
exit repeat
end if
end repeat
--get lenght of track = loopTimeout
set loopTimeout to (time of cTrack) as text
set asTID to AppleScript's text item delimiters
set AppleScript's text item delimiters to ":"
set loopTimeout to text items of loopTimeout
set AppleScript's text item delimiters to asTID
set loopTimeout to (((((first item of loopTimeout) as integer) * 60) + ((second item of loopTimeout) as integer)) + 20) / 5 as integer
set loopTimeout to round loopTimeout
end tell
end if
--wait for the track to change, then apply new rating to cTrack
set madeChanges to false
repeat with c from 1 to loopTimeout
set iTunesRunning to my getItunesRunning()
if (iTunesRunning) then
tell application "iTunes"
try
if not (cTrackPID) = (persistent ID of current track) then
set (rating of cTrack) to newRating
set madeChanges to true
exit repeat
end if
on error
try
set (rating of cTrack) to newRating
set madeChanges to true
exit repeat
on error
exit repeat
end try
end try
end tell
else
return "itunes quit"
end if
delay 5
end repeat
--display alert msg if changing the rating failed
if not (madeChanges) then
set iTunesRunning to my getItunesRunning()
if (iTunesRunning) then
tell application "iTunes"
display alert "Changes to Rating could not be applied" message ¬
"Song Title: " & cTrackName & return & ¬
"Song Artist: " & cTrackArtist & return & ¬
"Rating: " & (rString of cTrackRating) ¬
as warning buttons {"OK"} cancel button 1 giving up after 20
end tell
end if
else
return "rating of track " & cTrackPID & " [" & cTrackName & space & "(" & cTrackArtist & ")] changed from " & (rValue of cTrackRating) & " to " & newRating
end if
on getItunesRunning()
tell application "System Events" to set iTunesRunning to (bundle identifier of processes contains "com.apple.itunes")
return iTunesRunning
end getItunesRunning
Hab's jetzt nicht all zu großartig getestet und ist auch ein bisschen Pasta geworden, weil ich's nicht aufgeräumt hab.

For me it works.
Wie man das in iTunes einbindet und nen Shortcut zuweist, hatte ich irgendwo mal gepostet... moment... ah,
hier (danke Nathea für das Retten aus Kurze Frage Kurze Antwort

)