如何使用iTunes.h / Scripting Bridge从专辑中获取所有曲目

时间:2012-12-28 21:36:39

标签: objective-c macos cocoa itunes

我想使用iTunes.h从iTunes上的相册中获取所有曲目 现在我通过以下方式获取当前曲目的数据:

NSInteger trackID = iTunes.currentTrack.databaseID;
NSString *name  = iTunes.currentTrack.name;

以及:

的专辑名称
NSString *trackAlbum = iTunes.currentTrack.album;

但是知道我不知道如何获得与当前曲目相同的专辑中的所有曲目 有任何想法吗?感谢

3 个答案:

答案 0 :(得分:1)

iTunes API编写得很糟糕。 您必须使用谓词过滤数组。

NSArray *allSongs = [self allSongs];
NSArray *songsOfAlbum = [allSongs filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"album == %@ && artist == %@", albumString, artistString]];

你可以得到这样的所有歌曲:

// Get all Songs
- (NSArray *)allSongs {
    if (_allSongs == nil) {

        NSArray *tracksToPlay = [(SBElementArray *)[self.library tracks] get];

        // Sort by artist
        _allSongs = tracksToPlay;
    }

    return _allSongs;
}

- (iTunesLibraryPlaylist *)library {
    if (_library == nil) {
        // Whole Library
        iTunesSource *source = [[[[self.iTunes sources] get] filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"kind == %i", iTunesESrcLibrary]] objectAtIndex:0];
        // Only the Music
        _library = [[[[source playlists] get] filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"specialKind == %i", iTunesESpKMusic]] objectAtIndex:0];
    }

    return _library;
}

答案 1 :(得分:1)

您可以将iTunes Library Framework(10.9 osx)用于iTunes 11。

#import <iTunesLibrary/ITLibrary.h>
#import <iTunesLibrary/ITLibMediaItem.h>
#import <iTunesLibrary/ITLibAlbum.h>

NSError *error = nil;
ITLibrary *library = [ITLibrary libraryWithAPIVersion:@"1.0" error:&error];
if (library)
{
        NSArray *tracks = library.allMediaItems; //  <- NSArray of ITLibMediaItem
}
for (ITLibMediaItem *item in tracks) {
       NSLog(@"tracks %@",item.album.title);
}

您可以从ITLibMediaItem

获取相册信息

答案 2 :(得分:-1)

作为检索我已提交github存储库的艺术作品的示例: 它是一个客观的c代码,使用上面的代码更改:

return $resource(languageFilePath)...

https://github.com/ENees/iTunesGetImages