如何显示所选歌曲从ipodLibrary从avplayer中扮演的UITableView(how t

2019-09-19 19:25发布

我用AVPlayer播放歌曲。 我可以在后台播放它。 有一个UIButtonshowPlaylist 。 当我在敲打我需要显示的我从所选歌曲列表ipodLibraryUITableView ,我应该能够显示艺术品,剩余的歌曲和歌手的名字分钟数,如果它是在歌曲可用。

我有播放和暂停按钮:当我点击暂停按钮,歌曲暂停,但是当我再次上的播放按钮点击,这是不言而喻的ipodLibrary。 如何恢复播放,当我上的播放按钮点击?

当有多个歌曲在UITableView ,我希望它尽快的第一首曲目结束继续到下一首曲目。 我不知道该怎么做。

-(IBAction)playButtonPressed:(UIButton *)sender {
  // Create picker view
  MPMediaPickerController* picker = [[MPMediaPickerController alloc] init];
  picker.delegate = self;
  if (userMediaItemCollection) {
    MusicTableViewController *controller = [[MusicTableViewController alloc]
     initWithNibName: @"MusicTableView" bundle: nil];
    controller.delegate = self;
    controller.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
    [self presentModalViewController: controller animated: YES];
  } else {
    MPMediaPickerController *picker = [[MPMediaPickerController alloc]
      initWithMediaTypes: MPMediaTypeMusic];
    picker.delegate  = self;
    picker.allowsPickingMultipleItems = YES;
    picker.prompt = NSLocalizedString
      (@"Add songs to play", "Prompt in media item picker");
    [[UIApplication sharedApplication] setStatusBarStyle:
      UIStatusBarStyleDefault animated: YES];
    [self presentModalViewController: picker animated: YES];
  }
}

-(IBAction)pauseButtonPressed:(UIButton *)sender {
  [myPlayer pause];
}

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

-(void) mediaPicker:(MPMediaPickerController *)mediaPicker didPickMediaItems:
  (MPMediaItemCollection *)mediaItemCollection {
  [self dismissViewControllerAnimated:YES completion:nil];
  NSURL* assetUrl = [mediaItemCollection.representativeItem
    valueForProperty:MPMediaItemPropertyAssetURL];
  AVURLAsset* asset = [AVURLAsset URLAssetWithURL:assetUrl options:nil];
  AVPlayerItem* playerItem = [AVPlayerItem playerItemWithAsset:asset];
  myPlayer = [AVPlayer playerWithPlayerItem:playerItem];
  [myPlayer play];
}

- (void)viewDidAppear:(BOOL)animated {
  [super viewDidAppear:animated];
  [[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
  [self becomeFirstResponder];
}

- (BOOL)canBecomeFirstResponder {
  return YES;
}

- (void)viewWillDisappear:(BOOL)animated {
  [super viewWillDisappear:animated];
  [[UIApplication sharedApplication] endReceivingRemoteControlEvents];
  [self resignFirstResponder];
}

-(void)remoteControlReceivedWithEvent:(UIEvent *)event {
  switch (event.subtype) {
    case UIEventSubtypeRemoteControlTogglePlayPause:
      if (myPlayer.rate == 0.0) {
        [myPlayer play];
      } else {
        [myPlayer pause];
      }
      break;
    case UIEventSubtypeRemoteControlPlay:
      [myPlayer play];
      break;
    case UIEventSubtypeRemoteControlPause:
      [myPlayer pause];
      break;
    default:
      break;
  }
}

Answer 1:

我会去了解一下苹果的示例代码“添加音乐”这清楚地表明该怎么做你所描述的一切。

这个示例应用程序运行时,您通过插件和填充一个出局UITableView与从保存到了iPod库中选择歌曲的可变副本内容MPMediaItemCollection 。 它还说明了如何使用MPMediaItemsMPMediaItemCollections可以显示跟踪特定属性的细胞标题标签等

  1. 用于填充表视图,您可以将其设置是这样的:

    MPMediaItem *mediaItem = (MPMediaItem *)[collectionMutableCopy objectAtIndex:row];

    MPMediaItemArtwork *artwork = [mediaItem valueForProperty:MPMediaItemPropertyArtwork];

     if (mediaItem) { cell.textLabel.text = [mediaItem valueForProperty:MPMediaItemPropertyTitle]; cell.detailTextLabel.text = [mediaItem valueForProperty:MPMediaItemPropertyArtist]; if (artwork != nil) { cell.imageView.image = [artwork imageWithSize:CGSizeMake (40, 40)]; }else{ cell.imageView.image = [UIImage imageNamed:@"no_artwork.png"]; } } 
  2. 重命名连接到播放按钮“选择音乐”按钮,创建一个名为“播放”按钮,新其行动设置为:

    - (IBAction)playMusic { [myPlayer play]; }

编辑:从创建内容阵列MPMediaItemCollection

NSMutableArray *collectionMutableCopy = [[NSMutableArray alloc] initWithArray:myMediaItemCollection.items];

编辑2:取消该项目下面几行:

- (void) registerForMediaPlayerNotifications

/*
 // This sample doesn't use libray change notifications; this code is here to show how
 //     it's done if you need it.
 [[NSNotificationCenter defaultCenter] removeObserver: self
 name: MPMediaLibraryDidChangeNotification
 object: musicPlayer];

 [[MPMediaLibrary defaultMediaLibrary] endGeneratingLibraryChangeNotifications];

 */

- (void)dealloc

/*
 // This sample doesn't use libray change notifications; this code is here to show how
 //     it's done if you need it.
 [notificationCenter addObserver: self
 selector: @selector (handle_iPodLibraryChanged:)
 name: MPMediaLibraryDidChangeNotification
 object: musicPlayer];

 [[MPMediaLibrary defaultMediaLibrary] beginGeneratingLibraryChangeNotifications];
 */

替换此行:

[[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryAmbient error: nil];

有了这个

 [[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayback error: nil];

 UInt32 doSetProperty = 0;
 AudioSessionSetProperty (
 kAudioSessionProperty_OverrideCategoryMixWithOthers,
 sizeof (doSetProperty),
 &doSetProperty
 );

那么下面添加到您的项目Info.plist文件



Answer 2:

你的问题是,您的播放按钮是做比告诉音乐播放器播放其他的东西。 你需要一个只是调用[myPlayer play] ; 做你设置的地方比播放按钮等。

这不是真的很好的编码习惯让你的播放按钮也挑歌(最好是保持一个按钮的想法 - >一个功能)。 所以,有一个按钮,不会在你的播放按钮,现在是什么,然后让播放按钮,只需要调用[myPlayer play]

至于你的其他问题,你应该看看这个: 播放使用AVAudioPlayer多个音频文件

只要你知道,你不是真的要问多个问题在同一职位。 这使得它很难给出一个简洁的,有用的答案,可以使网站很难找到的东西。

我不知道,如果你问如何显示歌曲信息,但我想这是在您的标题。 对于这一个, iPhone的SDK -通过一个应用程序访问当前歌曲的信息 。



文章来源: how to display selected songs from ipodLibrary played from avplayer in uitableview