iTunes: Script ausführen bei Song-Wechsel

Deschain87

Aktives Mitglied
Thread Starter
Dabei seit
28.08.2007
Beiträge
285
Reaktionspunkte
24
Hallo zusammen

Ist es möglich, bei Wechsel des Tracks in iTunes ein Apple-Script auszuführen?
Wenn ja, wie geht das?
Habe bei meiner Google-Recherche leider nicht gefunden, wie man auf Events reagieren kann...

Vielen Dank für jede Anregung!

Grüsse
Andy
 
Der Wechsel von einem Track zum nächsten ist technisch gesehen kein Event.
Um was Du vorhast zu realisieren, müßtest Du
- ein Script starten, das den aktuell laufenden Titel registriert
- in einer Schleife in kurzen Zeitintervallen (1 - 5 Sekunden) überprüft, ob der aktuelle Track immer noch der gleiche ist wie beim Start des Scripts, und wenn dem nicht so ist einen von Dir definierten Job erledigt
- die Variabile, die den aktuell laufenden Track enthält, muß natürlich beim Trackwechsel aktualisiert werden.

Für alle o.g. Prozeduren findest Du Beispiele in diesem Forum und im WWW. Die iTunes-Klassen und Events, die Du einbauen mußt, sind im iTunes-Scriptverzeichnis beschrieben.

Das Problem mit diesen Loops im Dauerbetrieb ist, daß sie auf Dauer ram- und prozessorintensiv werden und die Gesamtleistung Deines Rechners beeinträchtigen können. Man sollte sich also vorher gut überlegen, ob einem das der Spaß wert ist.

Good scripting
Farid
 
Zuletzt bearbeitet:
Hallo,

Farids Vorschlag ist mit AS der einzig Weg der Umsetzung.
Die Nebeneffekte hat er Dir ebenfalls aufgeführt.

Der Wechsel von einem Track zum nächsten ist technisch gesehen kein Event.

Nicht böse gemeint ;-)

Es ist absolut ein Event. iTunes sendet eine Nachricht aus, die jede andere Applikation abfangen kann.
iTunes ist da sogar vorbildlich ohne Ende. Nahezu jede Aktion kann observiert werden.
Ich setze dies bereits erfolgreich ein.

Aber insofern ist es korrekt, dass es mit AS nicht umzusetzen ist.

Viele Grüße
 
Vielen Dank für die Tips, wie es mit einer Schleife zu bewerkstelligen wäre ist mir zwar durchaus klar.
Habe nur nachgefragt, weil es Eventgesteuert viel sauberer wäre (RAM, CPU etc. wurden von euch ja erwähnt).

Wenn es mit Applescript nicht geht, geht es sonstwie?
Möglicherweise lässt sich ja ein Weg finden, damit das Applescript anzustossen...

Wie macht das z.B. Last.fm mit ihrem iTunes Plugin?

Danke für eure wertvollen Tips.

Grüsse
Andy
 
Das ist schon klar.
Denke auch, dass ich mich da Einarbeiten kann (bin hauptberuflicher Entwickler), aber um mich hier durchzulesen ist mir doch die Zeit etwas zu schade, da ich eigentlich nur was ganz einfaches erreichen will:

Wenn ich den Song ändere (oder dieser wechselt), wird in Colloquy (IRC-Client) die Message "/music" abgesetzt.
 
Denke auch, dass ich mich da Einarbeiten kann (bin hauptberuflicher Entwickler), aber um mich hier durchzulesen ist mir doch die Zeit etwas zu schade

... und Deinen Marktwert immens gesteigert ;-)

da ich eigentlich nur was ganz einfaches erreichen will

... dann solltest Du wissen, das solche Dinge doch nicht so einfach sind ;-)

Bzw. eigentlich ist das schon in 10 Minuten umgesetzt. Aber Du hast Die Problematik des Einarbeitens schon genannt.
Verstehe ich.

Jetzt musst Du Dich entscheiden, wie Du weiter verfahren möchtest.

Viele Grüße
 
Marktwert gesteigert?
Mit absolut minimalen Apple-Entwicklungskenntnissen bzw. zusammenkopiere?
Nene, glaube nicht dass das meinen Marktwert steigert... ^^

Naja, wenn jemand sowas in der Richtung schon gemacht hat wäre mir ein kurzer Beispielcode sehr hilfreich.
Wenn nicht, auch nicht schlimm.
Ich kann durchaus ohne die Funktionalität leben. =)
 
Naja, wenn jemand sowas in der Richtung schon gemacht hat wäre mir ein kurzer Beispielcode sehr hilfreich.

Klar haben einige, u.a. meine Wenigkeit.
Aber warum sollte ich es Dir geben? Die Mühe solltest Du Dir schon selbst geben ;-)
Vor allem sich dazu selbst belesen.
Dokumentation dazu habe ich Dir gezeigt. Jeder Entwickler argumentiert so, von daher wird es Dich jetzt nicht überraschen.
Bei Fragen (mit eigenem Code der Beweisführung) helfe ich gerne weiter.

Mit absolut minimalen Apple-Entwicklungskenntnissen bzw. zusammenkopiere?

