如何从iTunes主库中获取音频文件(由Scripting Bridge返回)?

时间:2011-03-22 13:49:19

标签: cocoa itunes scripting-bridge

我有一个非常简单的问题。我想将audiofiles放入我的表视图中。我如何区分它们与PDF和电影等?

我通过Scripting Bridge从iTunes获取它们:

    iTunesSource *source = [[[self iTunes] sources] objectAtIndex:0];
    iTunesPlaylist *mainPlaylist = [[source libraryPlaylists] objectAtIndex:0] ;
    library_ = [[NSArray arrayWithArray:[mainPlaylist tracks]] retain ] ;

这给我一个错误,说无法找到类iTunesFileTrack(在链接时) :

[track get];
if(![track isKindOfClass:[iTunesFileTrack class]]) {
    DLog1(@"SKIPPING kind: %@", [track kind]);
}

我确定我错过了一些简单的事情:)

相关说明:是否有更快的方式来阅读iTunes资料库?我只是建议从xml文件加载它,但这对我来说似乎不安全。如果苹果在下一个版本中改变了什么,我就搞砸了。

谢谢

编辑:使用sdef /Applications/iTunes.app | sdp -fhm --basename iTunes我可以生成我需要检查类的.m文件。但它似乎不起作用:

[track get];         
if(![[track className] isEqualToString:@"ITunesFileTrack"]) {
    DLog1(@"SKIPPING kind: %@", [track kind]);
    continue;
}

Skipps只是我的流:P不是电影。 (即使我添加(track.videoKind != iTunesEVdKNone))。甚至PDF都是iTunesFileTracks。但.h说:

// a track representing an audio file (MP3, AIFF, etc.)
@interface iTunesFileTrack : iTunesTrack

1 个答案:

答案 0 :(得分:1)

我在我的代码中使用了类似的内容,因此它应该可以正常工作(app是iTunes SBApplication):

1。)首先获取库源

- (ITunesSource *)librarySource {
  NSArray *sources = [[app sources] get];       
  NSArray *libs = [sources filteredArrayUsingPredicate:[NSPredicate
    predicateWithFormat:@"kind == %i",
    ITunesESrcLibrary]];
  if ([libs count]) {
    return [libs objectAtIndex:0];
  }
  return nil;
}

2。)迭代库播放列表

NSArray *libraryLists = [[[self librarySource] libraryPlaylists] get];
for (ITunesLibraryPlaylist *list in libraryLists) {
  NSArray *listTracks = [[list fileTracks] get];
  for (ITunesTrack *listTrack in listTracks) {
    // do stuff...
  }
  [listTracks release];
}

3.)您可以检查其他类型的轨道

if (track.videoKind != ITunesEVdKNone || track.podcast) {
  // track is not of type music
}