Apple Script für iTunes: kopiere "Hinzugefügt Datum" für jeden Track in "Gruppierung"

Winkla

Neues Mitglied
Thread Starter
Dabei seit
22.01.2007
Beiträge
19
Reaktionspunkte
0
Hallo zusammen,

ich kenn mich leider gar nicht aus mit Apple Script zum Erstellen von Automatisierungen:

Habe folgendes Problem: ich möchte mein Macbook Pro (aktuell High Sierra) komplett neu aufsetzen und dann Catalina installieren. Unter Catalina möchte ich meine DJ Library (Serato DJ) nicht mehr über iTunes (in Catalina dann die App "Music") verwalten, sondern über eine zentralen Ordner. Aus diesem Ordner importiere ich die einzelnen MP3s direkt in Serato. Heisst die Info zu jedem Track sollt folglich direkt in der MP3 File gespeichert sein und nicht mehr in der iTunes Datenbank!

Unter High Sierra war eine "Integration" der iTunes Library direkt in Serato möglich, hier haben sich aber ein paar Dinge in der neuen App Music geändert, die eine derartige Nutzung nicht mehr sinnvoll machen. Doch das ist nicht relevant für meine Frage:

Ist es möglich auf meinem Rechner (aktuell High Sierra installiert) in iTunes über ein Apple Script das Datum in der Spalte "Hinzugefügt" von jede Track auszulesen und in die Spalte "Gruppierung" zu übertragen? Und das für alle Tracks in der iTunes Library? Habe Haken aktiviert bei "iTunes-Medienordner automatisch verwalten".

Bin über jegliche Tips/Scripte dankbar. Falls dies so geht, würde das die Umstellung ziemlich vereinfachen... Dann könnte ich einfach alle Tracks aus einem Ordner in Serato DJ importieren und hätte das "Hinzugefügt Datum" zur iTunes Library in jedem Track gespeichert und könnte danach sortieren...

Hinzugefügt Datum 1.png
itunes Settings.png
 
Zuletzt bearbeitet:
Ich weiß zwar nicht, weshalb das Hinzufüge-Datum wichtig ist und kann auch nicht skripten, aber ich rate dir, mal bei Doug Adams' iTunes-Skripten zu schauen, ob es da schon was passendes gibt. Da ist eine enorme Sammlung mit sehr vielfältiger Auswahl, wie man die Möglichkeiten von iTunes stark erweitert (nicht nur was Einträge und Manipulationen in den Feldern der id3-Tags und darüber hinaus).
 
Danke für den Tip, kenne die Seite aber bin nicht wirklich weiter gekommen damit. Hinzugefügt Datum ist einfach wichtig für mich, weil ich so schnell die aktuellsten Tunes finde, die ich neu hinzugefügt habe und folglich auch in Club spielen will :)
 
machbar wäre das schon, aber bei mir (10.11/itunes) wird das feld gruppierung nicht als id3-tag geschrieben und so wie ich es verstanden habe, willst du die "date added"-information doch in die mp3 schreiben.

eventuell habe ich dein anliegen aber nicht verstanden.
und warum soll es gerade "gruppierung/grouping" sein?
 
machbar wäre das schon, aber bei mir (10.11/itunes) wird das feld gruppierung nicht als id3-tag geschrieben und so wie ich es verstanden habe, willst du die "date added"-information doch in die mp3 schreiben.

eventuell habe ich dein anliegen aber nicht verstanden.
und warum soll es gerade "gruppierung/grouping" sein?

Muss nicht zwingend Feld „Gruppierung“ sein. Kann beispielsweise auch Feld „Kommentar“ sein. Wichtig ist nur, dass das iTunes Feld auch in meiner Serato Software wählbar/anzeigbar ist und ich somit danach filtern kann. Jeder in iTunes enthaltene Track hat ja ein individuelles hinzugefügt Datum (außer Alben) und gleichzeitig hinzugefügte Tracks. Aber das macht ja nichts. Ich hätte gerne diese Information in einem „anderen Feld“, also dass diese Info mit Hilfe eines Skriptes in die MP3s geschrieben werden (falls dies möglich ist :).

