В настоящее время я пытаюсь воспроизвести музыку из локальной библиотеки iPod на телефоне с помощью AVPlayer, а не MPMusicPlayerController с помощью контроллера приложения.
Я могу получить его, выбрав трек из локальной библиотеки iPod с помощью и 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];
}
Итак, на данный момент массив представляет собой массив дорожек из моей библиотеки.
Теперь, чтобы взять один и воспроизвести его с помощью 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 (потоковая передача);только не при игре из локальной библиотеки.
Я понимаю, что здесь я не управлял памятью;просто пытаюсь заставить это работать сначала.Кроме того, локальный игрок является свойством, поэтому нет явного сохранения.
Любая помощь будет принята с благодарностью!
Спасибо.