본문 바로가기
프로그래밍/iOS

아이팟 모드 만들기 - iPod Library 접근하기

by 백룡화검 2012. 7. 10.

출처 : http://adolchristin.tistory.com/41


기본 적인 문서는 애플 개발자 페이지의

http://developer.apple.com/library/ios/#documentation/Audio/Conceptual/iPodLibraryAccess_Guide/Introduction/Introduction.html

이곳을 참조 하였다.

-(void) selectMp3
{
	NSLog(@"selectMp3");
	
	MPMediaPickerController *picker = [[MPMediaPickerController alloc] initWithMediaTypes:MPMediaTypeMusic];
	//MPMediaPickerController *picker = [[MPMediaPickerController alloc] initWithMediaTypes:MPMediaTypeAnyAudio];
	[picker setDelegate:self];
	[picker setAllowsPickingMultipleItems:NO];
	[picker setPrompt:@"Select Song to Play!"];
	
	[[[CCDirector sharedDirector] openGLView] addSubview:tempVC.view];
	[tempVC presentModalViewController:picker animated:YES];
	[picker release];
	
	[[UIApplication sharedApplication] setStatusBarHidden:NO animated:YES];
}

-(void) mediaPicker:(MPMediaPickerController *)mediaPicker didPickMediaItems:(MPMediaItemCollection *)mediaItemCollection
{
	NSLog(@"mediaPicker");
	[APP_DEL SetFreeMp3:mediaItemCollection];
	
	[[UIApplication sharedApplication] setStatusBarHidden:YES animated:YES];
	[tempVC dismissModalViewControllerAnimated:YES];
	[tempVC.view removeFromSuperview];
	
	[APP_DEL Set_Playing:YES];
	[APP_DEL Set_iPod:YES];
	[SceneManager goPlay];
}

-(void) mediaPickerDidCancel:(MPMediaPickerController *)mediaPicker
{
	NSLog(@"mediaPickerDidCancel");
	[[UIApplication sharedApplication] setStatusBarHidden:YES animated:YES];
	[tempVC dismissModalViewControllerAnimated:YES];	
    [tempVC.view removeFromSuperview];		
}




아이팟 라이브러리가 호출 되면 앞서 게임센터의 리더보드나 업적창을 띄웠을때처럼 임시 뷰 컨트롤러를 만들어서 모달뷰로 아이팟 라이브러리를 호출 하였다.

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

함수는 피커에서 노래가 선택되었을 때 호출되는 함수 이고

-(void) mediaPickerDidCancel:(MPMediaPickerController *)mediaPicker

이 함수는 아무것도 선택안하고 닫기를 눌렀을 때 호출 되는 함수이다

아이팟 라이브러리에서 선택된 노래 정보(MPMediaItemCollection *)mediaItemCollection는 AppDelegate에 보내준다 

-(void) FreeMp3Stop
{
	[myPlayer stop];
}

-(void) FreeMp3Pause
{
	[myPlayer pause];

}

-(float) Get_FreeMp3Time
{
	return [myPlayer currentPlaybackTime];
}

-(void) Set_FreeMp3Time:(float)_time
{
	[myPlayer setCurrentPlaybackTime:_time];
}

- (void)Set_iPod:(BOOL)_ipod
{
	ipodMode = _ipod;
}
- (BOOL)Get_iPod
{
	return ipodMode;
}

- (float) Get_FreeMp3Duration
{
	NSString *temp_Time = [myPlayer.nowPlayingItem valueForProperty:@"playbackDuration"];
	g_Duration = [temp_Time floatValue];
	return g_Duration;
}

- (NSString*) Get_FreeMp3Title
{
	g_FreeSongTitle = [myPlayer.nowPlayingItem valueForProperty:@"title"];
	NSLog(@"아이팟에서 선택된 노래 제목 : %@", g_FreeSongTitle);
	
	return g_FreeSongTitle;
}




AppDelegate에 이렇게 아이팟 노래를 재생시킬수 있는 뮤직플레이어 컨트롤러를 만든다

MPMusicPlayerController *myPlayer
= [MPMusicPlayerController applicationMusicPlayer]; 

AppDelegate에서는 myPlayer의 노래 제목, 재생 시간, 총 재생 시간의 정보를 가져오며 우리는 이 정보들을 게임에 이용한다.

