4

我想访问 iPhone 上可用的音乐文件并将其列出(或)将文件放入我的 iPhone 应用程序中并开始播放。有可能吗?类似于我们使用 UIImagePickerController 委托方法访问设备相册中的图像。

谢谢!

4

3 回答 3

4

你可以参考MPMediaPickerController class。它的功能与UIImagePickerController类相同。

于 2012-01-30T09:29:44.937 回答
4
-(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 访问设备音乐文件。

于 2016-07-11T12:18:23.117 回答
1

首先导入 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

于 2014-02-25T13:40:40.300 回答