Ich kann ja auch das hinzugefügt Datum händisch kopieren und in ein beliebiges Feld des Tracks in iTunes einfügen. Öffne ich den Track in Serato, ist die Information vorhanden. Folglich muss diese ja in der MP3 gesichert sein... schwierig wird halt das händische Kopieren bei 180 Gb Musik....
 
Zuletzt bearbeitet:
Ich verstehe das Problem jetzt, aber wenn es immer nur um die neuesten Titel geht, müssen bei den älteren ja keine Änderungen vorgenommen werden.
Das könnte das Problem irgendwie reduzieren, also daß nur neue Tracks irgendwie markiert werden. Hat dein Abspielprogramm da keine Möglichkeit für neue Listen?
 
Ich verstehe das Problem jetzt, aber wenn es immer nur um die neuesten Titel geht, müssen bei den älteren ja keine Änderungen vorgenommen werden.
Das könnte das Problem irgendwie reduzieren, also daß nur neue Tracks irgendwie markiert werden. Hat dein Abspielprogramm da keine Möglichkeit für neue Listen?

Klar kann man neue Playlists erstellen und diese nach allen möglichen Kategorien sortieren (Genres, bpm, Erscheinungsjahr uvm.). Hier hat man mit Smart Crates viele Möglichkeiten „intelligente“ Playlists zu erstellen in Serato DJ. Jeder hat andere Methoden/Präferenzen seine Musik Library zu ordnen. Ich hatte halt die iTunes Library über 10-15 Jahre aufgebaut, das „Hinzugefügt“ Datum habe ich persönlich halt immer viel genutzt...
 
Wäre ein Fall für "This Tag That Tag" von Doug Adams, aber seine angepassten Skripte sind für >=10.15. Versuch mal das hier:
Code:
tell application "iTunes"
    with timeout of 30000 seconds
        repeat with aTrack in sel
            tell aTrack
                try
                    set field2append to date added of aTrack
                    set oldComment of comment to aTrack
                    if oldComment is "" then
                        set comment of aTrack to field2append
                    else
                        set comment of aTrack to ((oldComment & " - " & field2append) as text)
                    end if
                end try
            end tell
        end repeat
    end timeout
    beep
end tell

Keine Garantie... müde, spät, schnell... usw.
 
Hallo @Winkla,

ich habe Dir soeben das Apple-Script geschrieben und danach Deine Email erhalten.
Gerne helfe ich Dir weiter, siehe unten.

- Skripteditor öffnen
- Quelltext hinein kopieren
- Titel in iTunes markieren
- Start drücken

Im Skript gibt es die Stellen set comment of nTrack to nText und set grouping of nTrack to nText.
Derweil lasse ich das Datum zum Kommentar (der ist auch Bestandteil des ID3-Tags) schreiben.
Wenn Du wirklich zur Gruppierung möchtest, dann kommentiere das entsprechend aus/ein.

Beim Datum ist es "schwieriger". Die Frage ist, wie Du das Datum als Text darstellen möchtest.
Ich empfinde "2020-04-12 09-46-12" als sinnvoll, weil somit sortiert werden kann.

Schaue ganz unten im Quelltext, da gibt es auch unser typisches Format "12.04.2020 09.46.12".

tell application "iTunes" musst Du unter Catalina durch tell application "Music" ersetzen.

Viele Grüße

Code:
tell application "iTunes"
   
    --
   
    set selectedTracks to selection
   
    if ((count of selectedTracks) < 1) then
       
        return false
       
    end if
   
    --
   
    repeat with nTrack in selectedTracks
       
        --
       
        set nDate to date added of nTrack
       
        --
       
        set nText to my textForDate(nDate)
       
        --
       
        set comment of nTrack to nText
       
        -- set grouping of nTrack to nText
       
        --
       
    end repeat
   
    --
   
    return true
   
    --
   
