Windows SDK中iTunes的媒体类型

2 投票
4 回答
1367 浏览
提问于 2025-04-15 23:34

我最近发现了Windows SDK中iTunes COM的强大功能。我正在用Python和win32com来和我的iTunes库进行交流。可以说,我的脑袋快要爆炸了,这个API真是太棒了。

不过我有一个问题,我该怎么访问曲目的媒体类型属性呢?我查看了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 个回答

0

好吧,媒体类型在接口 IITTrack.Kind 里,但这可能不是你想要的答案 - 答案会是以下之一:

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

你可能需要看看 IITTrack.Genre,它提供了ID3标签中的类型字符串,这样你就可以找到“有声书”或者苹果的“书籍与朗读”。(有些类型在iTunes/iPod中会被特别处理)。

小提示:我下载的iTunes SDK中的帮助文件似乎有问题 - 我不得不把它转换回HTML文件,然后用Firefox和grep来找到我需要的信息。

0

我找到的关于“媒体类型”这个属性的唯一参考是ITUserPlaylistSpecialKind这个枚举。这个属性只在一个获取方法IITUserPlaylist::SpecialKind中使用。所以看起来它是一个只读的播放列表级别的属性。我猜要读取这个属性,你需要先获取到这个曲目的播放列表,然后再获取播放列表的SpecialKind属性。如果想要修改这个属性,你可能需要把曲目移动到合适的播放列表中。

0

你可能找不到它的一个原因是,COM对象所引用的原子结构可能已经过时了。关于MP4结构中最常用的原子列表,可以在这里找到:http://atomicparsley.sourceforge.net/mpeg-4files.html。我没有看到“媒体种类”这个原子。我想你可以尝试通过atomicparsley来解析这个结构,但据我所知,它只会找到它知道的原子。

简单来说:COM对象可能不知道“媒体种类”这个属性。

撰写回答