iOS 開發 初級:Audio音頻之播放iPod Library音樂

來源:互聯網
上載者:User

1、概要

在很多音樂播放器應用中,都可以播放系統內建音樂播放器內的音樂。這播放器以前叫iPod,音樂檔案儲存體在iPod Library中。

本文介紹如何通過iOS系統內建的音樂播放器來播放iPod Library內的音樂。

2、iOS開發文檔:iPod Library Access Programming Guide

3、需要的Framework:Media Player Framework

4、Framework準系統概述:

1)通過Media Query擷取iPod Library的播放隊列;

2)通過Media Picker Controller 選取播放隊列;

3)使用Music Player Controller 來播放音樂。

5、技術實現Step by Step


Step 1:建立一個MPMusicPlayerController的播放器,並選擇播放器的類型:applicationMusicPlayer 或iPodMusicPlayer。兩者的差別是使用iPodMusicPlayer那麼應用最小化後音樂還可以繼續播放,約等於直接使用系統內建的播放器來播放。

// Create a music player

    self.musicPlayer = [MPMusicPlayerControlleriPodMusicPlayer];

    

    self.musicPlayer.shuffleMode
= MPMusicShuffleModeOff;

    self.musicPlayer.repeatMode
= MPMusicRepeatModeNone;

    

    NSNotificationCenter *notificationCenter = [NSNotificationCenterdefaultCenter];

    

[notificationCenter 

addObserver:self 

selector:@selector(handleVolumeChanged:)

name:MPMusicPlayerControllerVolumeDidChangeNotification

object:self.musicPlayer];

    

    [notificationCenter

addObserver:self

selector:@selector(handlePlaybackStateChanged:)

name:MPMusicPlayerControllerPlaybackStateDidChangeNotification

object:self.musicPlayer];

    [notificationCenter

addObserver:self

selector:@selector(handleNowPlayingItemChanged:)

name:MPMusicPlayerControllerNowPlayingItemDidChangeNotification

object:self.musicPlayer];

    

    //
添加下面的code才能實現對musicplayer的notification

    [self.musicPlayerbeginGeneratingPlaybackNotifications];

上面的Code包含了對musicPlayer的一些基本設定,並添加對notification的接收。


Step 2:建立播放隊列即MediaQuery並賦給musicPlayer。


擷取播放隊列有兩種方法:

1、直接擷取iPod Library中的播放隊列,然後可以選擇性的選取音樂。

 //建立media query

    MPMediaQuery *mediaQuery = [MPMediaQueryalbumsQuery];

    

 //
添加Filter來選擇某個特定的隊列

    MPMediaPropertyPredicate *artistNamePredicate = [MPMediaPropertyPredicatepredicateWithValue:@"五月天"forProperty:MPMediaItemPropertyArtist];

    [mediaQueryaddFilterPredicate:artistNamePredicate];

// 添加隊列

   self.mediaQueue = [mediaQueryitems];

    self.userMediaItemCollection = [MPMediaItemCollectioncollectionWithItems:self.mediaQueue];

    [self.musicPlayersetQueueWithItemCollection:self.userMediaItemCollection];

// 或者

    //[self.musicPlayer setQueueWithQuery:mediaQuery];


2、使用MPMediaPickerController,要添加

MPMediaPickerControllerDelegate


MPMediaPickerController *mediaPickerController = [[MPMediaPickerControlleralloc]initWithMediaTypes:MPMediaTypeMusic];

mediaPickerController.delegate =self;

mediaPickerController.allowsPickingMultipleItems =YES;

mediaPickerController.prompt =@"Add songs to play";


通過

- (void)mediaPicker:(MPMediaPickerController *)mediaPicker didPickMediaItems:(MPMediaItemCollection
*)mediaItemCollection

擷取mediaItemCollection然後在Method中加入musicPlayer播放隊列。


## 說明一下mediaItemCollection,mediaQuery和mediaItem的關係:


mediaItemCollection與mediaQuery類同,但mediaItemCollection可以包含各種group,比如按照album唱片來分類,而mediaQuery則沒有分類。mediaItem都是兩者的item。

mediaItemCollection 和 mediaQuery可以互相轉換

比如:[self.mediaQuery setGroupType:MPMediaGroupingAlbum];

NSArray *albums = [self.mediaQuery collections];

這時albums裡面就是MPMediaItemCollection的對象。


Step 3:設定及操作musicPlayer


基本的method和property就是play,pause,stop,skipToNextItem,volume,currentPlaybackTime,repeat,shuffle。這些都很簡單。重點在於notification


Step 4:擷取音樂資訊

通過[mediaItem valueForProperty:...] 來擷取mediaItem的各種資訊。

比如

self.songName.title = [mediaItemvalueForProperty:MPMediaItemPropertyTitle];


以上就是基本的實現方法。






相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.