Archive for outubro, 2009

Programando Sons - Parte Final

domingo, outubro 25th, 2009

Agora, vamos definir cada som que será executado. Escolhi fazer esta definição no momento que a aplicação é carregada. Ou seja, no método viewDidLoad vamos definir cada som que será executado no momento que o usuário tocar em um dos botões. Vamos implementar no arquivo MainViewController.m, colocando o seguinte código:

#import “MainViewController.h”

#import “MainView.h”

@implementation MainViewController

@synthesize btnDrums;

@synthesize btnIntro;

@synthesize btnLove;

@synthesize btnLaugh;

@synthesize btnOhhh;

@synthesize btnTrhill;

@synthesize soundFileURLRefIntro;

@synthesize soundFileObjectIntro;

@synthesize soundFileURLRefOhhh;

@synthesize soundFileObjectOhhh;

@synthesize soundFileURLRefLove;

@synthesize soundFileObjectLove;

@synthesize soundFileURLRefDrums;

@synthesize soundFileObjectDrums;

@synthesize soundFileURLRefThrill;

@synthesize soundFileObjectThrill;

@synthesize soundFileURLRefLaugh;

@synthesize soundFileObjectLaugh;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {

if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {

// Custom initialization

}

return self;

}

- (void) viewDidLoad {

// Intro sound

id sndpathIntro = [[NSBundle mainBundle] pathForResource:@”abertura 3″ ofType:@”wav”];

CFURLRef baseURLIntro = (CFURLRef)[[NSURL alloc] initFileURLWithPath:sndpathIntro];

AudioServicesCreateSystemSoundID(baseURLIntro, &soundFileObjectIntro);

// Ohhh sound

id sndpathOhhh = [[NSBundle mainBundle] pathForResource:@”oh” ofType:@”wav”];

CFURLRef baseURLOhhh = (CFURLRef)[[NSURL alloc] initFileURLWithPath:sndpathOhhh];

AudioServicesCreateSystemSoundID(baseURLOhhh, &soundFileObjectOhhh);

// Love sound

id sndpathLove = [[NSBundle mainBundle] pathForResource:@”love10″ ofType:@”wav”];

CFURLRef baseURLLove = (CFURLRef)[[NSURL alloc] initFileURLWithPath:sndpathLove];

AudioServicesCreateSystemSoundID(baseURLLove, &soundFileObjectLove);

// Laugh sound

id sndpathLaugh = [[NSBundle mainBundle] pathForResource:@”laugh” ofType:@”wav”];

CFURLRef baseURLLaugh = (CFURLRef)[[NSURL alloc] initFileURLWithPath:sndpathLaugh];

AudioServicesCreateSystemSoundID(baseURLLaugh, &soundFileObjectLaugh);

// Drums sound

id sndpathDrums = [[NSBundle mainBundle] pathForResource:@”rim_shot 1″ ofType:@”wav”];

CFURLRef baseURLDrums = (CFURLRef)[[NSURL alloc] initFileURLWithPath:sndpathDrums];

AudioServicesCreateSystemSoundID(baseURLDrums, &soundFileObjectDrums);

// Thrill sound

id sndpathThrill = [[NSBundle mainBundle] pathForResource:@”suspense” ofType:@”wav”];

CFURLRef baseURLThrill = (CFURLRef)[[NSURL alloc] initFileURLWithPath:sndpathThrill];

AudioServicesCreateSystemSoundID(baseURLThrill, &soundFileObjectThrill);

[super viewDidLoad];

}

- (IBAction)playIntro:(id)sender {

AudioServicesPlaySystemSound (soundFileObjectIntro);

}

- (IBAction)playDrums:(id)sender {

AudioServicesPlaySystemSound (soundFileObjectDrums);

}

- (IBAction)playLaugh:(id)sender {

AudioServicesPlaySystemSound (soundFileObjectLaugh);

}

- (IBAction)playLove:(id)sender {

AudioServicesPlaySystemSound (soundFileObjectLove);

}

- (IBAction)playOhhh:(id)sender {

AudioServicesPlaySystemSound (soundFileObjectOhhh);

}

- (IBAction)playThrill:(id)sender {

AudioServicesPlaySystemSound (soundFileObjectThrill);

}

- (void)flipsideViewControllerDidFinish:(FlipsideViewController *)controller {

[self dismissModalViewControllerAnimated:YES];

}

