• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Die Bildungsoffensive hier im Forum geht weiter! Jetzt sollen Kreativität und technische Möglichkeiten einen neue Dimension erreichen. Das Thema in diesem Monat lautet - Verkehrte Welt - Hier geht es lang --> Klick

Wiedergabe nicht stoppen wenn Song aus Playlist entfernt wird

  • Ersteller Ersteller kip
  • Erstellt am Erstellt am

kip

Rheinischer Krummstiel
Registriert
19.03.09
Beiträge
378
Hi,

der Titel des Threads ist vllt. etwas verwirrend, aber mein Problem ist schwer in einem Satz zusammenzufassen. Ich versuche gerade Ordnung in meine Itunes Bibliothek zu bringen und iPhone+iPod zukünftig mit SmartPlaylists zu befüllen und nicht mit einer statischen Playlist. Die Smart-Playlists sollen unter anderem auf dem Star-Rating von iTunes basieren.

Lange rede kurzer Sinn ... ich habe mir eine Playlist mit allen Songs gemacht die noch kein Rating haben. Das Problem: Wenn ich diese Playlist nun höre und mir sage: "Hey, der Song ist cool - der bekommt X Sterne damit er auf Playlist Y landet" schmeißt iTunes den Song ja aus der gerade laufenden Playlist (= 0 Sterne) und die Wiedergabe wird gestoppt bzw. der nächste Song abgepielt. Das ist ziemlich doof ... kann man iTunes dazu überden den Song zuende zu spielen?
 
Kenne das Problem deswegen hab ich die Wiedergabeliste wieder gelöscht xD

Ich glaube aber auf meinem iPod Nano ging das, dass die nicht gleich rausgeschmissen wurden bin mir aber nichtmehr sicher

Eine kleine Idee hätt ich aber noch: Füge der Wiedergabeliste das Atribut "Geändert" hinzu mit innerhalb der letzten 1 Tage ;) Das setzt dann zwar vorraus das du alle die in der Wiedergabeliste sind einmal am Tag ändern musst und, aber was anderes fällt mir auch nicht ein ^^

Achja du musst noch oben bei der Wiedergabeliste einstellen das sie allen Kretieren entsprechen muss...

Man könnte ja ein Script schreiben das einmal täglich aufräumt ...


Viel Spaß
 
Zuletzt bearbeitet:
Du kannst den Inhalt der intelligenten Liste in eine statische Liste kopieren, in der du dir dann die Titel anhörst. Dort fliegen sie auch bei einer Änderung der Bewertung nicht raus, laufen also weiter, die intelligente Lite wird aber aktualisiert.
 
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 :-p
2. Es testet, ob iTunes gerade was abspielt, wenn nicht meckert es und steigt aus :-p
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 :-))
 
Zuletzt bearbeitet:
Hey,

danke für eure Tipps und Anregungen. Werde mal schauen was für mich die beste Lösung ist :)
Zumindestens kennt ihr das Problem ... ich dachte ich wäre der Einzige den das stört ;)
 
Bei iTunes DJ hat man aber den Nachteil da sman nicht Album für Album hören kann sondenr muss jede Album nacheinander adden...