Minigore: 100,000 загрузок за неделю Gangstar: West Coast Hustle - уже ооочень скоро
Авг 17

Представленный в iPhone SDK фреймворк “AVFoundation” включает “AVAudioPlayer” — простое многофункциональное решение для воспроизведения аудиофайлов на базе Objective-C.

В этом уроке мы познакомимся с его работой, создав простое приложение, циклически воспроизводящее MP3 аудиофайл после запуска.

Источник/Github

Код к уроку можно получить на GitHub: клонируйте его из репозитория или загрузите zip-архив.

Создание проекта

Запустив Xcode, создайте новое приложение на основе представления с именем AudioPlayer:

1. Командой “File > New Project…” из меню Xcode создайте новый проект.
2. В разделе “iPhone OS > Application” выберите “View-based Application“.
3. Присвойте проекту имя “AudioPlayer” и щелкните на кнопке “Save“.

Добавление фреймворка AVFoundation
Чтобы задействовать класс “AVAudioPlaye“, необходимо добавить к проекту фреймворк “AVFoundation“.

1. На относящейся к проекту панели “Groups & Files” разверните группу “Targets“.
2. Правой кнопкой мыши или удерживая нажатой клавишу , щелкните на элементе AudioPlayer.
3. Выберите “Add > Existing Frameworks…“.
4. Внизу слева (под опцией “Linked Libraries“) щелкните на кнопке “+“.
5. Выберите “AVFoundation.framework” и щелкните на кнопке “Add“.
6. Теперь “AVFoundation.framework” появится в разделе “Linked Libraries“. Закройте окно.

Следующим шагом импортируем заголовочные файлы “AVFoundation” в файл интерфейса контроллера представления и настроим экземпляр переменной “AVAudioPlayer“:

1. На относящейся к проекту панели “Groups & Files” разверните группу “AudioPlayer“.
2. Разверните папку “Classes“.
3. Выделив файл “AudioPlayerViewController.h“, отредактируйте его.
4. Обновите файл. Изменения выделены черным:

1
2
3
4
5
6
7
8
#import <UIKit/UIKit.h>
#import <AVFoundation/AVFoundation.h>

@interface AudioPlayerViewController : UIViewController {
AVAudioPlayer *audioPlayer;
}

@end

Добавление аудиофайла

Для воспроизведения нам понадобится аудиофайл. Не претендуя на особую оригинальность, назовем его “audiofile.mp3“. Добавьте файл к проекту:

1. На относящейся к проекту панели “Groups & Files” щелкните на папке “Resources” правой кнопкой мыши или удерживая нажатой клавишу .
2. Из появившегося контекстного меню выберите “Add > Existing Files…“.
3. Найдите и выделите импортируемый файл, щелкните на опции “Add“.
4. Установите флажок “Copy items into destination group’s folder (if needed)” и подтвердите кнопкой “Add“.

Запускаем воспроизведение звука

Начинаем воспроизведение в методе “ViewDidLoad“:

1. Откомментируйте шаблон метода “ViewDidLoad“.
2. Обновите его, как показано ниже. Изменения выделены черным.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
- (void)viewDidLoad {
[super viewDidLoad];

NSURL *url = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/audiofile.mp3", [[NSBundle mainBundle] resourcePath]]];

NSError *error;
audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error];
audioPlayer.numberOfLoops = -1;

if (audioPlayer == nil)
NSLog([error description]);
else
[audioPlayer play];

}

AVAudioPlayer” инициализируется URL-ссылкой, поэтому создадим ссылку, указывающую на аудиофайл в локальной папке с ресурсами. Если для аудиоплейера свойство “numberOfLoops” сделать отрицательным числом, файл будет воспроизводиться бесконечно. Настроив плейер, запускаем воспроизведение, отправив объекту соответствующее сообщение.

Не забудьте освободить “audioPlayer” в методе “dealloc“. Изменения показаны черным.

1
2
3
4
- (void)dealloc {
[audioPlayer release];
[super dealloc];
}

Дополнительные возможности

Регулируется громкость плейера, проверяется /настраивается время воспроизведения, предусмотрены остановка и пауза:

1
2
3
4
5
audioPlayer.volume = 0.5; // 0.0 – нет звука; 1.0 полная громкость
NSLog(@"%f seconds played so far", audioPlayer.currentTime);
audioPlayer.currentTime = 10; // перейти к 10-секундной отметке
[audioPlayer pause];
[audioPlayer stop]; // не восстанавливает "currentTime"; возобновляет воспроизведение

Помимо прочего, можно внедрить протокол “AVAudioPlayerDelegate“, уведомляющий об окончании воспроизведения аудио — например, для перехода к следующей по списку композиции.

Исходный код скачать можно [здесь]

Текст оригинальной статьи на английском языке [здесь]

Уважаемые читатели, данный материал был переведен и подготовлен к публикации проектом LookApp.ru, при публикации на другом сайте ссылка на LookApp.ru обязательна.

1 звезда2 звезд3 звезд4 звезд5 звезд (Оцените приложение)
Загрузка ... Загрузка ...


6 Responses to “Уроки iPhone SDK: Беспроблемное воспроизведение аудио с AVAudioPlayer”

  1. 1. Гуру Says:

    Обязательно ли использовать мп3?Возможно ли воспроизводить др. расширения?

  2. 2. SoulKeeper Says:

    Да конечно можно.

    Правильнее при viewDidLoad инициализировать звуки и делать [audioPlayer prepareToPlay];

    А то каждый раз будет немного тормозить при загрузке звука, особенно если файл большой.

  3. 3. Алексей Says:

    Такая проблема-если была включена музыка на айфоне, а затем запустить приложение с приведенным исходным кодом-музыка на фоне умолкает? Что делать?- нужно чтобы играло оба звука.

  4. 4. Алексей Says:

    проблема - если была запущена музыка на айфоне, а затем запустить приложение с указанным выше кодом, она играть прекратит. Как сделать чтоьы проигрывалось оба звука? Например, игрок хочет играть в любимую игру под любимую музыку))

  5. 5. Shmidt Says:

    При использовании AVAudioPlayer’a ловлю leak (при том как в своём приложении, так и в приведённом выше примере), на буржуйских форумах читал что у половины этот лик есть у другой нету (неизвестно почему)
    Может кто-нить знает как от него избавиться??

  6. 6. Равиль Says:

    Чтобы проигрывалось оба звука нужно правильно настроить аудио сессию. Перед инициализацией плеера добавь [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryAmbient error:nil];
    Вроде должно работать.

Оставьте комментарий