MPMediaItem으로 Jump to Define 해보면 아이팟 라이브러리에서 가져올 수 있는 정보들이 정리되어있다

// Media properties

MP_EXTERN NSString *const MPMediaItemPropertyPersistentID;     // @"persistentID",        NSNumber of uint64_t (unsigned long long),    filterable

MP_EXTERN NSString *const MPMediaItemPropertyMediaType;        // @"mediaType",           NSNumber of MPMediaType (NSInteger),          filterable

MP_EXTERN NSString *const MPMediaItemPropertyTitle;            // @"title",               NSString,                                     filterable

MP_EXTERN NSString *const MPMediaItemPropertyAlbumTitle;       // @"albumTitle",          NSString,                                     filterable

MP_EXTERN NSString *const MPMediaItemPropertyArtist;           // @"artist",              NSString,                                     filterable

MP_EXTERN NSString *const MPMediaItemPropertyAlbumArtist;      // @"albumArtist",         NSString,                                     filterable

MP_EXTERN NSString *const MPMediaItemPropertyGenre;            // @"genre",               NSString,                                     filterable

MP_EXTERN NSString *const MPMediaItemPropertyComposer;         // @"composer",            NSString,                                     filterable

MP_EXTERN NSString *const MPMediaItemPropertyPlaybackDuration; // @"playbackDuration",    NSNumber of NSTimeInterval (double)

MP_EXTERN NSString *const MPMediaItemPropertyAlbumTrackNumber; // @"albumTrackNumber",    NSNumber of NSUInteger

MP_EXTERN NSString *const MPMediaItemPropertyAlbumTrackCount;  // @"albumTrackCount",     NSNumber of NSUInteger

MP_EXTERN NSString *const MPMediaItemPropertyDiscNumber;       // @"discNumber",          NSNumber of NSUInteger

MP_EXTERN NSString *const MPMediaItemPropertyDiscCount;        // @"discCount",           NSNumber of NSUInteger

MP_EXTERN NSString *const MPMediaItemPropertyArtwork;          // @"artwork",             MPMediaItemArtwork

MP_EXTERN NSString *const MPMediaItemPropertyLyrics;           // @"lyrics",              NSString

MP_EXTERN NSString *const MPMediaItemPropertyIsCompilation;    // @"isCompilation",       NSNumber of BOOL,                             filterable

MP_EXTERN NSString *const MPMediaItemPropertyReleaseDate       NS_AVAILABLE_IPHONE(4_0);

                                                               // @"releaseDate",         NSDate

MP_EXTERN NSString *const MPMediaItemPropertyBeatsPerMinute    NS_AVAILABLE_IPHONE(4_0);

                                                               // @"beatsPerMinute",      NSNumber of NSUInteger

MP_EXTERN NSString *const MPMediaItemPropertyComments          NS_AVAILABLE_IPHONE(4_0);

                                                               // @"comments",            NSString

MP_EXTERN NSString *const MPMediaItemPropertyAssetURL          NS_AVAILABLE_IPHONE(4_0);

                                                               // @"assetURL",            NSURL


// Podcast properties

MP_EXTERN NSString *const MPMediaItemPropertyPodcastTitle;     // @"podcastTitle",        NSString,                                     filterable


// User properties

MP_EXTERN NSString *const MPMediaItemPropertyPlayCount;        // @"playCount",           NSNumber of NSUInteger

MP_EXTERN NSString *const MPMediaItemPropertySkipCount;        // @"skipCount",           NSNumber of NSUInteger

MP_EXTERN NSString *const MPMediaItemPropertyRating;           // @"rating",              NSNumber of NSUInteger, 0...5

MP_EXTERN NSString *const MPMediaItemPropertyLastPlayedDate;   // @"lastPlayedDate",      NSDate

MP_EXTERN NSString *const MPMediaItemPropertyUserGrouping      NS_AVAILABLE_IPHONE(4_0);

                                                               // @"userGrouping",        NSString

 

대충 title이 노래 제목 albumTitle이 앨범 타이틀 artist가 가수, playbackDuration이 총 재생 시간 등으로 읽어보고 필요한 것들을 위에 사용한 것처럼 NSString *temp_Time = [myPlayer.nowPlayingItem valueForProperty:@"playbackDuration"];

이렇게 가져다가 쓰면 된다.