0% found this document useful (0 votes)
79 views63 pages

Iphone Programming: Cs4347 Sound and Music Computing Zhou Yinsheng (Yzhou86@Comp - Nus.Edu - SG) Jan 22, 2011

This document discusses tools and techniques for iPhone programming, including Objective-C basics, building applications, and using sensors like the accelerometer. It introduces Xcode and Interface Builder for developing iPhone apps. Key topics covered include the model-view-controller pattern, the iPhone application lifecycle, getting orientation and accelerometer data, and filtering sensor readings. Sample code is provided for accessing the accelerometer to get raw 3-axis acceleration data and orientation.

Uploaded by

subhapamkundu
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
79 views63 pages

Iphone Programming: Cs4347 Sound and Music Computing Zhou Yinsheng (Yzhou86@Comp - Nus.Edu - SG) Jan 22, 2011

This document discusses tools and techniques for iPhone programming, including Objective-C basics, building applications, and using sensors like the accelerometer. It introduces Xcode and Interface Builder for developing iPhone apps. Key topics covered include the model-view-controller pattern, the iPhone application lifecycle, getting orientation and accelerometer data, and filtering sensor readings. Sample code is provided for accessing the accelerometer to get raw 3-axis acceleration data and orientation.

Uploaded by

subhapamkundu
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 63

iPhone Programming

CS4347 Sound and Music Computing Zhou Yinsheng (yzhou86@comp.nus.edu.sg) Jan 22nd, 2011

Acknowledgement: Some materials are borrowed from the course of iPhone Application Development in Stanford University.
Total 67 Pages 1

Tools to create Apps in iPhone

Xcode

Interface Builder

Mac
Instruments Simulator/device
Total 67 Pages 2

Sound and Music Computing


We use iPhone to make music! Mobile Music Group

MOGFUN MOGCLASS MOGHEALTH

Total 67 Pages

MOGCLASS

MOGCLASS DEMO

Total 67 Pages

MOGCLASS

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

Total 67 Pages

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

Today we will cover


Objective-C basics Building an Application Sensor programming (accelerometer, GPS, microphone) Audio Libraries

There are a lot of materials about iphone online. What we will cover today is more oriented for your final project.
Total 67 Pages 7

How to learn iPhone Programming


Recommended Book: None! Well 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

iPhone SDK Technology Architecture


Cocoa Touch Media
Multi-Touch Events Multi-Touch Controls Accelerometer View Hierarchy Localization Core Audio OpenAL Audio Mixing Audio Recording Video Playback Collections Address Book Networking File Access SQLite OS X Kernel Mach 3.0 BSD Sockets Security Alerts Web View People Picker Image Picker Camera JPG, PNG,TIFF PDF Quartz (2D) Core Animation OpenGL ES Core Location Net Services Threading Preference URL utilities Power Mgmt Keychain Certificates File System Bonjour Total 67 Pages 9

Core Services
Core OS

Outlines
Objective-C basics Building an Application Sensor programming (accelerometer, GPS, microphone) Audio Libraries

Total 67 Pages

10

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

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

Objective-C

Strict superset of C

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 youd like
Total 67 Pages 13

Mix C with ObjC Or even C++ with ObjC (usually referred to as ObjC++)

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

Message Syntax
[receiver message]; [receiver message:argument]; [receiver message:arg1 andArg: arg2]

Total 67 Pages

15

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

Dot Syntax
Objective-C 2.0 introduced dot syntax Convenient shorthand for invoking accessor methods

float 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

Dynamic and static typing

Dynamically-typed object
id anObject

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

Statically-typed object
Person *anObject

Objective-C provides compile-time, not runtime, type checking Objective-C always uses dynamic binding
Total 67 Pages 18

Selectors identify methods by name

A selector has type SEL


SEL 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

Working with selectors

You can determine if an object responds to a given selector


id 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

Working with Classes

You can ask an object about its class


Class 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

Working with Objects


Identity v.s. Equality Identitytesting equality of the pointer values

