1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Applescript: Scriptoptimierung

Dieses Thema im Forum "AppleScript" wurde erstellt von Hyaena, 27.01.10.

  1. Hyaena

    Hyaena Alkmene

    Dabei seit:
    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.
     
  2. LittlePixel

    LittlePixel Strauwalds neue Goldparmäne

    Dabei seit:
    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
     
  3. LittlePixel

    LittlePixel Strauwalds neue Goldparmäne

    Dabei seit:
    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
     
  4. Hyaena

    Hyaena Alkmene

    Dabei seit:
    07.12.08
    Beiträge:
    33
    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. :)

    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?
     
  5. LittlePixel

    LittlePixel Strauwalds neue Goldparmäne

    Dabei seit:
    09.07.08
    Beiträge:
    641
    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
    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
     

Diese Seite empfehlen