Вход/Регистрация
iOS. Приемы программирования
вернуться

Нахавандипур Вандад

Шрифт:

Когда приложение откроется, мы выделим и инициализируем аудиоплеер, считаем содержимое файла MySong.mp4 в экземпляр NSData и используем эти данные в процессе инициализации аудиоплеера:

— (BOOL) application:(UIApplication *)application

didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{

dispatch_queue_t dispatchQueue =

dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

dispatch_async(dispatchQueue, ^(void) {

NSError *audioSessionError = nil;

AVAudioSession *audioSession = [AVAudioSession sharedInstance];

if ([audioSession setCategory: AVAudioSessionCategoryPlayback

error:&audioSessionError]){

NSLog(@"Successfully set the audio session.");

} else {

NSLog(@"Could not set the audio session");

}

NSBundle *mainBundle = [NSBundle mainBundle];

NSString *filePath = [mainBundle pathForResource:@"MySong"

ofType:@"mp3"];

NSData *fileData = [NSData dataWithContentsOfFile: filePath];

NSError *error = nil;

/* Запускаем аудиоплеер. */

self.audioPlayer = [[AVAudioPlayer alloc] initWithData: fileData

error:&error];

/* Получили ли мы экземпляр AVAudioPlayer? */

if (self.audioPlayer!= nil){

/* Задаем делегат и начинаем воспроизведение. */

self.audioPlayer.delegate = self;

if ([self.audioPlayer prepareToPlay] &&

[self.audioPlayer play]){

NSLog(@"Successfully started playing…");

} else {

NSLog(@"Failed to play.");

}

} else {

/* Не удалось инстанцировать AVAudioPlayer. */

}

});

self.window = [[UIWindow alloc] initWithFrame:

[[UIScreen mainScreen] bounds]];

self.window.backgroundColor = [UIColor whiteColor];

[self.window makeKeyAndVisible];

return YES;

}

В данном примере кода мы используем аудиосессии из фреймворка AV, чтобы сначала перевести в беззвучный режим другие приложения, воспроизводящие музыку (например, приложение iPod), и лишь потом переходим к воспроизведению аудио. Если тот аудиофайл, который воспроизводится в настоящее время (в фоновом режиме), завершается, можно запустить новый экземпляр AVAudioPlayer и приступить к проигрыванию нового аудиофайла. iOS откорректирует обработку информации с учетом такой ситуации. Но нет гарантии, что ваше приложение, работающее в фоновом режиме, получит от системы разрешение на выделение достаточного количества памяти, чтобы загрузить в нее данные нового аудиофайла.

Вы, наверное, заметили, что в приведенном примере кода мы делаем делегат нашего приложения делегатом аудиоплеера. Мы реализуем методы делегата аудиоплеера вот так:

— (void)audioPlayerBeginInterruption:(AVAudioPlayer *)player{

/* Аудиосессия прервана.

Здесь мы ставим плеер на паузу */

}

— (void)audioPlayerEndInterruption:(AVAudioPlayer *)player

withOptions:(NSUInteger)flags{

/* Проверяем по флагам, можем ли мы возобновить воспроизведение аудио.

Если да, то делаем это здесь */

if (flags == AVAudioSessionInterruptionOptionShouldResume){

[player play];

}

}

— (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player

successfully:(BOOL)flag{

  • Читать дальше
  • 1
  • ...
  • 246
  • 247
  • 248
  • 249
  • 250
  • 251
  • 252
  • 253
  • 254
  • 255
  • 256
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: