Anfängerfrage .... zu applescript & iTunes

E

every

Neues Mitglied
Thread Starter
Dabei seit
24.11.2014
Beiträge
5
Reaktionspunkte
0
Hallo,
ich suche eine Möglichkeit in der iTunes playlist zu suchen:

a) funktioniert
set this_playlist to the name of current playlist
set sep to (every file track of playlist this_playlist whose name contains "xyz")

b) funktioniert nicht
set this_playlist to the name of current playlist
set my_current_playlist to (every file track of playlist this_playlist)
set sep to (every item of my_current_playlist whose name contains "xyz")

ich hätte gerne den Fall b, um die Liste nicht bei jedem Suchvorgang neu einzulesen...
Was mache ich falsch ?


  • :confused:

 
Im Fall b) ist der Inhalt der my_current_playlist-Variable eine Liste, auf die die whose-clause nicht anwendbar ist. Mit großer Wahrscheinlichkeit ist es am effizientesten a) erneut auszuführen, da die filtered reference in Form eines einzigen Apple-Events von iTunes ausgewertet wird. D.h. "iTunes" erhält die Anfrage, die Playlist nach allen Tracks deren Namen "xyz" enthält zu filtern, und gibt das Ergebnis als Liste zurück. Hingegen hast Du bei b) eine Liste von Track-References über die du selber iterieren müsstest, um jeweils den Namen zu überprüfen, was entsprechend für jeden Track der Playlist zu einem Apple Event führen würde...

Was genau möchtest Du denn erreichen, bzw. an welchem Punkt hast Du Bedenken bzgl. der Effizienz?

EDIT: Noch ein Link dazu: https://developer.apple.com/library...#//apple_ref/doc/uid/TP40000983-CH4g-BAJJHEFE
 
Zuletzt bearbeitet:
Danke für die Info !
ich war der Meinung, dass ich mit:
set my_current_playlist to (every file track of playlist this_playlist)
set sep to (every item of my_current_playlist whose name contains "xyz")
dass ich wie in der Originalliste suchen kann ...


Nächste (doofe) Frage (sorry ich bin noch Anfänger)
wie geht die Suche in einer solchen lokalen Liste dann ?




 
Zuletzt bearbeitet:
Für iTunes sollte man den search-Befehl benutzten, alles andere ist nicht performant:

set sep to search library playlist 1 for "xyz" only songs
 
wie geht die Suche in einer solchen lokalen Liste dann ?



grundsätzlich mit einer repeat-Schleife. Sei Dir dann nur im klaren darüber, dass die Schleife entsprechend der Anzahl der Tracks in Deiner Playlist oft durchlaufen wird, und in jedem Schleifendurchlauf der Name des Tracks per Kommunikation mit iTunes abgerufen wird:

Code:
set filteredTracks to {}
repeat with aTrack in my_current_playlist
	if aTrack's name contains "xyz" then set the end of filteredTracks to aTrack's contents
end repeat

Das ist ziemlich ineffizient. Die Lösung aus a) ist da wesentlich besser...
 
Aus meiner Sicht sind beide Lösungen korrekt.
Die Frage ist natürlich was Dur konkret bauen möchtest.

Wie Pill schreibt, so ist dies der effizienteste Weg, da Apple die Suche am besten implementieren kann/hat/sollte.
D.h. das Ergebnis erhält Du mit einer Anfrage an iTunes am schnellsten.
Hat aber den Preis, dass die Verarbeitung nicht abgebrochen werden kann und iTunes je nach Umfang Sekunden bis Minuten lahmlegt.
Es ist auch nicht mehr benutzbar für den Anwender. Klicken etc. ist nicht mehr möglich.

Mit der Schleife, wie von kermitd gezeigt erhältst Du das Ergebnis deutlicher langsamer und Du sendest unzählige Events an iTunes.
Dafür ist es aber möglich iTunes weiter zu benutzen und sogar eine Abbrechen-Funktion in Deine Code zu implementieren.

Die Qual der Wahl… ;-)

Viele Grüße
 
Danke für die konstruktiven Antworten !
Vielleicht noch abschließend zum Hintergrund:
Die Playlist ist strukturiert mit "Null-songs" mitdem Namen "--------------" und einer Länge von 0 sec.
Auf einem zweiten Bildschirm möchte ich dann nur jeweils den Bereich zwischen zwei aktuellen "Null-songs" anzeigen

Noch eine Verständnisfrage:
>>Mit der Schleife, wie von kermitd gezeigt erhältst Du das Ergebnis deutlicher langsamer und Du sendest unzählige Events an iTunes.
Die ausgelesene Liste ist doch lokal, warum sende ich dann unzählige Events an itunes bei der lokalen Suche nach "------------" ?

Viele Grüße
 
Blöde Frage: Warum hast du überhaupt die Null-Songs in deiner Liste?
(Wobei ich mal hoffe, dass du nur einen Null-Song in deiner Library hast, den du jedesmal als Platzhalter benutzt)....
 
Blöde Frage: Warum hast du überhaupt die Null-Songs in deiner Liste?
(Wobei ich mal hoffe, dass du nur einen Null-Song in deiner Library hast, den du jedesmal als Platzhalter benutzt)....

Dient zum optischen Strukturieren der Songliste in Itunes
 
Die ausgelesene Liste ist doch lokal, warum sende ich dann unzählige Events an itunes bei der lokalen Suche nach "------------" ?

Jedes Element Deiner Liste ist ein Object Specifier, also kein Track-Objekt im eigentlichen Sinne, sondern eine Information, wie das gewünschte Objekt ggü. iTunes zu beschreiben ist. Erst wenn Du konkrete Eigenschaften des Objekts abrufst, etwa in der Schleife den Namen des Tracks, wird implizit ein get-Befehl eingesetzt, um den Wert von iTunes zu erhalten.
 
Danke, jetzt habe ich's verstanden!
Damit können wir die Diskussion schließen.
 
Zurück
Oben Unten