获取随机MPMediaItem的最快方法是什么

时间:2010-12-12 08:24:27

标签: iphone random ipod

伙计们:)你能否分享一些如何从用户的iPod库中获取一个或多个随机MPMediaItems的想法。对[MPMediaQuery songsQuery] .items的任何调用都太慢了 - 对于只有800首歌曲的库,我需要在iPod Touch 2G上执行查询大约需要19秒。我不想缓存整个iPod库,因为我不认为这是值得的。任何想法将不胜感激。谢谢:))

2 个答案:

答案 0 :(得分:1)

您可以使用[MPMediaQuery albumsQuery]获取随机相册,然后尝试从该相册中随机播放一首歌。

答案 1 :(得分:0)

我写了这个方法来从我的iPad Jukebox应用程序的音乐集中检索一个名为My Jukebox的随机曲目,希望你也可以使用它。它很快,即使在大型音乐集合上,如果你保留MediaQuery对象(将它存储为类的属性),那么第二次调用几乎是即时的。我希望它有所帮助。

-(MPMediaItem*) getRandomTrack
{
    // Check if we can re-use an MPMediaQuery
    if (self.mediaQuery == nil)
    {
        MPMediaQuery *everything = [[MPMediaQuery alloc] init];
        [self setMediaQuery:everything];
        [everything release];
    }
    // Get all Media Items into an Array (Fast)
    NSArray *allTracks = [mediaQuery items];
    // Check we have enough Tracks for a Random Choice
    if ([allTracks count] < 20)
    {
        return nil;
    }
    // Pick Random Track
    int trackNumber = arc4random() % [allTracks count];
    MPMediaItem *item = [allTracks objectAtIndex:trackNumber];
    // Display and Return
    return item;
}