Использование 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 !

  • Как заставить приложение запускать NSTimer в фоновом режиме?
  • UITextView внутри UIScrollView с AutoLayout
  • NSOperation на iPhone
  • Есть ли документальный способ настройки ориентации iPhone?
  • NSDateFormatter и yyyy-MM-dd
  • Как использовать первый символ в качестве имени раздела
  • Как создать глобальные функции в Objective-C
  • Использование Objective C / Cocoa для unescape символов Unicode, то есть \ u1234
  • Добавление неизвестного количества строк в «Статические ячейки» UITableView
  • Как добавить userInfo в UIAlertView?
  • Точка с запятой после имени метода в файле реализации Objective-C
  • Давайте будем гением компьютера.