Как воспроизвести песню из библиотеки iTunes на iPhone
Вопрос
Привет, мне нужно воспроизвести песню из библиотеки iTunes.Я просмотрел Руководство по доступу к библиотеке Apple iPod для iPod и получил код.
MPMediaQuery *everything = [[MPMediaQuery alloc] init];
NSLog(@"Logging items from a generic query...");
NSArray *itemsFromGenericQuery = [everything items];
MPMediaItem *song;
for (song in itemsFromGenericQuery)
{
NSString *songTitle = [song valueForProperty: MPMediaItemPropertyTitle];
NSLog (@"%@", songTitle);
}
//assign a playback queue containing all media items on the device
[myPlayer setQueueWithQuery:everything];//setQueueWithQuery:everything];
//start playing from the begining
[myPlayer play];
Но это начнет воспроизводиться с самого начала списка библиотек.Мне нужно воспроизвести песню, когда я выбираю ее из списка.Кто-нибудь может мне помочь, пожалуйста...
Спасибо, Шибин.
Решение
Используя MPMediaPickerController
например, вы можете выбрать из списка композиций библиотеки iPod, списка альбомов и т.д..Вот пример, который выбирает все песни с iPod и отображает в контроллере модального просмотра.
- (IBAction) selectSong: (id) sender
{
MPMediaPickerController *picker =
[[MPMediaPickerController alloc] initWithMediaTypes: MPMediaTypeMusic];
picker.delegate = self;
picker.allowsPickingMultipleItems = NO;
picker.prompt = NSLocalizedString (@"Select any song from the list", @"Prompt to user to choose some songs to play");
[self presentModalViewController: picker animated: YES];
[picker release];
}
Теперь вам нужно реализовать делегат для сохранения песни в вашей локальной переменной.Здесь, selectedSongCollection
является примером MPMediaItemCollection
.
- (void) mediaPicker: (MPMediaPickerController *) mediaPicker didPickMediaItems: (MPMediaItemCollection *) mediaItemCollection
{
[self dismissModalViewControllerAnimated: YES];
selectedSongCollection=mediaItemCollection;
}
После того, как вы закончите с выбором песни, реализуйте делегирование, чтобы отклонить средство выбора:
- (void) mediaPickerDidCancel: (MPMediaPickerController *) mediaPicker
{
[self dismissModalViewControllerAnimated: YES];
}
Другие советы
Вы назначаете музыкальному проигрывателю список воспроизведения всех песен, поэтому, конечно же, он будет воспроизводить весь список, начиная с самого начала.Если вы хотите, чтобы пользователь выбрал определенную песню из библиотеки iPod, используйте MPMediaPickerController
.
Я не мог использоватьMPMediaPickerController
по моему сценарию.
Мой краткий ответ на вопрос заключается в том, чтобы взглянуть на [musicplayer setNowPlayingItem:item]
вот некоторый код ниже из моей реализации.
// Create a new query
MPMediaQuery *query = [MPMediaQuery songsQuery];
MPMediaPropertyPredicate *mpp = [MPMediaPropertyPredicate predicateWithValue:@"a" forProperty:MPMediaItemPropertyTitle comparisonType:MPMediaPredicateComparisonContains];
[query addFilterPredicate:mpp];
// Retrieve the results and reload the table data
DATAENV.songCollections = [NSMutableArray arrayWithArray:query.collections];
//populate cell rows with
- (UITableViewCell *)tableView:(UITableView *)tView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
MPMediaItem *item = [[[DATAENV.songCollections objectAtIndex:indexPath.row] items] lastObject];
titleLbl = [item valueForProperty:MPMediaItemPropertyTitle];
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
MPMediaItem *item = [[[self.songCollections objectAtIndex:indexPath.row] items] lastObject];
[PLAYER setNowPlayingItem:item];
[PLAYER play];
}
Где PLAYER / DATAENV - это мои синглтоны
#define PLAYER [[AudioController sharedAudioController_instance] musicPlayer]
#define DATAENV [DataEnvironment sharedDataEnvironment_instance]