Используя воспроизведение носителей
Для игры песен, аудиокниг и аудиоподкастов от библиотеки iPod устройства, Вы используете аудиоплеер — экземпляр MPMusicPlayerController
класс. Короче говоря шаги для выполнения следующие:
Регистр, чтобы получить уведомления аудиоплеера и включить уведомления
Создайте аудиоплеер
Установите очередь воспроизведения для аудиоплеера
Сконфигурируйте опции воспроизведения
Вызовите воспроизведение
В этой главе описываются, как реализовать эти шаги. Это также дает представление для обработки некоторых сценариев, с которыми можно встретиться при использовании аудиоплеера, такого как добавление существующей очереди воспроизведения, в то время как играет музыка. Существуют расширенные версии примеров кода из этой главы в примере приложения 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]]; |
} |