Программный доступ к музыкальным файлам устройства из приложения iPhone

Я хочу получить доступ к музыкальным файлам, которые доступны на iPhone, и внести их в список (или) получить файл в моем приложении для iPhone с некоторыми делегатами и начать воспроизводить его. Возможно ли это сделать? Подобно тому, как мы получаем доступ к изображениям из фотоальбома устройства, используя методы делегата UIImagePickerController.

Спасибо!


person Getsy    schedule 30.01.2012    source источник


Ответы (3)


Вы можете сослаться на MPMediaPickerController class. Он функционирует так же, как класс UIImagePickerController.

person Amresh Kumar    schedule 30.01.2012
comment
Спасибо! Я проверю это прямо сейчас. Только один вопрос, он работает на всех устройствах iOS 4.x и 5.x, верно? - person Getsy; 30.01.2012
comment
ios10 также требуется ‹key›NSAppleMusicUsageDescription‹/key› в plist для представления MPMediaPickerController для работы. В противном случае он просто мигает белым и исчезает. То же самое в случаях, когда пользователь запретил доступ к Музыке. Отличная работа, Apple! - person Anton Tropashko; 15.06.2017
comment
Законно ли копировать приобретенную iTunes музыку в песочницу приложения и загружать на сервер? - person vishy; 22.06.2017

-(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 — это NSObject класс. Используя вышеуказанную функцию, вы можете получить доступ к музыкальным файлам устройства с iPhone.

person Samrat Pramanik    schedule 11.07.2016

Сначала импортируйте фреймворк AVFoundation/AVFoundation.h.

#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];
}

и поиграй с [player play];

Если вы хотите использовать AVAudioPlayer, импортируйте AudioToolbox/AudioToolbox.h

person Vaibhav Sharma    schedule 25.02.2014
comment
Это не поможет мне в полной мере, можете ли вы объяснить подробно, чтобы я мог реализовать в своем приложении. я хочу добавить музыкальную библиотеку (все песни) из моего приложения и играть. - person Sandy Patel; 06.02.2015
comment
NSURL *url даст вам точный URL-адрес выбранного аудиофайла. и используйте MPMediaPickerControllerDelegate - person Vaibhav Sharma; 23.02.2015