Nun gut, entweder man nutzt Spotify oder hat ein iPhone, welches das (vielleicht) irgendwie ab Werk kann oder iTunes ist für einen sowieso ein Fremdbegriff, weil man immer das neuste System verwendet, wo es kein iTunes mehr gibt (sollte aber auch mit "Music" funktionieren)...jedenfalls habe ich mir da etwas gebastelt, um eine bestimmte iTunes-Playlist auf mein Android-Handy zu schieben.

Früher ging das mal ganz bequem: Ein Google-Programm hat im Hintergrund immer mein iTunes im Auge behalten und neue Tracks und Playlist-Änderungen zu "Google Play Music" geschoben. Auf dem Handy konnte ich eine Playlist auswählen, die immer auf mein Handy in den lokalen Speicher geladen wurde, so dass ich unterwegs bestimmte Titel ohne Datenverbindung anhören konnte.
Doch dann wurde "Google Play Music" eingestellt, beziehungsweise durch etwas "neues besseres" ersetzt, bei dem diese Funktion allerdings leider fehlt.

Da ich sowieso schon auf Syncthing setze, um unter anderem meine Handyfotos auf den Computer zu schieben, nutze ich hier nun auch den anderen Weg, um meine Musik vom Computer auf's Handy zu schieben...und bei Änderungen aktuell zu halten.

Alles schön lokal im heimischen Netzwerk ohne Umweg einmal um die Welt und fremde Server... ;-)

Ablauf

Da ich meine Playlist nicht all zu oft ändere, werden einmal am Tag alle MP3s einer gewünschten Playlist (sofern dort noch nicht vorhanden) in einen Ordner kopiert und nicht mehr in der Playlist vorhandene MP3s entfernt.
Syncthing synchronisiert diesen Ordner dann mit meinem Handy, so dass hinzugefügte Titel automatisch dort im Speicher landen.

Teil 1: AppleScript kopiert MP3s einer Playlist in Verzeichnis

Folgendes AppleScript kopiert die MP3-Dateien (ich habe dies hier auf ausschließlich MP3-Dateien beschränkt, da ich dem Player auf dem Handy keine AAC und MP4-Dateien zumuten wollte) einer vorgegebenen Playlist in einen vorgegebenen Ordner:

playlist_nach_ordner.scpt
property playListName : "2handy" -- Name der Playlist, die kopiert werden soll
set outputPath to "Macintosh HD:syncthing:handy-music" -- Pfad zum Ordner, in welchem die MP3s abgelegt werden sollen

tell application "Finder"
   set allFiles to list folder outputPath
end tell

tell application "iTunes"
   -- Neue Tracks hinzufügen
   set theTracks to every track in playlist playListName
   repeat with aTrack in theTracks
      set fileLocation to location of aTrack
      set newFileName to (artist of aTrack) & " - " & (get name of aTrack) & ".mp3"
      set theExtension to ""
      tell application "System Events"
         set theExtension to name extension of fileLocation
      end tell
      if theExtension is "mp3" then
         -- Wenn noch nicht existent, dann kopieren
         tell application "Finder"
            if not (file (outputPath & ":" & newFileName) exists) then
               set duplicatedFile to duplicate file fileLocation to folder outputPath
               set name of duplicatedFile to newFileName
            end if
         end tell
         -- Von Liste aller vorhandenen Dateien streichen
         if (allFiles contains newFileName) then
            repeat with i from 1 to count of allFiles
               if item i of allFiles is newFileName then set item i of allFiles to ""
            end repeat
         end if
      end if
   end repeat
end tell

-- Nicht mehr vorhandene Tracks entfernen
tell application "Finder"
   repeat with i from 1 to count of allFiles
      set theFileName to item i of allFiles
      if not (theFileName is "") and not (theFileName is ".DS_Store") and not (theFileName begins with ".") then
         delete file (outputPath & ":" & theFileName)
      end if
   end repeat
end tell

Regelmäßige Ausführung

Über launchd können wir dieses Script regelmäßig ausführen. Einmal am Tag sollte ausreichen.
Dazu eine neue Datei im Verzeichnis ~/Library/LaunchAgents erstellen:

de.apfelz.musicsync.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key>
  <string>musicsync</string>
  <key>ProgramArguments</key>
  <array>
         <string>osascript</string>
         <string>/pfad/zu/applescript/playlist-nach-ordner.scpt</string>
  </array>
  <key>StartCalendarInterval</key>
  <dict>
         <key>Hour</key>
         <integer>4</integer>
         <key>Minute</key>
         <integer>00</integer>
  </dict>
</dict>
</plist>

...und LaunchAgent scharf schalten:

launchctl load ~/Library/LaunchAgents/de.apfelz.musicsync.plist

Als Zeit habe ich mal 4 Uhr morgens gewählt...kann natürlich auch jede andere Uhrzeit sein.

Wenn man mal nicht bis 4 Uhr morgens warten möchte, weil man vor der Abreise noch schnell ein paar MP3s rüber schieben möchte, kann man natürlich auch einfach das Skript mit Hilfe des Skripteditors ausführen.

Ich empfehle, es auch bei meinem Liebslingsprogramm Butler hinzuzufügen, dann kann es mit einem Klick oder Tastenkürzel ausgeführt werden.

Teil 2: Syncthing synchronisiert mit Handy

Bis jetzt landen nur die MP3-Dateien, die ich irgendwo auf einer Festplatte habe, als Kopie in einem weiteren Verzeichnis der Festplatte.

Mit Hilfe von Syncthing sollen sie auf's Handy gelangen.

Ich gehe mal davon aus, dass Syncthing auf Handy und Computer eingerichtet sind – die Einrichtung von Syncthing ist nicht Bestandteil dieses Artikels aber eigentlich recht schnell geschehen und selbsterklärend.

Auf dem Computer neuen Ordner hinzufügen und als Ordnerpfad den Pfad unseres erstellten Musik-Ordners eintragen.
Teilen mit dem Handy (welches bereits als Externes Gerät hinzugefügt sein sollte).
Als Ordnertyp habe ich "Senden und Empfangen" gewählt. Mit nur "Senden" hatte es mir die in der iTunes-Playlist gelöschten MP3s nicht aus dem Handyspeicher gelöscht. Sollte man auf dem Handy versehentlich eine MP3-Datei löschen, so wird sie nachts um Vier wieder hinzugefügt. Blöd nur, wenn man auf dem Handy über andere Wege noch MP3s hinzufügt, denn die werden dann nachts um Vier auf dem Computer gelöscht und bei der nächsten Synchronisierung auch auf dem Handy gelöscht. Hier sollte man dann vielleicht besser mit zwei verschiedenen Unterordnern im Musik-Verzeichnis des Handys arbeiten.

Auf dem Handy sollte es recht flott gehen: Eine Meldung von Syncthing erscheint in der Benachrichtigungsleiste, dass ein Ordner geteilt wurde. Die Anfrage akzeptieren und /storage/emulated/0/Music als Pfad wählen (der Pfad gilt im Fall meines Pixels...kann je nach Handy abweichen)