我目前正在嘗試使用AVPlayer而不是MPMusicPlayerController使用應用程序控制器從手機本地iPod庫播放音樂。setVolume不能用於AVMutableAudioMixInputParameters從手機播放本地iPod庫
我可以從本地iPod lib使用MPMediaQuery選擇音軌,但是當我嘗試使用AVMutableAudioMixInputParameters在較低級別啓動音頻時,它似乎並沒有降低音量。
我使用AVPlayer而不是MPMusicPlayerController的原因是我在同一時間在後臺播放一些其他音頻,並且MPMusicPlayerController無法使用AVPlayer播放現有音頻文件來佔用硬件。我現在的代碼是:
// just blindly select all music for now.
MPMediaQuery *everything = [[MPMediaQuery alloc] init];
NSArray *itemsFromGenericQuery = [everything items];
MPMediaItem *song;
NSMutableArray *array = [[NSMutableArray alloc] init];
for (song in itemsFromGenericQuery)
{
[array addObject:song];
}
所以在這一點上,數組是來自我的lib的軌道數組。
我們搶單,並使用播放AVPlayer:
// grab the first song off the array
MPMediaItem *song = [array objectAtIndex:0];
NSURL *assetURL = [song valueForProperty:MPMediaItemPropertyAssetURL];
AVURLAsset *asset = [AVURLAsset URLAssetWithURL:assetURL options:nil];
NSArray *audioTracks = [asset tracksWithMediaType:AVMediaTypeAudio];
AVAssetTrack *track = [audioTracks objectAtIndex:0];
NSMutableArray *allAudioParams = [NSMutableArray array];
AVMutableAudioMixInputParameters *audioInputParams =
[AVMutableAudioMixInputParameters audioMixInputParameters];
// this is the key line - turn the volume down.
[audioInputParams setVolume:0.3 atTime:kCMTimeZero];
[audioInputParams setTrackID:[track trackID]];
[allAudioParams addObject:audioInputParams];
AVMutableAudioMix *audioZeroMix = [AVMutableAudioMix audioMix];
[audioZeroMix setInputParameters:allAudioParams];
// Create a player item
AVPlayerItem *playerItem = [AVPlayerItem playerItemWithAsset:asset];
[playerItem setAudioMix:audioZeroMix];
[playerItem seekToTime:CMTimeMake(30, 1)];
[self setLocalPlayer:[AVPlayer playerWithPlayerItem:playerItem]];
[localPlayer play];
我可以證實,在調節音量作品使用AVPlayer時從一個URL(流)播放文件;而不是在當地圖書館玩。
我意識到我在這裏沒有做過任何內存管理;只是想讓它首先工作。此外,本地球員是一個財產,所以沒有明確的保留。
任何幫助將不勝感激!
謝謝。
我不是iPhone開發者,但是,這不是那個功能的名字...有點太長了? – aviraldg 2011-01-25 01:15:43
嘿,它有點 - 但它是一個stdlib庫/函數。 – 2011-01-25 01:29:20