63

Iphone lecture imp

Embed Size (px)

DESCRIPTION

IPHONE & MAC DEVELOPMENT APPLICATION DEVELOPMENT FOR THE IPHONE USING APPLE'S OFFICIAL SDK.

Citation preview

Page 1: Iphone lecture  imp
Page 2: Iphone lecture  imp

Tools to create Apps in iPhone

Total 67 Pages 2

Xcode Interface Builder

Instruments

Simulator/device

Mac

Page 3: Iphone lecture  imp

Sound and Music Computing

We use iPhone to make music!

Mobile Music Group

◦ MOGFUN

◦ MOGCLASS

◦ MOGHEALTH

Total 67 Pages 3

Page 4: Iphone lecture  imp

MOGCLASS

MOGCLASS DEMO

Total 67 Pages 4

Page 5: Iphone lecture  imp

MOGCLASS

Do you want to create your own iPhoneApp or develop novel user interface for MOGCLASS?

Total 67 Pages 5

Page 6: Iphone lecture  imp

You need to know…

Language: Objective-C and C/C++

Objective Oriented Programming

Programming and testing in Xcode

Digital Signal Processing basics

Assembly Code (ARM)

Computer Network

Etc…

Total 67 Pages 6

Page 7: Iphone lecture  imp

Today we will cover… Objective-C basics

Building an Application

Sensor programming (accelerometer, GPS, microphone…)

Audio Libraries

There are a lot of materials about iphoneonline. What we will cover today is more oriented for your final project.

Total 67 Pages 7

Page 8: Iphone lecture  imp

How to learn iPhone Programming

Recommended Book: None! We’ll use Apple documentation

iOS Developer Center: http://developer.apple.com/devcenter/ios/index.action

◦ Download the sample code and learn.

Write the code by yourself… Trial and error.

Total 67 Pages 8

Page 9: Iphone lecture  imp

iPhone SDK TechnologyArchitecture

• Multi-Touch Events Alerts• Multi-Touch Controls Web View• Accelerometer People Picker• View Hierarchy Image Picker• Localization Camera

Cocoa Touch

• Core Audio JPG, PNG, TIFF• OpenAL PDF• Audio Mixing Quartz (2D)• Audio Recording Core Animation• Video Playback OpenGL ES

Media

• Collections Core Location• Address Book Net Services• Networking Threading• File Access Preference• SQLite URL utilities

Core Services

• OS X Kernel Power Mgmt• Mach 3.0 Keychain• BSD Certificates• Sockets File System• Security Bonjour

Core OS

Total 67 Pages 9

Page 10: Iphone lecture  imp

Outlines

Objective-C basics

Building an Application

Sensor programming (accelerometer, GPS, microphone…)

Audio Libraries

Total 67 Pages 10

Page 11: Iphone lecture  imp

OOP Vocabulary

Class: defines the grouping of data and code, the ―type‖ of an object.

Instance: a specific allocation of a class.

Method: a ―function‖ that an object knows how to perform.

Instance Variable (or ―ivar‖): a specific piece of data belonging to an object.

Total 67 Pages 11

Page 12: Iphone lecture  imp

OOP Vocabulary

Encapsulation

◦ Keep implementing private and separate from interface

Polymorphism

◦ Different objects, same interface

Inheritance

◦ Hierarchical organization, share code, customize or extend behaviors

Total 67 Pages 12

Page 13: Iphone lecture  imp

Objective-C

Strict superset of C◦ Mix C with ObjC◦ Or even C++ with ObjC (usually referred to as ObjC++)

A very simple language, but some new syntax

Single inheritance, classes inherit from one and only one superclass

Protocols define behavior that cross classes Dynamic runtime Loosely typed, if you’d like

Total 67 Pages 13

Page 14: Iphone lecture  imp

Class and Instance Methods

Instance respond to instance methods-(id)init;

-(float)height;

-(void)walk;

• Classes respond to class methods+(id)alloc;

+(id)person;

+(Person*)sharedPerson;

Total 67 Pages 14

Page 15: Iphone lecture  imp

Message Syntax

[receiver message];

[receiver message:argument];

[receiver message:arg1 andArg: arg2]

Total 67 Pages 15

Page 16: Iphone lecture  imp

Terminology

Message expression[receiver method:argument]

Message[receiver method:argument]

Selector[receiver method:argument]

Method

The code selected by a message.

Total 67 Pages 16

Page 17: Iphone lecture  imp

Dot Syntax

Objective-C 2.0 introduced dot syntax

Convenient shorthand for invoking accessormethodsfloat height = [person height];

float height = person.height;

[person setHeight: newHeight];

