2010-11-10 64 views
2

嗨Stack Overflowers,我希望你能幫助我。如何從特定年份獲取iPhone音樂庫中的所有歌曲?

我試圖從某一年獲得所有歌曲的集合在用戶iPhone中的音樂庫2002年即

我則期待通過MPMusicPlayerController播放的歌曲。

看來,你不能設置一個MPMediaPropertyPredicate來過濾發佈日期,我認爲這規定了。我真正不想做的事情是必須獲得所有發佈日期的完整數組,然後迭代所有NSDates,因爲我可能錯誤地認爲這對於大型圖書館來說可能會很慢。

實現此任務的最佳方式是什麼?

在此先感謝。

回答

5

這裏是你在找什麼。

allMedia = [MPMediaQuery songsQuery]; 
//MPMediaPropertyPredicate *mpp1 = [MPMediaPropertyPredicate predicateWithValue:@"2" forProperty:MPMediaItemPropertyRating comparisonType:MPMediaPredicateComparisonEqualTo]; 
//MPMediaPropertyPredicate *mpp2 = [MPMediaPropertyPredicate predicateWithValue:@"Pop" forProperty:MPMediaItemPropertyGenre comparisonType:MPMediaPredicateComparisonContains]; 
//[allMedia addFilterPredicate:mpp1]; 
//[allMedia addFilterPredicate:mpp2]; 

//[myPlayer setQueueWithQuery:allMedia]; 


NSArray *itemsFromGenericQuery = [allMedia items]; 

NSMutableArray *mArray = [[NSMutableArray alloc] init]; 
int i = 0; 
int j=0; 

NSLog(@"itemCount: %d",[itemsFromGenericQuery count]); 

float playsQuery = sliderPlays.value; 
if(playsQuery == 20){playsQuery = 10000;} 

NSLog(@"sliderRating.value %f sliderPlays.value %.1f", [sliderRating value], playsQuery); 

while(i++ < 1000){ 
    int trackNumber = arc4random() % [itemsFromGenericQuery count]; 
    MPMediaItem *song = [itemsFromGenericQuery objectAtIndex:trackNumber]; 

    NSString *artistName = [song valueForProperty: MPMediaItemPropertyArtist]; 
    NSString *title = [song valueForProperty: MPMediaItemPropertyTitle]; 
    NSString *rating = [song valueForKey:MPMediaItemPropertyRating]; 
    double length = [[song valueForProperty:MPMediaItemPropertyPlaybackDuration] doubleValue]; 
    NSNumber *year = [song valueForProperty:MPMediaItemPropertyYear]; 



    if ([year intValue] >= [def intValue] <= { 
     if(j++ > 50){break;} 
     NSLog (@"tracknumber: %d j: %d artistName: %@ title: %@ length: %@ year: %@ playcount: %d",trackNumber, j, artistName, title, length, rating, [playCount intValue]);    
     [mArray addObject:song];    
    } 

    if(i++ > 1000)break; 
} 


MPMediaItemCollection *itemCol = [[MPMediaItemCollection alloc] initWithItems:mArray]; 


[myPlayer setQueueWithItemCollection:itemCol]; 


[myPlayer setShuffleMode: MPMusicShuffleModeSongs]; 
[myPlayer setRepeatMode: MPMusicRepeatModeNone]; 
+1

是MPMediaItemPropertyYear甚至是一個有效的屬性?當我嘗試編譯時它不存在。 – roocell 2011-10-09 14:41:01

+0

[allMedia items]總是返回零 – 2015-10-27 09:09:26

相關問題