Главная » iPhone » Пример: переменные мелодии звонка iPhone

0

В данном примере будут воспроизводиться одна за другой две отдельные мелодии звонка посредством аудиоочереди.

Скомпилируйте этот пример с помощью следующей командной строки:

$ arm-apple-darwin9-gcc -о MyExample MyExample.m -lobjc -framework Foundation -framework CoreFoundation -framework UIKit Ь -framework Celestial

В листингах 6.1 и 6.2 приведен соответствующий код.

#import <CoreFoundation/CoreFoundation.h> #import <Foundation/Foundation.h> #import <UIKit/UIKit.h> #import <UIKit/UITextView.h> #import <Celestial/AVController.h> #import <Celestial/AVItem.h> #import <Celestial/AVQueue.h>

@interface MainView : UlView

{

UITextView *textView; AVController *av; AVItem *iteml, *item2; AVQueue *avq;

}

-    (id)initWithFrame:(CGRect)frame;

-    (void)dealloc; @end

©interface MyApp : UIApplication {

UlWindow *window; MainView *mainView;

}

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification; @end

#import "MyExample.h"

int main(int argc, char **argv) {

NSAutoreleasePool *autoreleasePool = [ t NSAutoreleasePool alloc ] init

];

int returnCode = UIApplicationMain(argc, argv, ©"MyApp", ©"MyApp"); [ autoreleasePool release ]; return returnCode;

}

©implementation MyApp

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification { window = [ [ UlWindow alloc ] initWithContentRect: [ UIHardware fullScreenApplicationContentRect ]

].;

CGRect rect = [ UIHardware fullScreenApplicationContentRect ]; rect.origin.x = rect.origin.у = O.Of;

mainView = [ [ MainView alloc ] initWithFrame: rect ];

[ window setContentView: mainView }; [ window orderFront: self ]; [ window makeKey: self ]; [ window _setHidden: NO ];

}

@end

@implementation MainView – (id)initwithFrame:(CGRect)rect {

self = [ super initwithFrame: rect ]; if (nil != self) { NSError *err;

textView = [ [ UITextView alloc ] initwithFrame: rect ]; [ textView setText: @"Hello, Sound!" ]; [ self addSubview: textView ];

av = f [ AVController alloc ] init ];

/

avq = [ [ AVQueue alloc ] init ];

iteml = [ [ AVItem alloc ]

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

] ;

if (err != nil)

[ textView setText: err ];

item2 = [ [ AVItem alloc ]

initWithPath:@"/Library/Ringtones/Blues.m4r" error: serr

] ;

if (err != nil)

[ textView setText: err ];

[ avq appendltem: iteml error: &err ]; [ avq appendltem: item2 error: &err ];

[ av setQueue: avq ]; [ av play:nil ];

}

return self;

}

- (void)dealloc {

[ self dealloc ]; [ super dealloc ];

)

@end

Как это работает

Пример работает следующим образом:

1.     Порождается приложение и отображается текстовое поле с заданным по умолчанию текстом: "Hello, Sound!"

2.      Порождаются объекты AVController и AVQueue.

3.      Вместо создания единичного объекта AVitem создаются два: один — для мелодии звонка Pinball, а другой — для мелодии звонка Blues, оба расположенные в папке /Library/Ringtones.

4.      Если любой из объектов AVitem вызовет ошибку, то текст в текстовом виде заменяется сообщением об ошибке.

5.     Обе дорожки добавляются в объект аудиоочереди.

6.     Объект аудиоочереди прикрепляется к контроллеру, а контроллеру дается у казание начать воспроизведение.

7.     Обе аудиодорожки воспроизводятся посредством очереди в том порядке, в котором они были в нее добавлены.

Для дальнейшего изучения

Чтобы быть более спокойными относительно Celestial, проверьте наличие AVController.h. AVItem.h и AVQueue.h в вашем пакете инструментов. Вы обнаружите их в папке /toolchain/sys/usr/include/Celestial.

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

По теме:

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