首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MPMediaPickerController选择歌曲不播放

MPMediaPickerController选择歌曲不播放
EN

Stack Overflow用户
提问于 2012-03-22 13:52:49
回答 2查看 3.9K关注 0票数 0
代码语言:javascript
复制
- (void) showMediaPicker
{ 
  MPMediaPickerController *picker =
  [[MPMediaPickerController alloc] initWithMediaTypes: MPMediaTypeAnyAudio];

  [[picker view] setFrame:CGRectMake(0, 0, 320, 480)];

  picker.delegate      = self;
  picker.allowsPickingMultipleItems = YES;
  picker.prompt      = NSLocalizedString (@"AddSongsPrompt", @"Prompt to user to choose some songs to play");

 [self presentModalViewController:picker animated: YES];
 [picker release];
}
- (void) mediaPicker: (MPMediaPickerController *) mediaPicker
didPickMediaItems: (MPMediaItemCollection *) collection 
{   
   [self dismissModalViewControllerAnimated: YES];
   [self playSelectedMediaCollection: collection];
}
- (void) playSelectedMediaCollection: (MPMediaItemCollection *) collection {

    if (collection.count == 1) {
    NSArray *items = collection.items;
    MPMediaItem *mediaItem =  [items objectAtIndex:0];
    if ([mediaItem isKindOfClass:[MPMediaItem class]]) {
        NSURL *url = [mediaItem valueForProperty:MPMediaItemPropertyAssetURL];
        AVPlayerItem *playerItem = [[AVPlayerItem alloc] initWithURL:url];
        AVMutableAudioMix *fadeMix = [AVMutableAudioMix audioMix];
        AVMutableAudioMixInputParameters *params = [AVMutableAudioMixInputParameters audioMixInputParameters];
        [params setVolumeRampFromStartVolume:0 toEndVolume:1 timeRange:
         CMTimeRangeMake(CMTimeMakeWithSeconds(0, 1), CMTimeMakeWithSeconds(5,1))];
        [fadeMix setInputParameters:[NSArray arrayWithObject:params]];
        [playerItem setAudioMix:fadeMix];
        AVPlayer *newAvPlayer = [[AVPlayer alloc] initWithPlayerItem:playerItem];
        [newAvPlayer play];
     }
   }
}

此代码构建时错误是体系结构i386:"_CMTimeMakeWithSeconds“的未定义符号,引用自:-SongFileViewVC playSelectedMediaCollection: in SongFileViewVC.o "_CMTimeRangeMake",引用自:-SongFileViewVC playSelectedMediaCollection: in SongFileViewVC.o ld: symbol not found for architecture i386 clang: error: linker命令失败,退出代码为1(使用-v查看调用)

我是怎么解决它的。

EN

回答 2

Stack Overflow用户

发布于 2012-03-22 16:57:28

尝试将CoreMedia框架添加到项目中,或者确保在必要时正确添加和导入该框架。

票数 4
EN

Stack Overflow用户

发布于 2012-03-22 17:16:08

我用了一种简单的方法,

添加MediaPlayer.framework

your .h

代码语言:javascript
复制
#import <MediaPlayer/MPMusicPlayerController.h>
#import <MediaPlayer/MPMediaPickerController.h>

@interface libraryAccessViewController : UIViewController <MPMediaPickerControllerDelegate>
{
    MPMusicPlayerController *player;
    MPMediaPickerController *picker;
}

- (IBAction)pickMedia:(id)sender;
- (IBAction)playMedia:(id)sender;
- (IBAction)stopMedia:(id)sender;

your .m

代码语言:javascript
复制
- (void)viewDidLoad
{
    [super viewDidLoad];

    player=[MPMusicPlayerController iPodMusicPlayer];

    picker=[[MPMediaPickerController alloc] initWithMediaTypes:MPMediaTypeAnyAudio];

    [picker setDelegate:self];

    picker.prompt=@"Add an audio to your MyVision";
}

- (void)mediaPicker:(MPMediaPickerController *)mediaPicker didPickMediaItems:(MPMediaItemCollection *)mediaItemCollection
{    
   [player setQueueWithItemCollection:mediaItemCollection];

   [self dismissModalViewControllerAnimated:YES];
}

- (void)mediaPickerDidCancel:(MPMediaPickerController *)mediaPicker
{
   [self dismissModalViewControllerAnimated:YES];
}

//bind below actions with three UIButtons
- (IBAction)pickMedia:(id)sender
{
   [self presentModalViewController:picker animated:YES];
}

- (IBAction)playMedia:(id)sender
{
   [player play];
}

- (IBAction)stopMedia:(id)sender
{
   [player stop];
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9817137

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档