Du kannst es auch erlernen ;-)

Ich kann durchaus ohne die Funktionalität leben. =)

Dann scheint es darauf hinauszulaufen.

Viele Grüße
 
Warum solltets du's mir geben.
Hm, gute Frage.
Es gibt Leute, die stellen Ihren Code aus ideologischen Gründen zur Verfügung (Linux).
Andere, um zu protzen.
Wieder andere, um damit eine Anregung zur Selbsthilfe zu geben, denn ich nehme an, ich müsste mich auch in deinen Code einlesen, gewisse Dinge nachschlagen und meine Changes selbst implementieren.

Sind alles mögliche Gründe.
Du kannst mir deinen Code geben, wenn du willst.
Musst du aber nicht.
Ich werde nicht darum betteln.

...obwohl ich zugeben muss, dass ich dir dankbar wäre, weil für mich ist es der Weg des geringsten Widerstands... =)
 
Ich sollte mich nicht in solche Diskussionen verwickeln lassen.

Wir halten fest:

- Du meinst, Du seist Entwickler
- Du fragst hier nach einer möglichen Umsetzung
- ich nannte sie Dir
- jetzt fragst Du nach Code

Ich bot Dir an (sicherlich auch eine Vielzahl von anderen Nutzern):
Bei Fragen (mit eigenem Code der Beweisführung) helfe ich gerne weiter.

Dein erbrachter Is-Zustand ist bei nil.

... und das ist das Hauptproblem:

...obwohl ich zugeben muss, dass ich dir dankbar wäre, weil für mich ist es der Weg des geringsten Widerstands... =)
aber um mich hier durchzulesen ist mir doch die Zeit etwas zu schade
Ich kenne keinen Anwendungsentwickler, der auf dieser Ebene argumentiert.
Auch wenn er es nicht benötigt.

Zumal Du schon Deine ersten Gehversuche in der Zeit hättest unternehmen können ;-)
In zwei Stunden hättest Du / wir das Teil dann fertig.

Viele Grüße
 
Ich muss dich bitten, nicht persönlich zu werden.
Das "du meinst du bist Entwickler" entbehrt jeder Sachlichkeit.
Ich weiss, wofür ich bezahlt werde.

Warum ich so argumentiere: Bequemlichkeit.
Für so 'ne "nun mal eben" Funktionalität für Privatgebrauch ist es mir nunmal die Mühe nicht wert, mich zuerst in die Eigenheiten eines mir bis anhin unbekannten Frameworks einzuarbeiten.

Ich empfinde meine Argumentation als durchaus ehrlich und legitim.

Mir geht es primär darum, "mal schnell" eine mir nützliche Funktionalität nachzurüsten, und nicht das komplette Framework zu erlernen.

Oder beinhaltet der berufliche Status als Entwickler deiner Meinung nach die Fähigkeit, jede Sprache und jedes API beherrschen zu müssen?

Ich mag keine Grundsatzdiskussionen führen.
Entweder du hilfst mir etwas auf die Sprünge, oder du lässt es.
Das überlasse ich dir...
 
Hallo,

Ich muss dich bitten, nicht persönlich zu werden

... nur weil ich schrieb:

- Du meinst, Du seist Entwickler

Was ist daran persönlich?

Aus Erfahrung her schreibe ich im Konjunktiv und das ist absolut berechtigt.
Wie Du daraus eine Wertung zu Deiner Person ableitest ist mir nicht nachvollziehbar.
Liegt mir eh fern.

- Du zeigst keine Bereitschaft Dein Problem zu lösen
- Du hast keinerlei "was habe ich probiert" hervorgebracht
- Dir wäre Code am Liebsten

Oder beinhaltet der berufliche Status als Entwickler deiner Meinung nach die Fähigkeit, jede Sprache und jedes API beherrschen zu müssen?

Meine Meinung ist absolut irrelevant.
Aber sicher ist, dass jeder Anwendungsentwickler eine Vorgehensweise erlernt hat (muss) Probleme zu erkennen und dieser versuchen zu lösen.
Keiner hat von seinen Meistern gesagt bekommen.

Jo mei, im Zwoifelsfoll sagsch halt:

Warum ich so argumentiere: Bequemlichkeit.

Jeder von uns Code-Tippsen ist stinke faul. Aber im Sinne des codens an sich.

Ich kann nur nochmals zum Ausdruck bringen:
Meine Hilfe hast Du Dir gesichert. Die der anderen Nutzer sicherlich auch.
Aber ohne Eigeninitiative ist hier nichts los.

Entweder du hilfst mir etwas auf die Sprünge, oder du lässt es.

Du hast es in der Hand.

Viele Grüße

PS: Sei doch bitte nicht so "verbittert" und nimm doch Foren-Beiträge niemals als persönlich. :cake:
 
Ich halte deinen Kommentar für gezielt reisserisch, den beruflichen Status anzuprangern gehört hier nicht hin und tut nichts zur Sache.
Naja, dann führe ich diese Grundsatzdiskussion halt trotzdem:

Würde mich jemand in meiner "Stammsprache" nach einem Problem fragen und ich hätte was ähnliches schon gemacht, würde ich ihm, sofern möglich (Lizenzrechte etc.) den betreffenden Codeausschnitt geben.

