我目前正在尝试使用 AVPlayer 而不是 MPMusicPlayerController 使用应用程序控制器从手机本地 iPod 库中播放音乐。
我可以使用 MPMediaQuery 从本地 iPod 库中选择一个音轨,但是当我尝试使用 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];
}
所以此时数组是我的库中的一组曲目。
现在抓住一个并使用 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(流)的文件时调整音量有效;只是在本地图书馆播放时不会。
我意识到我没有在这里进行任何内存管理;只是想让它首先工作。此外,本地播放器是一个属性,因此没有明确的保留。
任何帮助将不胜感激!
谢谢。