Используя воспроизведение носителей

Для игры песен, аудиокниг и аудиоподкастов от библиотеки iPod устройства, Вы используете аудиоплеер — экземпляр MPMusicPlayerController класс. Короче говоря шаги для выполнения следующие:

  1. Регистр, чтобы получить уведомления аудиоплеера и включить уведомления

  2. Создайте аудиоплеер

  3. Установите очередь воспроизведения для аудиоплеера

  4. Сконфигурируйте опции воспроизведения

  5. Вызовите воспроизведение

В этой главе описываются, как реализовать эти шаги. Это также дает представление для обработки некоторых сценариев, с которыми можно встретиться при использовании аудиоплеера, такого как добавление существующей очереди воспроизведения, в то время как играет музыка. Существуют расширенные версии примеров кода из этой главы в примере приложения AddMusic.

Регистрация для уведомлений аудиоплеера

При обеспечении управления воспроизведением аудиоплеера, или если Вы выводите на экран информацию о теперь играющем элементе, необходимо зарегистрироваться для уведомлений аудиоплеера как показано в Перечислении 2-1.

Перечисление 2-1  , Регистрирующееся для и активирующее уведомления аудиоплеера

NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];
 
[notificationCenter
    addObserver: self
    selector:    @selector (handle_NowPlayingItemChanged:)
    name:        MPMusicPlayerControllerNowPlayingItemDidChangeNotification
    object:      musicPlayer];
 
[notificationCenter
    addObserver: self
    selector:    @selector (handle_PlaybackStateChanged:)
    name:        MPMusicPlayerControllerPlaybackStateDidChangeNotification
    object:      musicPlayer];
 
[musicPlayer beginGeneratingPlaybackNotifications];

Вы реализуете методы, предоставленные для селектора: параметры, показанные здесь. Например, реализации, посмотрите выборку AddMusic.

Прежде, чем освободить аудиоплеер, нерегистр для уведомлений и затем выключают их как показано в Перечислении 2-2.

Перечисление 2-2  Нерегистрирующиеся и деактивирующиеся уведомления аудиоплеера

[[NSNotificationCenter defaultCenter]
    removeObserver: self
    name:           MPMusicPlayerControllerNowPlayingItemDidChangeNotification
    object:         musicPlayer];
 
[[NSNotificationCenter defaultCenter]
    removeObserver: self
    name:           MPMusicPlayerControllerPlaybackStateDidChangeNotification
    object:         musicPlayer];
 
[musicPlayer endGeneratingPlaybackNotifications];

Создание и конфигурирование аудиоплеера

Для создания аудиоплеера приложения просто вызовите applicationMusicPlayer метод класса как показано в первой строке Перечисления 2-3.

Перечисление 2-3  , Создающее аудиоплеер приложения

MPMusicPlayerController* appMusicPlayer =
    [MPMusicPlayerController applicationMusicPlayer];
 
[appMusicPlayer setShuffleMode: MPMusicShuffleModeOff];
[appMusicPlayer setRepeatMode: MPMusicRepeatModeNone];

Поскольку перечисление показывает, можно также хотеть сконфигурировать перестановку и повторные режимы так, чтобы они не брали режимы приложения iPod — который они сделали бы по умолчанию.

Различная перестановка и повторные режимы описаны в Ссылке класса MPMusicPlayerController.

Создание аудиоплеера iPod имеет дополнительный шаг, потому что у Вас есть доступ к встроенному состоянию приложения iPod и может быть теперь играющий элемент, поскольку запускается Ваше приложение. Перечисление 2-4 показывает, как протестировать на теперь играющий элемент, когда приложение iPod играет элемент от библиотеки iPod устройства.

Перечисление 2-4  , Создающее аудиоплеер iPod

MPMusicPlayerController* iPodMusicPlayer =
    [MPMusicPlayerController iPodMusicPlayer];
 