Warum?
- Auch den Code muss er erst nachvollziehen können. Das ist mitunter nicht so einfach und kommt Teilweise dem erlernen der Grundlagen gleich.
- Der Code erfüllt mit grosser Wahrscheinlichkeit nicht die Anforderungen des Fragestellers. Er wird den Code also auch noch abändern müssen.

Ich empfinde den Lerneffekt so als schon sehr gross.
Andererseits: will der Fragesteller gar keinen Lerneffekt, ist das nicht mein Problem -> ich helfe trotzdem, natürlich unter der Voraussetzung, dass ich ihm nicht die Lösung einfach so hinschmeisse.

Was ich in deine Postings reininterpretiere ist die konsequente Weigerung, einem zugegebenermassen faulen Neuling Basics zu liefern, auf denen er aufbauen kann.
Auch das ist legitim.
Wenn man so denkt wie du, dann kann man das aber auch wesentlich sachlicher zum Ausdruck bringen.

Angenommen, du musst an deinem Computer eine Hardwarekomponente wechseln und hast keinen Plan davon. Was hörst du lieber:
- Lies doch Fachbuch XY komplett durch, dort findest du die Antwort
- Komm, ich zeig' dir, wies' geht

Ist alles eine Frage der pers. Einstellung.
 
Zitat aus dem Forum-Reglement:

Völlig Falsch sind hier Anfragen von Leuten, die nicht programmieren können und es auch nicht lernen wollen.

Insbesondere wenn die Community dazu verwendet werden soll andern kostenfrei Code zu generieren!

Kurzum:
Nutzer die keine Lernbereitschaft zeigen helfe ich dann doch nicht weiter.
Du kannst das für Dich selbstversändlich anders halten.

Ich vermute, dass wird der erste Thread, der wegen mir geschlossen wird.

maceis, wird sicherlich bald hier vorbeischauen.

Ich halte mich dann auch da raus :)

Viele Grüße
 
Ich habe dich nie gebeten, mir kostenfrei Code zu generieren.
Worum ich gebeten habe, sind die Basics.
Das fängt damit an, wie son' Tool aufgebaut sein muss (also quasi das "Grundgerüst" einer Objective C-App).
Dazu hätte mir auch ein Link zu einer kurzen knackigen Doku gereicht, allerdings nicht einer, das auf alle Eventualitäten von Objective C eingeht, wegen der Produktivität.

Wenn man helfen will, muss man auch die Sensibilität haben, den "Stand" des Fragestellers zu erkennen.
Den habe ich klar kommuniziert: ich bin Entwicklungsmässig nicht unbewandert, habe aber in der Apple-Entwicklungsumgebung noch nie etwas gemacht.

Aufbauend auf diesem Fakt muss es doch möglich sein, mir wenigstens einige Denkanstösse zu liefern.
 
...

Hallo DarkThougts,

Code:
#import <mach-o/dyld.h>

#import <Foundation/NSDistributedNotificationCenter.h>
#import <Foundation/NSString.h>
#import <AppKit/NSAppleScriptExtensions.h>

 extern int NSApplicationMain(int argc, const char *argv[]);

 @interface iTunesConnection : NSObject
 - (id) init;
@end

@implementation iTunesConnection
- (id) init {
NSDistributedNotificationCenter *nc = [NSDistributedNotificationCenter defaultCenter];
[nc addObserver:self
selector:@selector(updateNow:)
name:@"com.apple.iTunes.playerInfo"
object:nil];

     return self;
}

- (void) updateNow:(NSNotification *)notification {
NSString *updateScript = [NSString stringWithFormat:[B]@"tell application \"Finder\"\ndisplay dialog \"iTunes Changed\"\nend tell"];[/B]
NSAppleScript *as = [[[NSAppleScript alloc] initWithSource:updateScript] autorelease];
[as executeAndReturnError:nil];
}
@end

 int main(int argc, const char *argv[])
{
	iTunesConnection *connection;
	connection = [[iTunesConnection alloc] init];

 	if (NSIsSymbolNameDefined("_ASKInitialize"))
	{
		NSSymbol *symbol = NSLookupAndBindSymbol("_ASKInitialize");
		if (symbol)
		{
			void (*initializeASKFunc)(void) = NSAddressOfSymbol(symbol);
			if (initializeASKFunc)
			{
				initializeASKFunc();
			}
		}
	}
	
    return NSApplicationMain(argc, argv);
}

Hier Beispielcode den Google geliefert hat. Die fettmarkierte Stelle musst Du noch anpassen. Im Beispiel meldet der Finder den Songwechsel.

XCode starten -> File -> New Project... -> Application -> AppleScript Application -> Pfad für den Projektordner angeben und den Code in die main.m pasten -> Build an Go...

Gruß Andi
 
Hallo Andi

Dir vielen Dank, werde das gerne mal probieren.
Kleine Frage am Rande: Du hast bestimmt die Diskussion verfolgt.
Weswegen stellst du mir fertigen Code zur Verfügung? :)
 
Zurück
Oben Unten