1

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

4

2 回答 2

1

您可以使用[MPMediaQuery albumsQuery]随机获取一张专辑,然后尝试从该专辑中获取一首随机歌曲。

于 2010-12-12T08:39:24.463 回答
0

我编写了这个方法来从名为My Jukebox的 iPad 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;
}
于 2011-01-22T22:33:27.700 回答