Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

Если 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 или вам нужен доступ к аудиофайлам аудиофайла, вы должны сначала скопировать аудиофайл в каталог своего приложения, а затем работать с ним. Материал AVAsset + AVPlayer является ближайшей аналогией с ALAsset, если вы привыкли работать с фотографиями и видео.

Ответ 2

Просто хотелось сказать, что похоже, что в 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];
}

Ответ 3

Я хотел добавить (и я не могу прокомментировать 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

Ответ 4

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