2

最近、iTunes COM for Windows SDK の素晴らしさを知りました。Python を win32com で使用して、iTunes ライブラリと通信しています。言うまでもなく、私の頭は爆発寸前です。この API は素晴らしいです。

1 つ問題があります。トラックの Media Kind 属性にアクセスするにはどうすればよいですか? SDK で提供されているヘルプ ファイルを調べましたが、その兆候は見られませんでした。iTunes にアクセスすると、トラックのメディアの種類を変更できます。この方法で、ミュージック ライブラリにオーディオブックが表示されている場合、メディアの種類をオーディオブックに設定すると、iTunes の [ブック] セクションに表示されます。かなり気の利いた。

私が質問する理由は、LibraryPlaylist に表示される大量のオーディオブックがあるからです。

これまでの私のコードは次のとおりです。

import win32com.client

iTunes = win32com.client.gencache.EnsureDispatch('iTunes.Application')
track = win32com.client.CastTo(iTunes.LibraryPlaylist.Tracks.Item(1), 'IITFileOrCDTrack')

print track.Artist, '-', track.Name
print
print 'Is this track an audiobook?'
print 'How the hell should I know?'

前もって感謝します。

4

4 に答える 4

0

その「Media Kind」属性への唯一の参照は、ITUserPlaylistSpecialKind 列挙です。使用される唯一の場所は、getter メソッド IITUserPlaylist::SpecialKind です。したがって、それは読み取り専用のプレイリスト レベルの属性のようです。それを読み取るには、トラックのプレイリストを取得してから、プレイリストの SpecialKind 属性を取得する必要があると思います。書き込むには、おそらくトラックを適切なプレイリストに移動する必要があります。

于 2010-06-12T15:30:13.380 に答える
0

Media Kind はインターフェイスIITTrack.Kindにありますが、それはおそらくあなたが望むものではありません - 答えは次のいずれかになります:

public enum ITTrackKind
    {
        ITTrackKindUnknown = 0,
        ITTrackKindFile = 1,
        ITTrackKindCD = 2,
        ITTrackKindURL = 3,
        ITTrackKindDevice = 4,
        ITTrackKindSharedLibrary = 5,
    }

おそらく、ID3 タグ Genre の文字列形式を与えるIITTrack.Genreを確認する必要があるため、"Audiobook" または Apple の "Books & Spoken" を見つけることができます。(一部のジャンルは、iTunes/iPod で特別に扱われます)。

ヒント: ダウンロードした ITunes SDK のコンパイル済みヘルプ ファイルが壊れているようです。HTML ファイルに変換し、Firefox/grep を使用して必要な情報を見つける必要がありました。

于 2010-06-15T03:03:28.343 に答える
0

見つからない理由の 1 つは、com オブジェクトが参照するアトム構造が古くなっている可能性があるためです。MP4 構造のアトムの最も一般的なリストは次のとおりです。私はあなたがatomicparsleyを介して構造を解析しようとすることができると思いますが、私の知る限り、それはそれが知っている原子しか見つけられません.

簡単な回答: COM オブジェクトが MediaKind 属性を認識していない可能性があります。

于 2010-06-14T16:53:31.293 に答える
-1

It is actually quite easy, use the IITFileOrCDTrack.Podcast :

yourTrack.Podcast

If it is a podcast, it will return True, otherwise it will return False.

You can of course set it through

yourTrack.Podcast(bool)

Glad I could help.

于 2012-02-26T10:32:42.347 に答える