3

AVPlayerを使って曲を再生しています。バックグラウンド再生もできるようになりました。UIButtonと呼ばれるものがありshowPlaylistます。それをタップすると、選択した曲のリストを表示する必要があり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;
  }
}
4

2 に答える 2

3

あなたが説明したすべてを行う方法を明確に示したAppleのサンプルコード「Add Music」を調べます。

このサンプル アプリケーションではUITableView、iPod ライブラリから選択した曲の変更可能なコピーの内容を に取り込み、 に保存する方法について詳しく説明しますMPMediaItemCollection。また、セルのタイトル ラベルなどとしてトラック固有の属性を使用MPMediaItemsして表示する方法も示します。MPMediaItemCollections

  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. 再生ボタンにリンクされているボタンの名前を「Select Music」に変更し、アクションを次のように設定して「Play」という名前の新しいボタンを作成します。

    - (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 ファイルに以下を追加します

ここに画像の説明を入力

于 2012-07-19T16:48:49.503 に答える
1

あなたの問題は、再生ボタンが音楽プレーヤーに再生を指示する以外のことをしていることです。[myPlayer play];を呼び出すだけのものが必要です。再生ボタン以外の場所ですべての設定を行います。

再生ボタンにも曲を選択させるのは、あまり良いコーディング方法ではありません (1 つのボタン -> 1 つの機能という考え方を維持することをお勧めします)。したがって、再生ボタンにあることを今すぐ実行するボタンを用意してから、再生ボタンを呼び出します[myPlayer play]

他の質問については、これを確認する必要があります: AVAudioPlayer を使用して複数のオーディオ ファイルを再生する

念のために言っておきますが、同じ投稿で複数の質問をするべきではありません。簡潔で有用な回答を提供することが難しくなり、サイトでの検索が難しくなる可能性があります。

曲の情報を表示する方法を尋ねているかどうかはわかりませんが、タイトルにあると思います。この場合、iPhone SDK - アプリを介して現在の曲情報にアクセスします。

于 2012-07-19T16:22:14.733 に答える