获取本地音乐文件并保存到沙盒

2017-08-22  本文已影响59人  离离乱惑

获取本地音乐

MPMediaQuery *allMusic = [[MPMediaQuery alloc] init];
    MPMediaPropertyPredicate *albumNamePredicate = [MPMediaPropertyPredicate predicateWithValue:[NSNumber numberWithInt:MPMediaTypeMusic ] forProperty: MPMediaItemPropertyMediaType];
    [allMusic addFilterPredicate:albumNamePredicate];
    NSArray *itemsFromGenericQuery = [allMusic items];

获取音乐的信息

for (MPMediaItem *song in itemsFromGenericQuery) {
            SingleMusicModel *model = [SingleMusicModel new];
            model.title = [song valueForProperty: MPMediaItemPropertyTitle];
            model.singer = [song valueForProperty:MPMediaItemPropertyArtist];
            model.songURL = [song valueForProperty:MPMediaItemPropertyAssetURL];
            …………
        }

由于iPhone 自带的音乐软件Music的推出.从iPod取出来的音乐MPMediaItemPropertyAssetURL属性可能为空. 这是因为iPhone自带软件Music对音乐版权的保护,对于所有进行过 DRM Protection(数字版权加密保护)的音乐都不能被第三方APP获取并播放.即使这些音乐已经下载到本地.但是还是可以播放本地未进行过数字版权加密的音乐.也就是您自己手动导入的音乐.

写入沙盒


-(void)configVideo:(NSURL *)url
             title:(NSString *)title
           success:(void (^)(NSData *data))success
           failure:(void (^)())failure {
    AVURLAsset *songAsset = [AVURLAsset URLAssetWithURL:url options:nil];
    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSArray *dirs = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectoryPath = [dirs objectAtIndex:0];
    AVAssetExportSession *exporter = [[AVAssetExportSession alloc]
                                      initWithAsset: songAsset
                                      presetName: AVAssetExportPresetAppleM4A];
    exporter.outputFileType = @"com.apple.m4a-audio";
    // 建立本地音乐文件
    NSString *filePath = [documentsDirectoryPath stringByAppendingPathComponent:@"locationMusic"];
    if (![fileManager fileExistsAtPath:filePath]) {
        // 创建文件夹
        [fileManager createDirectoryAtPath:filePath withIntermediateDirectories:YES attributes:nil error:nil];
    }
    NSString *exportFile = [filePath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.m4a",title]];
    NSError *error1;
    if([fileManager fileExistsAtPath:exportFile]) {
        [fileManager removeItemAtPath:exportFile error:&error1];
    }
    NSURL* exportURL = [NSURL fileURLWithPath:exportFile];
    exporter.outputURL = exportURL;
    [exporter exportAsynchronouslyWithCompletionHandler:^ {
        NSData *data = [NSData dataWithContentsOfFile:exportFile];
        int exportStatus = exporter.status;
        if (exportStatus == AVAssetExportSessionStatusCompleted) {
            NSLog(@"AVAssetExportSessionStatusCompleted");
            if (success) {
                success(data);
            }
        } else {
            NSLog(@"AVAssetExportSessionStatusFail");
            if (failure) {
                failure();
            }
        }
    }];
    
}
上一篇下一篇

猜你喜欢

热点阅读