person.height = newHeight;

Follows the dots…[[person child] setHeight:newHeight];

//exact the same as

person.child.height = newHeight;

Total 67 Pages 17

Page 18: Iphone lecture  imp

Dynamic and static typing

Dynamically-typed objectid anObject

just id

Not id * (unless you really, really mean it…)

Statically-typed objectPerson *anObject

Objective-C provides compile-time, not runtime, type checking

Objective-C always uses dynamic binding

Total 67 Pages 18

Page 19: Iphone lecture  imp

Selectors identify methods by name

A selector has type SELSEL action = [button action];

[button setAction: @selector(start:)];

Conceptually similar to function pointer

Selectors include the name and all colons, for example:-(void) setName:(NSString*)name age:(int)age;

would have a selector:SEL sel = @selector(setName:age:);

Total 67 Pages 19

Page 20: Iphone lecture  imp

Working with selectors

You can determine if an object responds to a given selectorid obj;

SEL sel = @selector(start:)

if ([obj respondsToSelector:sel]){

[obj performSelector: sel withObject:self];

}

This sort of introspection and dynamic messaging underlies many Cocoa design patterns-(void)setTarget:(id)target;

-(void)setAction:(SEL)action;

Total 67 Pages 20

Page 21: Iphone lecture  imp

Working with Classes

You can ask an object about its classClass myClass = [myObject class];

NSLog(@"My class is %@", [myObject className]);

Testing for general class membership (subclasses included):if ([myObject isKindOfClass:[UIControl class]]) {

// something

}

Testing for specific class membership (subclasses excluded):if ([myObject isMemberOfClass:[NSString class]]) {

// something string specific

}

Total 67 Pages 21

Page 22: Iphone lecture  imp

Working with Objects

Identity v.s. Equality

Identity—testing equality of the pointer valuesif (object1 == object2) {

NSLog(@"Same exact object instance");

}