end tell

-- 

on textForDate(aDate)
   
    --
   
    if (aDate is missing value) then
       
        return ""
       
    end if
   
    --
   
    set aYear to year of aDate as text
   
    --
   
    set aMonth to (month of aDate as integer) as text
   
    if (length of aMonth < 2) then
       
        set aMonth to "0" & aMonth
       
    end if
   
    --
   
    set aDay to day of aDate as text
   
    if (length of aDay < 2) then
       
        set aDay to "0" & aDay
       
    end if
   
    --
   
    set theHours to hours of aDate as text
   
    if (length of theHours < 2) then
       
        set theHours to "0" & theHours
       
    end if
   
    --
   
    set theMinutes to minutes of aDate as text
   
    if (length of theMinutes < 2) then
       
        set theMinutes to "0" & theMinutes
       
    end if
   
    --
   
    set theSeconds to seconds of aDate as text
   
    if (length of theSeconds < 2) then
       
        set theSeconds to "0" & theSeconds
       
    end if
   
    --
   
    -- Jahr-Monat-Tag Stunden-Minunten-Sekunden
   
    set x to aYear & "-" & aMonth & "-" & aDay & " " & theHours & "-" & theMinutes & "-" & theSeconds
   
    -- Tag.Monat.Jahr Stunden:Minunten:Sekunden
   
    -- set x to aDay & "." & aMonth & "." & aYear & " " & theHours & ":" & theMinutes & ":" & theSeconds
   
    --
   
    return x
   
    --
   
end textForDate
 
  • Gefällt mir
Reaktionen: tocotronaut und Winkla
Wäre ein Fall für "This Tag That Tag" von Doug Adams, aber seine angepassten Skripte sind für >=10.15. Versuch mal das hier:
Code:
tell application "iTunes"
    with timeout of 30000 seconds
        repeat with aTrack in sel
            tell aTrack
                try
                    set field2append to date added of aTrack
                    set oldComment of comment to aTrack
                    if oldComment is "" then
                        set comment of aTrack to field2append
                    else
                        set comment of aTrack to ((oldComment & " - " & field2append) as text)
                    end if
                end try
            end tell
        end repeat
    end timeout
    beep
end tell

Keine Garantie... müde, spät, schnell... usw.

Vielen Dank fürs Senden, die Variable "sel" ist nicht definiert kam als Fehlermeldung. Trotzdem Merci fürs Helfen. Der Member im nächsten Beitrag hat auch ein Script geschrieben, dies funktioniert perfekt. Danke an alle!!! :)
 
Hallo @Winkla,

ich habe Dir soeben das Apple-Script geschrieben und danach Deine Email erhalten.
Gerne helfe ich Dir weiter, siehe unten.

- Skripteditor öffnen
- Quelltext hinein kopieren
- Titel in iTunes markieren
- Start drücken

Im Skript gibt es die Stellen set comment of nTrack to nText und set grouping of nTrack to nText.
Derweil lasse ich das Datum zum Kommentar (der ist auch Bestandteil des ID3-Tags) schreiben.
Wenn Du wirklich zur Gruppierung möchtest, dann kommentiere das entsprechend aus/ein.

Beim Datum ist es "schwieriger". Die Frage ist, wie Du das Datum als Text darstellen möchtest.
Ich empfinde "2020-04-12 09-46-12" als sinnvoll, weil somit sortiert werden kann.

Schaue ganz unten im Quelltext, da gibt es auch unser typisches Format "12.04.2020 09.46.12".

tell application "iTunes" musst Du unter Catalina durch tell application "Music" ersetzen.

Viele Grüße

