Windows SDK中iTunes的媒体类型
我最近发现了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 个回答
好吧,媒体类型在接口 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来找到我需要的信息。
我找到的关于“媒体类型”这个属性的唯一参考是ITUserPlaylistSpecialKind这个枚举。这个属性只在一个获取方法IITUserPlaylist::SpecialKind中使用。所以看起来它是一个只读的播放列表级别的属性。我猜要读取这个属性,你需要先获取到这个曲目的播放列表,然后再获取播放列表的SpecialKind属性。如果想要修改这个属性,你可能需要把曲目移动到合适的播放列表中。
你可能找不到它的一个原因是,COM对象所引用的原子结构可能已经过时了。关于MP4结构中最常用的原子列表,可以在这里找到:http://atomicparsley.sourceforge.net/mpeg-4files.html。我没有看到“媒体种类”这个原子。我想你可以尝试通过atomicparsley来解析这个结构,但据我所知,它只会找到它知道的原子。
简单来说:COM对象可能不知道“媒体种类”这个属性。