• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

Applescript: Scriptoptimierung

Hyaena

Alkmene
Registriert
07.12.08
Beiträge
33
Hallo,
ich arbeite gerade an einem kleinen AppleScript, das per iChat auf meinem Mac Mini das momentan gespielte Lied in iTunes auf mein MacBook senden soll.
Die erste Idee, die ich dazu hatte, war folgende...

Code:
tell the application "iTunes"
	set song_name to the name of the current track
	
	repeat #Hauptschleife
		
		set song_name_test to the name of the current track #momentane Track-Infos lesen
		set artist_name to the artist of the current track
		set album_name to the album of the current track
		
		
		display dialog "Es läuft " & artist_name & " - " & song_name & " (" & album_name & ")" #momentane Track-Infos ausgeben
		
		repeat while song_name = song_name_test #Vergleichs- & "Pausen"schleife
			set song_name to the name of the current track
		end repeat
		
	end repeat
	
	
end tell

..wobei statt dem ausgegebenen Dialog nachher eben der iChat-Teil reinkommt.

Das Script funktioniert auch so, allerdings erzeugt es eine permanente CPU-Last von 100%, was auch nicht gerade wünschenswert ist, aber logisch nachvollziehbar und auf die Schleife zurückzuführen ist, in der das Script praktisch permanent hängt.
Die einzige Möglichkeit, das Ganze etwas zu verbessern, wäre, eine Pause einzufügen, was allerdings auch nicht gerade wünschenswert ist, da ich die Info gerne möglichst aktuell hätte...

Ich hoffe, ihr habt dazu noch eine andere Idee oder könnt mir einen Tip geben, wie man das noch besser verwerkelt bekommt.
 

LittlePixel

Strauwalds neue Goldparmäne
Registriert
09.07.08
Beiträge
641
Aua…
Ja, das kann ich mir gut vorstellen.

Punkt 1:
Frage nicht immer nach "current track". Einmal danach fragen und das zu einer Variablen schreiben reicht aus. Somit schickst Du endlos AppleEvents.

Punkt 2:
Endlosschleifen sind unschön. An Deiner Stelle würde ich das Skript ein mal pro Minuten aufrufen lassen, z.B. mit http://www.macupdate.com/info.php/id/7486/cronnix

Viele Grüße
 

LittlePixel

Strauwalds neue Goldparmäne
Registriert
09.07.08
Beiträge
641
Anmerkung:
iTunes sendet bei einem Titelwechsel eine Nachricht ins System, die sich auswerten lässt. Leider aber nicht via AS.

Viele Grüße
 

Hyaena

Alkmene
Registriert
07.12.08
Beiträge
33
Aua…
Ja, das kann ich mir gut vorstellen.

Punkt 1:
Frage nicht immer nach "current track". Einmal danach fragen und das zu einer Variablen schreiben reicht aus. Somit schickst Du endlos AppleEvents.

Ist mir bewusst.. Aber ich kann es ja nicht nur einmal abfragen, weil es ja immer verglichen werden soll, irgendwie muss es ja aus der Schleife wieder raus. :)

Punkt 2:
Endlosschleifen sind unschön. An Deiner Stelle würde ich das Skript ein mal pro Minuten aufrufen lassen, z.B. mit http://www.macupdate.com/info.php/id/7486/cronnix

Viele Grüße

Das will ich ja eben nicht, es soll ja so aktuell sein wie möglich.
Zu deiner Anmerkung: Wie kann man das dann abfragen? Könnte man vielleicht etwas basteln, was nach jedem dieser "Signale" ein Script aufruft?
 

LittlePixel

Strauwalds neue Goldparmäne
Registriert
09.07.08
Beiträge
641
Ist mir bewusst.. Aber ich kann es ja nicht nur einmal abfragen, weil es ja immer verglichen werden so
Nein, Dir ist es nicht bewusst ;)

Sonst würde es so aussehen:
Code:
tell the application "iTunes"
	
	repeat
		
		set currentTrack to current track 
		
		set song_name_test to the name of currentTrack
		set artist_name to the artist of currentTrack
		set album_name to the album of currentTrack

	end repeat
	
	
end tell

Das will ich ja eben nicht, es soll ja so aktuell sein wie möglich.
Zu deiner Anmerkung: Wie kann man das dann abfragen? Könnte man vielleicht etwas basteln, was nach jedem dieser "Signale" ein Script aufruft?
Leider ist das nicht so einfach.
Dafür musst Du Dich dann in Cocoa/Objective-C einlesen. Brandaktuell bekommst Du dann immer den Titel gemeldet:

Code:
	// iTunes Player Status anmelden
	[[NSDistributedNotificationCenter defaultCenter] addObserver:self
														selector:@selector(observeYourTunesPlayerState:)
															name:@"com.apple.iTunes.playerInfo"
														  object:nil];
Das gibt Dir eine gute Grundlage zum Googlen insofern Du Dich damit beschäftigen magst.

Viele Grüße