Использование MPMediaItems с AVAudioPlayer

Можно ли выбрать элементы мультимедиа с помощью MPMediaPickerController, а затем загрузить их в объект AVAudioPlayer?

Если MPMusicPlayerController не отвечает вашим потребностям, вы можете скопировать аудио в локальный пакет, чтобы вы могли использовать AVAudioPlayer .

РЕДАКТИРОВАТЬ

В основном у вас есть три варианта воспроизведения аудио из библиотеки iPod пользователя: MPMediaPlayer , AVPlayer и AVAudioPlayer .

Вот примеры для MPMediaPlayer и AVPlayer :

 - (void) mediaPicker: (MPMediaPickerController *) mediaPicker didPickMediaItems: (MPMediaItemCollection *) collection { MPMediaItem *item = [[collection items] objectAtIndex:0]; NSURL *url = [item valueForProperty:MPMediaItemPropertyAssetURL]; [self dismissModalViewControllerAnimated: YES]; // Play the item using MPMusicPlayer MPMusicPlayerController* appMusicPlayer = [MPMusicPlayerController applicationMusicPlayer]; [appMusicPlayer setQueueWithItemCollection:collection]; [appMusicPlayer play]; // Play the item using AVPlayer AVPlayerItem *playerItem = [[AVPlayerItem alloc] initWithURL:url]; AVPlayer *player = [[AVPlayer alloc] initWithPlayerItem:playerItem]; [player play]; } 

Если вам по AVAudioPlayer то причине необходимо использовать AVAudioPlayer или вам необходим доступ к фактическим аудиоданным аудиофайла, сначала необходимо скопировать аудиофайл в каталог вашего приложения, а затем работать с ним. AVAsset + AVPlayer – самая близкая аналогия с ALAsset если вы привыкли работать с фотографиями и видео.

Просто хотелось сказать, что похоже, что в iOS 6 и 7 AVAudioPlayer может воспроизводить URL-адреса файлов непосредственно с iPod без необходимости копировать аудиоданные в каталог приложений, как предлагалось в Art.

 - (void) mediaPicker: (MPMediaPickerController *) mediaPicker didPickMediaItems: (MPMediaItemCollection *) collection { MPMediaItem *item = [[collection items] objectAtIndex:0]; NSURL *url = [item valueForProperty:MPMediaItemPropertyAssetURL]; // Play the item using AVPlayer self.avAudioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil]; [self.avAudioPlayer play]; } 

Я хотел добавить (и я не могу прокомментировать SO еще), что это похоже на iOS 8, а возможно и раньше, песни, которые хранятся в iCloud, не имеют значения для свойства assetURL и возвращают значение null для [npItem valueForProperty:MPMediaItemPropertyAssetURL] .

Вот пример вывода:

 MPMediaItem *npItem = self.musicPlayerController.nowPlayingItem; NSLog(@"Song Title: %@\n assetURL: %@\n Cloud Item: %d", npItem.title, [npItem valueForProperty:MPMediaItemPropertyAssetURL], npItem.cloudItem) // Log Output Song Title: Time We Had assetURL: (null) Cloud Item: 1 Song Title: The Quiet assetURL: ipod-library://item/item.m4a?id=1529654720874100371 Cloud Item: 0 

Я думаю, вы обнаружите, что [NSBundle mainBundle] READ-ONLY. Невозможно записать файлы в APP, поэтому AVAudioPlayer не будет работать для MPMediaItems -библиотеки MPMediaItems !

  • Каков наилучший способ перетащить NSMutableArray?
  • Проблема с кодом: строка формата не является строковым литералом
  • как сделать программный снимок экрана для iPhone?
  • UIImage от CALayer - iPhone SDK
  • Тип аксессуара UITableViewCell, проверенный на доступ и установка других непроверенных
  • @synthesize vs @dynamic, каковы различия?
  • глубокая изменчивая копия NSMutableDictionary
  • В чем разница между «отображаемым именем пакета» и «именем пакета» в информационном plist приложения cocoa
  • как скрыть навигационную панель, когда я нажимаю навигационный controller?
  • Как добавить userInfo в UIAlertView?
  • Что такое хорошо для?
  • Давайте будем гением компьютера.