关于音频文件的操作

1.0 MPMediaQueue
    MPMediaQuery *allMediaQueue = [[[MPMediaQuery alloc]init] autorelease];
    [self.mediaItemArray addObjectsFromArray:[allMediaQueue items]];
    NSLog(@"allMediaArray:%@",mediaItemArray);

以上为获取系统音频文件列表方式;


2.0 MPMediaPickerController  的使用及其转存写入沙盒

 MPMediaPickerController *mpc = [[MPMediaPickerControlleralloc]initWithMediaTypes:MPMediaTypeMusic];     
mpc.delegate = self;//委托     
mpc.prompt =@"Please select a music";//提示文字     
mpc.allowsPickingMultipleItems=NO;//是否允许一次选择多个 



- (void)mediaPicker:(MPMediaPickerController *)mediaPicker didPickMediaItems:(MPMediaItemCollection *)mediaItemCollection
{
    NSArray *media_array = [mediaItemCollection items];
    MPMediaItem *song_item = [media_array objectAtIndex:0];
   
    SongObject *song_object = [[SongObject alloc] init];
    [song_object setSong_name:[song_item valueForProperty: MPMediaItemPropertyTitle]];
    [song_object setSinger_name:[song_item valueForKey:MPMediaItemPropertyPodcastTitle]];
    NSURL *url = [song_item valueForProperty:MPMediaItemPropertyAssetURL];
    NSLog(@"url is %@",url);

    AVURLAsset *songAsset = [AVURLAsset URLAssetWithURL:url options:nil];
    AVAssetExportSession *exporter = [[AVAssetExportSession alloc] initWithAsset: songAsset presetName: AVAssetExportPresetAppleM4A];
   
    exporter.outputFileType = @"com.apple.m4a-audio";
    NSString *exportFile = [path stringByAppendingPathComponent: @"exported.m4a"];
    if ([[NSFileManager defaultManager] fileExistsAtPath:exportFile])
    {
        NSError *deleteErr = nil;
        [[NSFileManager defaultManager] removeItemAtPath:exportFile error:&deleteErr];
        if (deleteErr)
        {
            NSLog (@"Can't delete %@: %@", exportFile, deleteErr);
        }
    }
   
    //[songAsset loadValuesAsynchronouslyForKeys:<#(NSArray *)#> completionHandler:<#^(void)handler#>]
    NSURL *path_url = [NSURL fileURLWithPath:exportFile];
    exporter.outputURL = path_url;
    [exporter exportAsynchronouslyWithCompletionHandler:^{
        int exportStatus = exporter.status;
        switch (exportStatus)
        {
            case AVAssetExportSessionStatusFailed:
            {
                // log error to text view
                NSError *exportError = exporter.error;
                NSLog (@"AVAssetExportSessionStatusFailed: %@", exportError);
                break;
            }
            case AVAssetExportSessionStatusCompleted:
            {
                NSLog (@"AVAssetExportSessionStatusCompleted");
                // set up AVPlayer
                NSData *data = [NSData dataWithContentsOfURL:path_url];
                NSLog(@"data is %@",data);
                break;
            }
            case AVAssetExportSessionStatusUnknown:
            {
                NSLog (@"AVAssetExportSessionStatusUnknown");
                break;
            }
            case AVAssetExportSessionStatusExporting:
            {
                NSLog (@"AVAssetExportSessionStatusExporting");
                break;
            }
            case AVAssetExportSessionStatusCancelled:
            {
                NSLog (@"AVAssetExportSessionStatusCancelled");
                break;
            }
            case AVAssetExportSessionStatusWaiting:
            {
                NSLog (@"AVAssetExportSessionStatusWaiting");
                break;
            }
            default:
            {
                NSLog (@"didn't get export status");
                break;
            }
        }
    }];
    [song_object release];
    [mediaPicker dismissModalViewControllerAnimated:YES];
}


posted @ 2013-04-22 16:17  沙影无痕  阅读(166)  评论(0编辑  收藏  举报