- (IBAction)showInfo {

FlipsideViewController *controller = [[FlipsideViewController alloc] initWithNibName:@”FlipsideView” bundle:nil];

controller.delegate = self;

controller.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;

[self presentModalViewController:controller animated:YES];

[controller release];

}

- (void)didReceiveMemoryWarning {

// Releases the view if it doesn’t have a superview.

[super didReceiveMemoryWarning];

// Release any cached data, images, etc that aren’t in use.

}

- (void)viewDidUnload {

// Release any retained subviews of the main view.

// e.g. self.myOutlet = nil;

}

- (void)dealloc {

[super dealloc];

}

@end

Estamos terminando, agora só falta relacionar cada ação que criamos com os botões que estão na Main View, lá no Interface Builder.

figura-04

Bom, agora é só executar e curtir a aplicação, como dissemos na edição passada, a idéia é passar o conceito de como montar uma aplicação e não lhe ensinar tão somente em fazer igual. Qualquer dúvida entre em contato com o editor da MAC+.

(Matéria publicada na revista MAC+)

(by Ademar Varela)

Programando Sons - Parte II

sábado, outubro 17th, 2009

Agora vamos observar as declarações das ações:

- (IBAction)playIntro:(id)sender;

- (IBAction)playDrums:(id)sender;

- (IBAction)playLaugh:(id)sender;

- (IBAction)playLove:(id)sender;

- (IBAction)playOhhh:(id)sender;

- (IBAction)playThrill:(id)sender;

Cada declaração acima, está relacionada com o som que queremos que a aplicação execute. Antes porém, vamos precisar inserir um framework para poder manipular sons. Um dos frameworks que manipulam sons é o AudioToolBox.

De um click com o botão control pressionado na pasta Framework e selecione Add / Existing Framework.

figura-02

Isto vai fazer com que uma janela com todos os frameworks sejam disponibilizados. Selecione AudioToolBox.

figura-03

Agora que já adicionamos o framework no projeto, vamos inclui-lo no código, ainda no MainViewController.h o seguinte código:

#import “FlipsideViewController.h”

#include <AudioToolbox/AudioToolbox.h>

@interface MainViewController : UIViewController <FlipsideViewControllerDelegate> {

IBOutlet UIButton *btnIntro;

IBOutlet UIButton *btnDrums;

IBOutlet UIButton *btnLaugh;

IBOutlet UIButton *btnLove;

IBOutlet UIButton *btnOhhh;

IBOutlet UIButton *btnTrhill;

}

@property (nonatomic, retain) UIButton *btnIntro;

@property (nonatomic, retain) UIButton *btnDrums;

@property (nonatomic, retain) UIButton *btnLaugh;

@property (nonatomic, retain) UIButton *btnLove;

@property (nonatomic, retain) UIButton *btnOhhh;

@property (nonatomic, retain) UIButton *btnTrhill;

- (IBAction)showInfo;

- (IBAction)playIntro:(id)sender;

- (IBAction)playDrums:(id)sender;

- (IBAction)playLaugh:(id)sender;

- (IBAction)playLove:(id)sender;

- (IBAction)playOhhh:(id)sender;

- (IBAction)playThrill:(id)sender;

@end

Observe que foi inserida na segunda linha um include que traz o framework para dentro do código. Isto faz com que possamos usar a biblioteca de sons diretamente no nosso código. Para trabalharmos com sons, vamos precisar usar dois elementos da biblioteca AudioToolbox. Os elementos são CFURLRef e SystemSoundID.

Estes dois elementos tem como objetivo controlar e executar os sons desejados. Será necessário declarar um controle para cada som desejado. No caso temos 6 sons, logo vamos precisar de um conjunto de 6 controles para cada um. Ainda no MainViewController.h complemente o seguinte código:

#import “FlipsideViewController.h”

#include <AudioToolbox/AudioToolbox.h>

@interface MainViewController : UIViewController <FlipsideViewControllerDelegate> {

IBOutlet UIButton *btnIntro;

IBOutlet UIButton *btnDrums;

IBOutlet UIButton *btnLaugh;

IBOutlet UIButton *btnLove;

IBOutlet UIButton *btnOhhh;

IBOutlet UIButton *btnTrhill;

CFURLRef soundFileURLRefIntro;

SystemSoundID soundFileObjectIntro;

CFURLRef soundFileURLRefOhhh;

SystemSoundID soundFileObjectOhhh;

CFURLRef soundFileURLRefLove;

SystemSoundID soundFileObjectLove;

CFURLRef soundFileURLRefDrums;

SystemSoundID soundFileObjectDrums;

CFURLRef soundFileURLRefThrill;

SystemSoundID soundFileObjectThrill;

CFURLRef soundFileURLRefLaugh;

SystemSoundID soundFileObjectLaugh;

}

