Главная » iPhone » Аудиодорожки iPhone

0

Итак, вы породили объект AVController, который создает аудиоканал, но до сих пор еще ничего не было сделано для воспроизведения звуковых дорожек. Создайте каждую воспроизводимую дорожку как объект AVitem. Приведенный далее фрагмент кода создает AVitem для ссылки на существующий в iPhone звуковой файл. Для отлавливания ошибок здесь также используется класс NSError, с которым вы познакомились в последнем разделе: NSError *err;

AVitem *item = [ [ AVitem alloc ]

initWithPath: @"/Library/Ringtones/Pinball,m4r" error: &err

] ;

if (err != nil) {

NSLog(@"The following error has occurred:            err);

)

Воспроизведение URL

С помощью того же класса AVitem можно воспроизводить URL, указывая URL вместо пути файла:

AVitem *item = [ [ AVitem alloc ]

initWithPath: @"http://path-to-sound-file" error: &err

];

Это может пригодиться, но имейте в виду, что для воспроизведения этих звуков вашему приложению потребуется сетевое подключение. Медленное подключение или его полное отсутствие может привести к замедлению работы приложения.

Уровень громкости звуковой дорожки

Чтобы установить уровень громкости для какой-либо отдельной звуковой дорожки, можно вызвать метод setvolume класса AVitem. В отличие от метода контроллера использование здесь setvolume не повлияет на остальные аудиоканалы, а также пользователю не будет отображаться диалоговое окно изменения уровня громкости: [ item setvolume: 0.5 ];

Заготовки эквалайзера

Отдельно взятая звуковая дорожка также обладает собственным свойством EQ, которое может быть настроено с помощью табл. 6.1. Эта настройка EQ распространяется только на данную конкретную дорожку и остается действительной до тех пор, пока существует данный объект:

[ item setEQPreset: 0 ];

Длительность

После того как объект будет создан, вы можете определить длительность звуковой дорожки в секундах:

float duration = [ item duration ];

Аудиоочереди

Чтобы воспроизводить звук через аудиоконтроллер, вам необходим способ помещать звуковые дорожки в очередь. Воспроизведение двух звуков подряд без очереди невозможно, поскольку тогда непонятно, как сообщить объекту контроллера сделать это, не убивая при этом воспроизводимый в данный момент звук. Аудиоочереди предоставляют решение этой проблемы путем создания структуры наподобие массива, в которую можно помещать звуковые дорожки для упорядоченного воспроизведения.

В данном разделе рассматриваются аудиоочереди, имеющиеся в классе контроллера AVController, который воспроизводит предварительно записанные аудиовыборки из файлов. Если какое-либо приложение генерирует собственные звуки, то оно должно использовать аудиоочередь Audio Toolbox, описываемую далее в этой главе.

Очередь, предоставляемая классом а\диоконтроллера, — это класс AVQueue: AVQueue *avq = [ [ AVQueue alloc ] init ];

Аудиоочередь прикрепляется к аудиоконтроллеру, а контроллер признает ее в качестве источника всех будущих воспроизведений:

( av setQueue: avq ];

Звуковые дорожки, порожденные как объекты AVitem, затем могут быть добавлены, удалены и переупорядочены в очереди с помощью целого ряда существующих методов:

?        добавить дорожку в конец очереди

[ avq appendltem: item ];

?         вставить дорожку после другой дорожки, определяемой объектом AVitem другой дорожки

[ avq insertltem: item afterltem: other_item error: &err ];

?         вставить дорожку в определенное место в очереди [ avq insertltem: item atlndex: 4 error: &err ];

?        удалить дорожку, определяемую объектом AVitem дорожки [ avq removeltem: item ];

?        удалить дорожку, определяемую местом в очереди [ avq removeltemAtIndex: 3 ];

?        удалить все элементы в пределах заданного диапазона мест в очереди

[ avq removeItemsInRange: NSMakeRange(3, 4) ];

Функция NSMakeRange принимает два аргумента: начальное местоположение и длину диапазона. Приведенный пример удаляет дорожки 3—7;

?        удалить все аудиодорожки из очереди

[ avq removeAllitems ];

?         когда контроллеру будет отдано указание начать воспроизведение, он будет пошагово перемещаться в очереди от элемента к элементу:

[ av play: nil ] ;

Метод воспроизведения вызывается таким же образом, как и в случае отсутствия очереди, но поскольку очередь прикреплена к контроллеру, то он будет использовать ее в качестве источника дорожек без каких-либо особых указаний. Во время воспроизведения элементы в очереди можно добавлять, удалять или переупорядочивать до тех пор, пока очередь не дойдет до задействованных в перемещениях элементов.

Источник: Здзиарски Дж. iPhone. Разработка приложений с открытым кодом: Пер„с англ. — 2-е изд., перераб. и доп. — СПб.: БХВ-Петербург, 2009. — 368 е.: ил.

По теме:

  • Комментарии