5

前の質問でプレイリストの作成方法を学びましたが、トラックを追加する方法がわかりません。今私は持っています:

tracks.sort(key=lambda tup: tup[0])
i = 0
for trackList in generatePlaylists(tracks,10):
    i += 1
    playlistname = str(i)
    p = {'name': playlistname}
    playlist = iTunes.classForScriptingClass_("playlist").alloc().initWithProperties_(p)
    iTunes.sources()[0].playlists().insertObject_atIndex_(playlist, 0)

    # Find the playlist I just made
    for playlist in iTunes.sources()[0].playlists():
        if playlist.name() == playlistname:
            newPlaylist = playlist

    # Add the tracks to it
    for track in trackList:
        print track[1].name()
        iTunes.add_to_(track[1],newPlaylist)

私のトラックは tuples のリストにあります。タプルtracksの最初の要素はスコアで、2 番目の要素は実際のトラック オブジェクトです。 generatePlaylistsすべてのライブラリ トラックを 10 個のリストに分割するイテレータです。

上記のコードはエラーなしで実行されますが、iTunes ではプレイリストが空です。

4

1 に答える 1

6

まず、短い答えは次のとおりです。

track.duplicateTo_(newPlaylist)

問題は、ファイル (エイリアス) を取得してプレイリストにインポートするコマンドをiTunes.add_to_送信することです。addコマンドを送信するduplicateと、任意のオブジェクトが取得され、オブジェクトの別のコピーが作成されます。ファイルはありませんが、トラックがあります。( 経由track.location()でファイルを取得できますが、ファイルを再インポートする必要はありません。トラックをコピーするだけです。)

また、この場合、アプリでメソッドを呼び出してトラックに渡すのではなく、トラックでメソッドを呼び出す必要があります。

この前半部分は、iTunes オブジェクト モデル (およびその下にある AE モデル) をしっかりと理解していないと説明するのが困難です。しかし、あなたはそれを本当に理解する必要はありません。ほとんどの場合、(AppleScript エディタで) iTunes スクリプト辞書を調べ、(AppleScript エディタで、または py-appscript を使用して) 試行錯誤することで、必要なものを見つけることができます。(スクラップライブラリで作業しているか、バックアップがあることを確認してください…)この場合、可能性のある唯一のコマンドは、、、、またはaddです。すべてを試して、それらが何をするかを見てください. または、dougscripts にアクセスしてサンプルをダウンロードし、必要な機能を備えたサンプルを見つけてください。copyduplicatemove

これの後半は、ScriptingBridge に変換する方法を考え出すことです...まあ、SB で長い暴言を言わずに説明することはできません (読みたい場合は、SB の方が私よりもはるかに優れています)。しかし、基本は次のとおりです。iTunes に関する限り、duplicateコマンドです。直接オブジェクト ( tell application "iTunes" to duplicate theTrack to thePlaylist) を指定すると、それが使用されます。そうでない場合は、サブジェクトに自分自身を複製するように求めています ( tell theTrack to duplicate to thePlaylist)。英語とまったく同じように機能します。duplicateしかし、SB は、あるオブジェクトのメソッドであるオブジェクト指向モデルを主張しています。したがって、これら 2 つの形式のうちの 1 つだけが機能します。一般に、目的のコマンドのように見えるメソッドを持っているのはどれかを見るだけでdir(iTunes)、どれを把握することができます。dir(track)

上記からわかるように、複雑なことをしようとすると、多くの試行錯誤が必要になります。頑張ってください、そして尋ね続けてください。

PS、あなたのコードが黙って失敗する理由がわかりません。メソッドがコマンドに変換される明白な方法ではadd_to_、-1708 エラーが発生するはずです (appscriptiTunes.add(track, to=newPlaylist)または AppleScriptadd theTrack to newPlaylistの両方がそうであるように…)。

于 2012-10-19T18:47:43.420 に答える