if ([iPodMusicPlayer nowPlayingItem]) {
    // Update the UI (artwork, song name, volume indicator, etc.)
    //        to reflect the iPod state
}

Как показано в перечислении, Ваше приложение может обновить свой пользовательский интерфейс и утвердить на основе теперь играющего элемента.

Установка очереди воспроизведения

Существует два основных способа установить очередь воспроизведения для аудиоплеера:

Вы получаете набор при помощи классов доступа к базе данных или путем использования средства выбора элемента носителей. Так или иначе применение набора к аудиоплееру включает вызов отдельного метода, показанный здесь:

[musicPlayer setQueueWithItemCollection: userMediaItemCollection];

Также можно установить очередь, использующую мультимедийный запрос — который, в свою очередь, неявно определяет набор, как показано здесь:

[musicPlayer setQueueWithQuery: [MPMediaQuery songsQuery]];

Можно, конечно, указать более сложный запрос как параметр setQueueWithQuery: метод. Для больше на запросах, посмотрите пользование Библиотекой iPod.

Перечисление 2-5 показывает практическую установку очереди воспроизведения — та, составляющая состояние воспроизведения, должен ли новый набор заменить очередь проигрывателя или добавить к нему и т.д.

Перечисление 2-5  , Создающее очередь воспроизведения в контексте

- (void) updateQueueWithCollection: (MPMediaItemCollection *) collection {
 
    // Add 'collection' to the music player's playback queue, but only if
    //    the user chose at least one song to play.
    if (collection) {
 
        // If there's no playback queue yet...
        if (userMediaItemCollection == nil) {
            [self setUserMediaItemCollection: collection];
            [musicPlayer setQueueWithItemCollection: userMediaItemCollection];
            [musicPlayer play];
 
        // Obtain the music player's state so it can be restored after
        //    updating the playback queue.
        } else {
            BOOL wasPlaying = NO;
            if (musicPlayer.playbackState == MPMusicPlaybackStatePlaying) {
                wasPlaying = YES;
            }
 
            // Save the now-playing item and its current playback time.
            MPMediaItem *nowPlayingItem        = musicPlayer.nowPlayingItem;
            NSTimeInterval currentPlaybackTime = musicPlayer.currentPlaybackTime;
 
            // Combine the previously-existing media item collection with
            //    the new one
            NSMutableArray *combinedMediaItems =
                [[userMediaItemCollection items] mutableCopy];
            NSArray *newMediaItems = [mediaItemCollection items];
            [combinedMediaItems addObjectsFromArray: newMediaItems];
 
            [self setUserMediaItemCollection:
                [MPMediaItemCollection collectionWithItems:
                    (NSArray *) combinedMediaItems]];
 
            [musicPlayer setQueueWithItemCollection: userMediaItemCollection];
 
            // Restore the now-playing item and its current playback time.
            musicPlayer.nowPlayingItem      = nowPlayingItem;
            musicPlayer.currentPlaybackTime = currentPlaybackTime;
 
            if (wasPlaying) {
                [musicPlayer play];
            }
        }
    }
}

Этот метод переходит согласно тому, существует ли существующая ранее очередь воспроизведения и гарантирует, что состояние воспроизведения сохраняется при добавлении очереди воспроизведения.

Управление воспроизведением

Управление воспроизведением для аудиоплееров является прямым, как описано в Ссылке класса MPMusicPlayerController. Можно играть, приостановиться, остановиться, искать вперед и назад и пропустить вперед и назад.

Кроме того, currentPlaybackTime свойство является чтением-записью; можно использовать его для установки точки воспроизведения во временной шкале теперь играющего элемента.

Например, Вы могли позволить пользователю установить точку воспроизведения во временной шкале элемента носителей путем обеспечения a UISlider объект в интерфейсе приложения. В следующем примере такой ползунок, как предполагается, подключен к a timelineSlider переменная экземпляра.

- (IBAction) setTimelinePosition: (id) sender {
    [musicPlayer setCurrentPlaybackTime: [timelineSlider value]];
}