Code:
tell application "iTunes"
 
    --
 
    set selectedTracks to selection
 
    if ((count of selectedTracks) < 1) then
    
        return false
    
    end if
 
    --
 
    repeat with nTrack in selectedTracks
    
        --
    
        set nDate to date added of nTrack
    
        --
    
        set nText to my textForDate(nDate)
    
        --
    
        set comment of nTrack to nText
    
        -- set grouping of nTrack to nText
    
        --
    
    end repeat
 
    --
 
    return true
 
    --
 
end tell

--

on textForDate(aDate)
 
    --
 
    if (aDate is missing value) then
    
        return ""
    
    end if
 
    --
 
    set aYear to year of aDate as text
 
    --
 
    set aMonth to (month of aDate as integer) as text
 
    if (length of aMonth < 2) then
    
        set aMonth to "0" & aMonth
    
    end if
 
    --
 
    set aDay to day of aDate as text
 
    if (length of aDay < 2) then
    
        set aDay to "0" & aDay
    
    end if
 
    --
 
    set theHours to hours of aDate as text
 
    if (length of theHours < 2) then
    
        set theHours to "0" & theHours
    
    end if
 
    --
 
    set theMinutes to minutes of aDate as text
 
    if (length of theMinutes < 2) then
    
        set theMinutes to "0" & theMinutes
    
    end if
 
    --
 
    set theSeconds to seconds of aDate as text
 
    if (length of theSeconds < 2) then
    
        set theSeconds to "0" & theSeconds
    
    end if
 
    --
 
    -- Jahr-Monat-Tag Stunden-Minunten-Sekunden
 
    set x to aYear & "-" & aMonth & "-" & aDay & " " & theHours & "-" & theMinutes & "-" & theSeconds
 
    -- Tag.Monat.Jahr Stunden:Minunten:Sekunden
 
    -- set x to aDay & "." & aMonth & "." & aYear & " " & theHours & ":" & theMinutes & ":" & theSeconds
 
    --
 
    return x
 
    --
 
end textForDate

Hab mir einen 2. Admin Account angelegt um es mit ein paar weniger Tracks zu verproben in iTunes. Es funktioniert perfekt: 1000 Dank, Du weisst gar nicht wie sehr mir das weiterhilft :) MERCI!

Ergänzung 1: Habe jetzt bei 10 Songs mit dem Skript das „Hinzugefügt“ Datum in Spalte „Kommentar“ und „ Gruppierung“ übertragen (Script 2 x hintereinander ausgeführt mit geänderten Parameter). In Serato eingelesen, kann ich über Spalte Kommentar filtern, alles perfekt. Nur aus Interesse: im Feld Gruppierung ist in Serato kein Wert ersichtlich, obwohl gespeichert?! Aber das liegt dann wohl an Serato, dass das Programm die id3 Info im Feld Gruppierung nicht korrekt auslesen kann?

Ergänzung 2: Ja liegt an Serato, bei M4A Files kommt die Info aus Feld "Gruppierung" mit, bei MP3s nicht. "Hinzugefügt" Info in Feld Kommentar reicht ja > mein Problem ist gelöst. Danke nochmals fürs Erstellen des Scriptes, das hilft mir ungemein :)
 
Zuletzt bearbeitet:
haben alle nix zu tun, was?! :crack:

ergänzend meine version (geht über alle file tracks, preview + skip, isodate nach comment):
Code:
#
# itunes-copy-date-added-to-comment
# (c) Olivetti 2020
#

