Beruflich Dokumente
Kultur Dokumente
Media
Lecture #17 –!Chuck Pisula
This Week’s Topics
• Audio & Video
3
CoreAudio
• High level, easy to use
4
Audio
Short Sounds
5
Playing Short Sounds
#import <AudioToolbox/AudioToolbox.h>
· No looping
· No volume control
· Immediate playback
· Limited set of formats –!Linear PCM / IMA4; .caf, .aif, .wav files
·/usr/bin/afconvert can convert to System Sound formats
6
Playing Short Sounds
• Two step process
7
Playing Short Sounds
• Clean up
8
Feel The Vibration
• System sound API allows for triggering the phone’s vibration
9
Converting Sounds
• Command line utility to convert sounds
/usr/bin/afconvert
10
Audio
AVFoundation APIs
11
AVAudioPlayer
• Play longer sounds (> 5 seconds)
• Provides metering
• Cocoa-style API
12
AVAudioPlayer
• Create from file URL or data
AVAudioPlayer *player;
if (!player.playing) {
[player play];
} else {
[player pause];
}
13
AVAudioPlayerDelegate
• Told when playback finishes
14
AVAudioSession
• Session –!audio context for your application
15
AVAudioSession
• Session –!audio context for your application
15
Audio Categories
• Ambient sound
16
Default Sessions
• Apps get default session which will
· mute other sounds when you play yours (e.g. iPod audio)
· respect the ring/silent switch
· mute audio when user locks device
• Use AVAudioSession to change any settings (AVFoundation)
AVAudioSession *session = [AVAudioSession sharedInstance];
17
AVAudioRecorder
• Very simple interface for recording audio
- (void)audioRecorderDidFinishRecording:(AVAudioRecorder *)recorder
successfully:(BOOL)flag
{
if (successful) {
NSLog(@”recorded file: %@”, [recorder url]);
}
}
18
Demo
Audio
19
Audio
Advanced APIs
20
Audio Toolbox
• Audio File Stream Services & Audio Queue Services
21
Audio Units
• For serious audio applications
· Rate conversion
· Audio Effects
· Mix multiple audio streams
• Very powerful
22
OpenAL
• High level, cross-platform API for 3D audio mixing
23
Media Player Framework
24
MediaPlayer Framework
• General media related functionality
25
iPod Library Access
26
IPod Library Access
#import <MediaPlayer/MediaPlayer.framework>
27
IPod Library Access
28
Media Library
• MPMediaLibrary represents media on a device
29
Library Change Notification
• MPMediaLibraryDidChangeNotification
·Represents a track
·Song, Podcast Episode, Audiobook, etc...
• MPMediaItemArtwork
31
Media Items
• MPMediaItem
·Example:
MPMediaItem *item = ...;
NSString *title = [item valueForProperty:MPMediaItemPropertyTitle];
32
Media Item Properties
• Track Information
·star rating
·last played date, play / skip count
33
Media Item Artwork
• Represents the album cover
- (CGRect)bounds;
34
Media Item Artwork
• Represents the album cover
- (CGRect)imageCropRect;
35
Media Item Collection
• MPMediaItemCollection represents a grouping of media items
36
Media Playlist
• MPMediaPlaylist represents a playlist made by the user
·A subclass of MPMediaItemCollection
• Properties accessed using -(id)valueForProperty:(NSString *)propKey;
·name
·persistent ID
·Types - smart, genius, on the go
·Seed items –!those items a genius playlist is based-on
37
Media Picker
• Standard UI for letting a user choose media items from the iPod
• Simple to use
38
Using The Media Picker
• Create and configure
MPMediaType pickedTypes = MPMediaTypeMusic;
picker = [[MPMediaPickerController alloc] initWithMediaTypes: pickedTypes];
• Media Types
MPMediaType pickedTypes = MPMediaTypeMusic | MPMediaTypePodcast;
39
Using The Media Picker
40
Using The Media Picker
• Delegate – informed of user’s selection
41
Media Query
• MPMediaQuery provides direct access to items and collections
· “ music items whose genre is ‘Hip Hop’ and artist contains ‘Dr’ ”
· “ collections as albums whose artist contains ‘Dave’ ”
• Convenience API for standard criteria
42
Using Custom Queries
• Provide filter predicates
43
Predicates
• Creating predicates
[MPMediaPropertyPredicate predicateWithValue:[NSNumber numberWithInt:MPMediaTypeMusic]
forProperty:MPMediaItemPropertyMediaType];
· Check documentation
· Or check + (BOOL)canFilterByProperty:(NSString *)property;
44
Example Query
• Find All “Hip Hop” albums
MPMediaQuery *q = [[MPMediaQuery alloc] init];
[q addFilterPredicate: /* media type is “music” */];
[q addFilterPredicate: /* genre == “Hip Hop” */];
[q addFilterPredicate: /* artist contains “Dr” */];
[q setGroupingType: MPMediaGroupingAlbum];
45
Example Query
• All “Hip Hop” albums
MPMediaQuery *q = [[MPMediaQuery alloc] init];
[q addFilterPredicate: /* media type is “music” */];
[q addFilterPredicate: /* genre == “Hip Hop” */];
[q addFilterPredicate: /* artist contains “Dr” */];
[q setGroupingType: MPMediaGroupingAlbum];
46
Example Query
• Find all music in “Best Of” albums
MPMediaQuery *q = [[MPMediaQuery alloc] init];
[q addFilterPredicate: /* media type is “music” */];
[q addFilterPredicate: /* album title contains “Best Of” */];
47
Pre–Configured Queries
// All music; ordered by title
+ (MPMediaQuery *)songsQuery;
// Others...
+ (MPMediaQuery *)podcastsQuery;
+ (MPMediaQuery *)audiobooksQuery;
+ (MPMediaQuery *)composersQuery;
+ (MPMediaQuery *)compilationsQuery;
48
Playing IPod Content
• Use MPMusicPlayerController
• Playback queue
• Playback information
49
Example Query
• Play All “Hip Hop” songs in random order
• Step 2 –!play
MPMusicPlaybackController *player = [MPMusicPlaybackController applicationMusicPlayer];
[player pause];
[player setRepeatMode:MPMusicShuffleModeSongs];
[player setQueueWithQuery:q];
[player play];
• There’s no step 3!
50
Demo
Music Search
51
Video
52
Playing Video
• MPMoviePlayerController
53
MPMoviePlayerController
- (id)initWithContentURL:(NSURL *)url;
- (void)play;
- (void)stop;
• Properties include
55