ファイルの場所に基づいたItunesのスマートプレイリスト


1

特定のフォルダーに基づいてiTunesでスマートプレイリストを作成したい(メディアライブラリを手動で管理する)。

ITunes 12では、それがどうにかしてまだ可能ですか(スクリプトを含む場合でも)?

回答:


2

そうは思いません。彼らはiTunesデータベース/ライブラリからの情報を使用しているように見えるので、コンピュータ内のランダムなフォルダについてどうやって知ることができますか?

ただし、Folder Actionsまたはlaunchdを使用してシミュレートできますが、どちらも完璧ではありません。

フォルダアクションは、ディレクトリ内の新しいファイルに対してのみ機能し、実行するプログラム/スクリプトに追加されたファイルのリストを提供するため、何が変更されたかがわかります。

一方、launchdは、フォルダー内で何かが変更されるたびにスクリプト/アプリを実行します。複数を監視できますが、どのパスが変更されたか、どのように追加または削除されたかなどはわかりません。

私は個人的にlaunchdに行きます。単一のフォルダーである場合は、スクリプトにハードコーディングできます。

スクリプトについては、これを試してください...

set dpath to "/some/path/test/"
set qdpath to quoted form of dpath
set listname to "MyList"
set adpath to (POSIX file dpath as alias)


# Get audio files in selected folder 
#   -- alas no recursive search results without a lot more code... :(
#   -- or use mdfind or other command line tool using `do shell script...`
set afiles to {}
tell application "Finder"
    repeat with ext in {".mp3", ".m4a"}
        set l to (every file in adpath whose name contains ext)
        repeat with f in l
            set end of afiles to (f as alias)
        end repeat
    end repeat
end tell

tell application "iTunes"
    if not (user playlist listname exists) then
        make new user playlist with properties {name:listname}
    end if

    # Built a list of existing list tracks so we don't have duplicates...
    set itracks to {}
    try
        set itracks to (get location of every track in playlist listname)
    end try

    set view of window 1 to playlist listname

    # Add not already in playlist
    repeat with afile in afiles
        if afile is not in itracks then
            try
                set tid to (add afile to playlist listname)
            end try
        end if
    end repeat

    # Remove any tracks from the itunes playlist not in the folder
    # and from the iTunes database else they still show up as invalid tracks...
    set iItems to (every track in playlist listname)
    set iLib to library playlist named "Library"
    repeat with iItem in iItems
        set loc to location of iItem
        if loc is not in afiles then
            set pid to persistent ID of iItem

            log "Removing: " & loc
            try
                # Thanks Doug Adams, it was driving me nuts....
                delete (some file track of library playlist 1 whose persistent ID is pid)
            end try
            delay 1
        end if
    end repeat
end tell

フォルダーへのファイルの追加と削除に反応するのを見るのは実際に楽しいです。楽しい.... :)

最後に、これらのURLを確認することをお勧めします。

www.macissues.com/2015/02/02/how-to-use-launchagents-to-monitor-folder-contents-in-os-x/ apple.stackexchange.com/questions/6658/


すごい、Vic、徹底的な説明をありがとう。場所を(役に立たない)descriptionタグに保存するAppleScriptを書きました。もっと時間があるときに飛び込みlaunchdます。
ヘッジ

問題ない。他の場所で同様の解決策が提案されましたが、今は見つかりません。フィールドを使用せず、それらをすべて変更することを忘れないでください。いずれにせよ、これまでやってきたことがなかったので、これは楽しいことでした。このスクリプトは最近書いたものの修正版なので、大したことではありませんでした。
ヴィック
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.