Equality—testing object attributesif ([object1 isEqual: object2]) {

NSLog(@"Logically equivalent, but may

be different object instances");

}

Total 67 Pages 22

Page 23: Iphone lecture  imp

-description

NSObject implements -description- (NSString *)description;

Objects represented in format strings using %@

When an object appears in a format string, it is asked for its description[NSString stringWithFormat: @”The answer is: %@”,

myObject];

You can log an object’s description with:NSLog([anObject description]);

Your custom subclasses can override description to return more specific information

Total 67 Pages 23

Page 24: Iphone lecture  imp

Foundation Framework

Foundation Classes◦ NSObject String

NSString / NSMutableString

Collection NSArray / NSMutableArray

NSDictionary / NSMutableDictionary

NSSet / NSMutableSet

NSNumber

Others NSData / NSMutableData

NSDate / NSCalendarDate

Total 67 Pages 24

Page 25: Iphone lecture  imp

More OOP Info

Tons of books and articles on OOP

Objective-C 2.0 Programming Language

Total 67 Pages 25

Page 26: Iphone lecture  imp

Outlines

Objective-C basics

Building an Application

Sensor programming (accelerometer, GPS, microphone…)

Audio Libraries

Total 67 Pages 26

Page 27: Iphone lecture  imp

Anatomy of an Application

Compiled code◦ Your code

◦ Frameworks

Nib files◦ UI elements and other objects

◦ Details about object relations

Resources (images, sounds, strings, etc)

Info.plist file (application configuration)

Total 67 Pages 27

Page 28: Iphone lecture  imp

App Lifecycle

Total 67 Pages 28

Page 29: Iphone lecture  imp

App Lifecycle

Main function

UIApplicationMain which Info.plist to figure out what nib to load.

MainWindow.xib contains the connections for our application.

AppDelegate

ViewController.xib

View – handle UI events

Total 67 Pages 29

Page 30: Iphone lecture  imp

Model-View-Controller

Total 67 Pages 30

Page 31: Iphone lecture  imp

Communication and MVC

Total 67 Pages 31

Page 32: Iphone lecture  imp

Model

Manages the app data and state

Note concerned with UI or presentation

Often persists somewhere

Same model should be reusable, unchanged in different interfaces

Total 67 Pages 32

Page 33: Iphone lecture  imp

View

Present the Model to the user in an appropriate interface

Allows user to manipulate data

Does not store any data

◦ (except to cache state)

Easily reusable & configurable to display different data

Total 67 Pages 33

Page 34: Iphone lecture  imp

Controller

Intermediary between Model & View

Updates the view when the model changes

Updates the model when the user manipulates the view

Typically where the app logic lives

Total 67 Pages 34

Page 35: Iphone lecture  imp

Outlines

Objective-C basics

Building an Application

Sensor programming (accelerometer, GPS, microphone, …)

Audio Libraries

Total 67 Pages 35

Page 36: Iphone lecture  imp

Accelerometer

What are the accelerometers?

◦ Measure changes in force

What are the uses?

Physical Orientation vs. Interface Orientation

◦ Ex: Photos & Safari

Total 67 Pages 36

Page 37: Iphone lecture  imp

Orientation-Related Changes

Getting the physical orientation

◦ UIDevice class

UIDeviceOrientationDidChangeNotification

Getting the interface orientation

◦ UIApplication class

statusBarOrientation property

◦ UIViewController class

interfaceOrientation property

Total 67 Pages 37

Page 38: Iphone lecture  imp

ShakeUndo! UIEvent type

◦ @property(readonly) UIEventType type;

◦ @property(readonly) UIEventSubtype

subtype;

◦ UIEventTypeMotion

◦ UIEventSubtypeMotionShake

Total 67 Pages 38

Page 39: Iphone lecture  imp

Getting raw Accelerometer Data

3-axis data

Configurable update frequency (10-100Hz)

Sample Code (AccelerometerGraph)

Class

◦ UIAccelerometer

◦ UIAcceleration

Protocol

◦ UIAccelerometerDelegate

Total 67 Pages 39

Page 40: Iphone lecture  imp

Getting raw Accelerometer Data-(void)initAccelerometer{

[[UIAccelerometer sharedAccelerometer] setUpdateInterval: (1.0 / 100)];

[[UIAccelerometer sharedAccelerometer] setDelegate: self];

}

-(void)accelerometer: (UIAccelerometer*)accelerometer didAccelerate: (UIAcceleration*) acceleration {

double x, y, z;

x = acceleration.x;

y = acceleration.y;

z = acceleration.z;

//process the data…}

-(void)disconnectAccelerometer{

[[UIAccelerometer sharedAccelerometer] setDelegate: nil];

}

Total 67 Pages 40

Page 41: Iphone lecture  imp

Filtering Accelerometer Data

Low-pass filter

◦ Isolates constant acceleration

◦ Used to find the device orientation

High-pass filter

◦ Shows instantaneous movement only

◦ Used to identify user-initiated movement

Total 67 Pages 41

Page 42: Iphone lecture  imp

Filtering Accelerometer Data

Total 67 Pages 42

Page 43: Iphone lecture  imp

Filtering Accelerometer Data

Total 67 Pages 43

Page 44: Iphone lecture  imp

Applying Filters

Simple low-pass filter example

Simple high-pass filter example

Total 67 Pages 44

#define FILTERFACTOR 0.1

Value = (newAcceleration * FILTERFACTOR) + (previousValue *

(1.0 – FILTERFACTOR));

previousValue = value;

lowpassValue = (newAcceleration * FILTERFACTOR) +

(previousValue * (1.0 – FILTERFACTOR));

previousLowPassValue = lowPassValue;

highPassValue = newAcceleration – lowPassValue;

Page 45: Iphone lecture  imp

GPS

Classes◦ CLLocationManager

◦ CLLocation

Protocol◦ CLLocationManagerDelegate

Total 67 Pages 45

Page 46: Iphone lecture  imp

Getting a Location

Starting the location service

Using the event data

Total 67 Pages 46

-(void)initLocationManager{

CLLocationManager* locManager = [[CLLocationManager alloc] init];

locManager.delegate = self;

[locManager startUpdatingLocation];

}

-(void)locationManager: (CLLocationManager*)manager didUpdateToLocation:

(CLLocation*)newLocation fromLocation: (CLLocation*)oldLocation{

NSTimerInterval howRecent = [newLocation.timestamp timeIntervalSinceNow];

if(howRecent < -10) return;

if(newLocation.horizontalAccuracy > 100) return;

//Use the coordinate data.

double lat = newLocation.coordinate.latitude;

double lon = newLocation.coordinate.longitude;

}

Page 47: Iphone lecture  imp

Getting a Heading

Geographic North

◦ CLLocationDirection trueHeading

Magnetic North

◦ CLLocationDirection magneticHeading

Total 67 Pages 47

-(void)locationManager: (CLLocationManager *)manager

didUpdateHeading:(CLHeading*)newHeading{

//Use the coordinate data.

CLLocationDirection heading = newHeading.trueHeading;

CLLocationDirection magnetic = newHeading.magneticHeading;

}

Page 48: Iphone lecture  imp

Microphone

We will cover it in the audio library…

Total 67 Pages 48

Page 49: Iphone lecture  imp

Outlines

Objective-C basics

Building an Application

Sensor programming (accelerometer, GPS, microphone…)

Audio Libraries

Total 67 Pages 49

Page 50: Iphone lecture  imp

Audio Libraries

System Sound API – short sounds

AVAudioPlayer – ObjC, simple API

Audio Session - Audio Toolbox

Audio Queue - Audio Toolbox

Audio Units

OpenAL

MediaPlayer Framework

Total 67 Pages 50

Page 51: Iphone lecture  imp

AVAudioPlayer

Play longer sounds (> 5 seconds) Locally stored files or in-memory (no network

streaming) Can loop, seek, play, pause Provides metering Play multiple sounds simultaneously Cocoa-style API◦ Initialize with file URL or data◦ Allows for delegate

Supports many more formats◦ Everything the AudioFile API supports

Sample Code: avTouch

Total 67 Pages 51

Page 52: Iphone lecture  imp

AVAudioPlayer

Create from file URL or dataAVAudioPlayer *player;

NSString *path = [[NSBundle mainBundle] pathForResource:… ofType:…];NSURL *url = [NSURL fileURLWithPath:path];

player = [[AVAudioPlayer allow] initWithContentsOfURL:url];

[player prepareToPlay];

Simple methods for starting/stoppingIf(!player.playing){

[player play];

}else{

[player pause];

}

Total 67 Pages 52

Page 53: Iphone lecture  imp

Audio Sessions

Handles audio behavior at the application, inter-application, and device levels

◦ Ring/Silent switch?

◦ iPod audio continue?

◦ Headset plug / unplug?

◦ Phone call coming?

Sample Code: avTouch & aurioTouch

Total 67 Pages 53

Page 54: Iphone lecture  imp

Audio Sessions

Six audio session categories

◦ Ambient

◦ Solo Ambient (Default session)

◦ Media playback

◦ Recording

◦ Play and record

◦ Offline audio processing

Total 67 Pages 54

Page 55: Iphone lecture  imp

Audio Queue

Audio File Stream Services & Audio Queue Services

Supports wider variety of formats

Finer grained control over playback◦ Streaming audio over network

◦ Cf: AVAudioPlayer(local)

Allows queueing of consecutive buffers for seamless playback◦ Callback functions for reusing buffers

Sample code: SpeakHere

Total 67 Pages 55

Page 56: Iphone lecture  imp

Audio Units

For serious audio processing

Graph-based audio◦ Rate or format conversion

◦ Real time input/output for recording & playback

◦ Mixing multiple streams

◦ VoIP (Voice over Internet Protocol).

Very, very powerful.

Sample code: aurioTouch

Total 67 Pages 56

Page 57: Iphone lecture  imp

Audio Units

Lowest programming layer in iOS audio stack

◦ Real-time playback of synthesized sounds

◦ Low-latency I/O

◦ Specific audio unit features

Otherwise, look first at the Media Player, AV Foundation, OpenAL, or Audio Toolbox!

Total 67 Pages 57

Page 58: Iphone lecture  imp

Audio Units

Ex: Karaoke app in iPhone

◦ real-time input from mic

◦ Real-time output to speaker

◦ Audio Unit provides excellent responsiveness

◦ Audio Unit controls audio flow to do pitch tracking, voice enhancement, iPod equalization, and etc.

Total 67 Pages 58

Page 59: Iphone lecture  imp

OpenAL

High level, cross-platform API for 3D audio mixing◦ Great for games◦ Mimics OpenGL conventions

Models audio in 3D space◦ Buffers: Container for Audio◦ Sources: 3D point emitting Audio◦ Listener: Position where Sources are heard

Sample code: oalTouch

More information: http://www.openal.org/

Total 67 Pages 59

Page 60: Iphone lecture  imp

MediaPlayer Framework

Tell iPod app to play music

Access to entire music library◦ For playback, not processing

Easy access through MPMediaPickerController

Deeper access through Query APIs

Sample code: AddMusic

Total 67 Pages 60

Page 61: Iphone lecture  imp

Others

Accelerate Framework◦ C APIs for vector and matrix math, digital

signal processing large number handling, and image processing

◦ vDSP programming guide

Bonjour and NSStream

The Synthesis ToolKit in C++ (STK) and OSC

Total 67 Pages 61

Page 62: Iphone lecture  imp

More Info for Beginners

iPhone Application Programming (Standford University - iTunes University)

Dan Pilone & Tracey Pilone. Head First iPhone Development.

Total 67 Pages 62

Page 63: Iphone lecture  imp

Thank you and good luck to your final projects!

Total 67 Pages 63