LoginSignup
18
17

More than 5 years have passed since last update.

AVAudioPlayerで次の曲を再生する方法

Posted at

背景

AVAudioPlayerDelegateのaudioPlayerDidFinishPlayingメソッドでは、音楽の再生が終わったことを検知することができるが、次の曲を再生する方法がわからなかった。

解決方法

以下のようにすることで実現できた。
1.現在再生中のインデックスを保持する。
2.MPMediaItemCollectionから次の曲を取り出して設定する。
3.最後の曲を再生した場合は曲を停止する。

Player.h
@interface Player : UIViewController <AVAudioPlayerDelegate>
@property (nonatomic) AVAudioPlayer *player;
@property (nonatomic) MPMediaItemCollection *mediaItems;
@property (nonatomic) NSInteger currentItem;
@end
Player.m
- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag {
    [self play];
}

- (void)play {
    // 曲情報はmediaItemsに追加済み
    if (self.currentItem >= self.mediaItems.count) {
        // 停止する
        [self.player stop];
        self.player = nil;
        return;
    }

    // 次に再生したい曲情報をMPMediaItemに設定する
    MPMediaItem *item = [[self.mediaItems items] objectAtIndex:self.currentItem];
    NSURL *url = [item valueForProperty:MPMediaItemPropertyAssetURL];
    self.player = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil];
    self.player.delegate = self;
    [self.player play];

    self.currentItem++;
}

18
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
17