@property (nonatomic, retain) UIButton *btnIntro;

@property (nonatomic, retain) UIButton *btnDrums;

@property (nonatomic, retain) UIButton *btnLaugh;

@property (nonatomic, retain) UIButton *btnLove;

@property (nonatomic, retain) UIButton *btnOhhh;

@property (nonatomic, retain) UIButton *btnTrhill;

@property (readwrite) CFURLRef soundFileURLRefIntro;

@property (readonly) SystemSoundID soundFileObjectIntro;

@property (readwrite) CFURLRef soundFileURLRefOhhh;

@property (readonly) SystemSoundID soundFileObjectOhhh;

@property (readwrite) CFURLRef soundFileURLRefLove;

@property (readonly) SystemSoundID soundFileObjectLove;

@property (readwrite) CFURLRef soundFileURLRefDrums;

@property (readonly) SystemSoundID soundFileObjectDrums;

@property (readwrite) CFURLRef soundFileURLRefThrill;

@property (readonly) SystemSoundID soundFileObjectThrill;

@property (readwrite) CFURLRef soundFileURLRefLaugh;

@property (readonly) SystemSoundID soundFileObjectLaugh;

- (IBAction)showInfo;

- (IBAction)playIntro:(id)sender;

- (IBAction)playDrums:(id)sender;

- (IBAction)playLaugh:(id)sender;

- (IBAction)playLove:(id)sender;

- (IBAction)playOhhh:(id)sender;

- (IBAction)playThrill:(id)sender;

@end

(Matéria publicada na revista MAC+)
(by Ademar Varela)

Programando os Sons - Parte I

domingo, outubro 4th, 2009

Programando os Sons!!!

Na edição anterior montamos toda a parte gráfica da nossa aplicação, agora vamos montar a parte de programação. Vamos nos concentrar mais no XCode, e só depois voltar a mexer no Interface Builder, abra o código e vamos implementar nossas ações, que no nosso caso serão para executar os sons que desejamos. Vamos até o arquivo MainViewController.h e digite o seguinte código:

#import “FlipsideViewController.h”

@interface MainViewController : UIViewController <FlipsideViewControllerDelegate> {

IBOutlet UIButton *btnIntro;

IBOutlet UIButton *btnDrums;

IBOutlet UIButton *btnLaugh;

IBOutlet UIButton *btnLove;

IBOutlet UIButton *btnOhhh;

IBOutlet UIButton *btnTrhill;

}

@property (nonatomic, retain) UIButton *btnIntro;

@property (nonatomic, retain) UIButton *btnDrums;

@property (nonatomic, retain) UIButton *btnLaugh;

@property (nonatomic, retain) UIButton *btnLove;

@property (nonatomic, retain) UIButton *btnOhhh;

@property (nonatomic, retain) UIButton *btnTrhill;

- (IBAction)showInfo;

- (IBAction)playIntro:(id)sender;

- (IBAction)playDrums:(id)sender;

- (IBAction)playLaugh:(id)sender;

- (IBAction)playLove:(id)sender;

- (IBAction)playOhhh:(id)sender;

- (IBAction)playThrill:(id)sender;

@end

Vamos relembrar alguns conceitos que já apresentamos nas edições anteriores. Precisamos declarar as variáveis que serão relacionadas com a interface montada no Interface Builder, por isto é necessário usarmos o código:

IBOutlet UIButton *btnIntro;

IBOutlet UIButton *btnDrums;

IBOutlet UIButton *btnLaugh;

IBOutlet UIButton *btnLove;

IBOutlet UIButton *btnOhhh;

IBOutlet UIButton *btnTrhill;

Cada linha IBOutlet está na verdade fazendo referência aos botões inseridos na Main View no Interface Builder. Depois de pronto todo o código vamos precisar relacionar cada variável aqui declarada com o seu respectivo botão no IB.

figura-01

(Matéria publicada na revista MAC+)

(by Ademar Varela)