Access the device’s music files from the iPhone application programmatically

I want to access the music files that are available on the iPhone, and get it on the list (or) get the file in my iPhone application of some delegates and start playing it. Can this be done? Similar to how we access images from a device’s photo album using the UIImagePickerController delegation methods.

Thanks!

+4
source share
3 answers

You can reference the MPMediaPickerController class . It functions the same as the UIImagePickerController class.

+4
source
 -(void)loadDeviceMusic{ MPMediaQuery *everything = [[MPMediaQuery alloc] init]; [everything addFilterPredicate:[MPMediaPropertyPredicate predicateWithValue:[NSNumber numberWithBool:NO] forProperty:MPMediaItemPropertyIsCloudItem]]; NSArray *itemsFromGenericQuery = [everything items]; for (MPMediaItem *song in itemsFromGenericQuery) { NSURL *assetURL = [song valueForProperty:MPMediaItemPropertyAssetURL]; AVAsset *asset = [AVAsset assetWithURL:assetURL]; NSLog(@"SONGS URL=%@",assetURL); if ([asset hasProtectedContent] == NO) { MP3ObjectsClass *objMp3=[[MP3ObjectsClass alloc] init]; objMp3.mp3Url=[song valueForProperty:MPMediaItemPropertyAssetURL]; objMp3.mp3Duration=[song valueForProperty: MPMediaItemPropertyPlaybackDuration]; if([song valueForProperty: MPMediaItemPropertyTitle]){ objMp3.mp3Name=[song valueForProperty: MPMediaItemPropertyTitle]; }else{ objMp3.mp3Name=@ "Unknown"; } if([song valueForProperty: MPMediaItemPropertyArtist]){ objMp3.mp3ArtistName=[song valueForProperty: MPMediaItemPropertyArtist]; }else{ objMp3.mp3ArtistName=@ "Unknown"; } if([song valueForProperty: MPMediaItemPropertyAlbumTitle]){ objMp3.mp3AlbumTitle=[song valueForProperty: MPMediaItemPropertyAlbumTitle]; }else{ objMp3.mp3AlbumTitle=@ "Unknown"; } UIImage *mp3Image=[self getAlbumnArtWorkImage:assetURL]; if(mp3Image){ objMp3.mp3Image=mp3Image; }else{ objMp3.mp3Image=[UIImage imageNamed:@"DefaultImage"]; } [mp3Array addObject:objMp3]; } } } -(UIImage *)getAlbumnArtWorkImage :(NSURL *)mp3Url{ AVAsset *asset = [AVURLAsset URLAssetWithURL:mp3Url options:nil]; UIImage *img = nil; for (NSString *format in [asset availableMetadataFormats]) { for (AVMetadataItem *item in [asset metadataForFormat:format]) { if ([[item commonKey] isEqualToString:@"artwork"]) { img = [UIImage imageWithData:[item.value copyWithZone:nil]]; } } } return img; } 

*** MP3ObjectsClass is an NSObject class. Using the above function, you can access the music files of the device from iPhone.

+5
source

First import the AVFoundation / AVFoundation.h environment.

 #import <AVFoundation/AVFoundation.h> -(void)pickAudioFiles { MPMediaPickerController *soundPicker=[[MPMediaPickerController alloc] initWithMediaTypes:MPMediaTypeAnyAudio]; soundPicker.delegate=self; soundPicker.allowsPickingMultipleItems=NO; [self presentViewController:soundPicker animated:YES completion:nil]; } -(void)mediaPicker:(MPMediaPickerController *)mediaPicker didPickMediaItems:(MPMediaItemCollection *)mediaItemCollection { MPMediaItem *item = [[mediaItemCollection items] objectAtIndex:0]; NSURL *url = [item valueForProperty:MPMediaItemPropertyAssetURL]; [mediaPicker dismissViewControllerAnimated:YES completion:nil]; AVPlayerItem *playerItem=[AVPlayerItem playerItemWithURL:url]; AVPlayer *player=[[AVPlayer alloc] initWithPlayerItem:playerItem]; AVPlayerLayer *playerLayer=[AVPlayerLayer playerLayerWithPlayer:player]; playerLayer.frame=CGRectMake(0, 0, 10, 10); [self.view.layer addSublayer:playerLayer]; } 

and play with [player play];

If you want to use AVAudioPlayer then import AudioToolbox/AudioToolbox.h

+1
source

Source: https://habr.com/ru/post/1393713/


All Articles