try
   
    tell application "iTunes"
        #activate
        set my_count to count every file track
        set i to 0
        #return
       
        repeat with my_track in every file track
           
            set i to i + 1
           
            set my_name to name of my_track
            set my_comment to comment of my_track
            set my_location to location of my_track
            set my_date_added to date added of my_track
           
            if my_date_added is not "" then
               
                tell me to set my_isodate to date_to_iso(my_date_added)
               
                set my_comment to comment of my_track
                if my_comment is "" then
                    set my_new_comment to my_isodate
                else
                    set my_new_comment to my_isodate & return & my_comment
                end if
               
                ### for disabling display comment out '#tell… #buttons… #"Cancel… #if button… #tell… _continue'
                tell me to set result to display dialog ¬
                    "Track:" & tab & tab & i & "/" & my_count & return & ¬
                    "Name:" & tab & tab & my_name & return & ¬
                    "Comment:" & tab & my_comment & return & ¬
                    "Location:" & tab & tab & my_location & return & return & ¬
                    "Date added:" & tab & my_date_added & return & return & ¬
                    "New Comment:" & tab & my_new_comment & return ¬
                    buttons {"                                    Skip                                                                                                                                                                                                        ", ¬
                    "Cancel", "OK"} cancel button 2 default button 3
               
                if button returned of result contains "Skip" then
                    set my_button to "skip"
                else
                    set my_button to "ok"
                end if
                tell me to _continue(my_button, my_track, my_new_comment)
               
                ### don't touch until disabling display
                #set comment of my_track to my_new_comment
               
            else
                error 1
            end if
           
        end repeat
    end tell
   
on error num
    beep
    say "Error " & num
end try

on _continue(my_button, my_track, my_new_comment)
    if my_button is "skip" then return
    tell application "iTunes" to set comment of my_track to my_new_comment
end _continue

on zero_pad(value, string_length)
    set string_zeroes to ""
    set digits_to_pad to string_length - (length of (value as string))
    if digits_to_pad > 0 then
        repeat digits_to_pad times
            set string_zeroes to string_zeroes & "0" as string
        end repeat
    end if
    set padded_value to string_zeroes & value as string
    return padded_value
end zero_pad

on date_to_iso(now)
    #set now to (current date)
    set result to (year of now as integer) as string
    set result to result & "-"
    set result to result & zero_pad(month of now as integer, 2)
    set result to result & "-"
    set result to result & zero_pad(day of now as integer, 2)
    set result to result & "T"
    set result to result & zero_pad(hours of now as integer, 2)
    set result to result & ":"
    set result to result & zero_pad(minutes of now as integer, 2)
    set result to result & ":"
    set result to result & zero_pad(seconds of now as integer, 2)
    return result
end date_to_iso

Zum Verständnis: dein Script macht das gleiche, nur dein Ansatz/Programmierung ist anders?
Ja, ich habe grade Zeit um mich mit meinen iTunes Problemen zu befassen :)
 
ja, es sind halt noch einige features eingebaut (nur auf file tracks/preview/alt-comment-übernahme).

wer das über mehr als 10000 tracks laufen lässt, sollte dann natürlich den preview auskommentieren. :p
 
  • Gefällt mir
Reaktionen: Winkla
ja, es sind halt noch einige features eingebaut (nur auf file tracks/preview/alt-comment-übernahme).

Ahh, du hast eingebaut, dass vorhandene alte Comments nicht überschrieben werden? Ich kenne mich nicht gut aus, deswegen eine evtl. „blöde“ Frage: ich muss bevor ich dein Script ausführe im Code angeben/wählen, welche Parameter gewünscht sind? Einmal gestartet führt das Script dann natürlich aus, was man „gewählt“ hat...
 
nein, man lässt es laufen und entscheidet im preview mittels skip: track wird übersprungen, ok: comment wird geschrieben und cancel: script abbrechen.

was ich noch einbauen müsste, wäre die "missing value in location"-prüfung für evtl. fehlende tracks, die aber noch in der library sind und eine auswahl beim start über selektierte oder alle file tracks und mit oder ohne preview.

edit:
missing file track ✔
selection or all file tracks ✔
enable/disable preview ✔
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: Winkla
nein, man lässt es laufen und entscheidet im preview mittels ok/cancel/skip.

Okay einfach im Script Editor ausführen, dann habe ich dort im Preview Fenster Wahlmöglichkeiten? Werde es heute Abend ausprobieren! Danke Dir für deine Hilfe!
 
Zurück
Oben Unten