if (object1 == object2) { NSLog(@"Same exact object instance"); }

Equalitytesting object attributes


if ([object1 isEqual: object2]) { NSLog(@"Logically equivalent, but may be different object instances"); }

Total 67 Pages

22

-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 objects description with:


NSLog([anObject description]);

Your custom subclasses can override description to return more specific information
Total 67 Pages 23

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

More OOP Info


Tons of books and articles on OOP Objective-C 2.0 Programming Language

Total 67 Pages

25

Outlines
Objective-C basics Building an Application Sensor programming (accelerometer, GPS, microphone) Audio Libraries

Total 67 Pages

26

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

App Lifecycle

Total 67 Pages

28

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

Model-View-Controller

Total 67 Pages

30

Communication and MVC

Total 67 Pages

31

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

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

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

Outlines
Objective-C basics Building an Application Sensor programming (accelerometer, GPS, microphone, ) Audio Libraries

Total 67 Pages

35

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

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

Shake Undo!

UIEvent type
@property(readonly) UIEventType type; @property(readonly) UIEventSubtype subtype; UIEventTypeMotion UIEventSubtypeMotionShake

Total 67 Pages

38

Getting raw Accelerometer Data


3-axis data Configurable update frequency (10-100Hz) Sample Code (AccelerometerGraph)

Class
UIAccelerometer UIAcceleration

Protocol
UIAccelerometerDelegate
Total 67 Pages 39

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

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

Filtering Accelerometer Data

Total 67 Pages

42

Filtering Accelerometer Data

Total 67 Pages

43

Applying Filters

Simple low-pass filter example

#define FILTERFACTOR 0.1 Value = (newAcceleration * FILTERFACTOR) + (previousValue * (1.0 FILTERFACTOR)); previousValue = value;

Simple high-pass filter example

lowpassValue = (newAcceleration * FILTERFACTOR) + (previousValue * (1.0 FILTERFACTOR)); previousLowPassValue = lowPassValue; highPassValue = newAcceleration lowPassValue;

Total 67 Pages

44

GPS

Classes
CLLocationManager CLLocation

Protocol
CLLocationManagerDelegate
Total 67 Pages 45

Getting a Location

Starting the location service

-(void)initLocationManager{ CLLocationManager* locManager = [[CLLocationManager alloc] init]; locManager.delegate = self; [locManager startUpdatingLocation]; }

Using the event data

-(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; }
Total 67 Pages 46

Getting a Heading

Geographic North
CLLocationDirection trueHeading

Magnetic North
CLLocationDirection magneticHeading

-(void)locationManager: (CLLocationManager *)manager didUpdateHeading:(CLHeading*)newHeading{ //Use the coordinate data. CLLocationDirection heading = newHeading.trueHeading; CLLocationDirection magnetic = newHeading.magneticHeading; }

Total 67 Pages

47

Microphone

We will cover it in the audio library

Total 67 Pages

48

Outlines
Objective-C basics Building an Application Sensor programming (accelerometer, GPS, microphone) Audio Libraries

Total 67 Pages

49

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

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


Sample Code: avTouch

Everything the AudioFile API supports

Total 67 Pages

51

AVAudioPlayer

Create from file URL or data

AVAudioPlayer *player; NSString *path = [[NSBundle mainBundle] pathForResource: ofType:]; NSURL *url = [NSURL fileURLWithPath:path]; player = [[AVAudioPlayer allow] initWithContentsOfURL:url]; [player prepareToPlay];

Simple methods for starting/stopping

If(!player.playing){ [player play]; }else{ [player pause]; }

Total 67 Pages

52

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

Audio Sessions

Six audio session categories


Ambient Solo Ambient (Default session) Media playback Recording Play and record Offline audio processing

Total 67 Pages

54

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

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

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

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

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

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

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

More Info for Beginners


iPhone Application Programming (Standford University - iTunes University) Dan Pilone & Tracey Pilone. Head First iPhone Development.

Total 67 Pages

62

Thank you and good luck to your final projects!

Total 67 Pages

63

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy