270 likes | 397 Views
Techniken: iPhone Multimedia. Universität zu Köln Re-usable Content in 3D Johannes Döhrn SS 2012. Inhalt. Audio SystemSounds AVAudioPlayer Audioaufnahme AudioToolbox Video MediaPlayer Videoaufnahme MediaKit Filme auswählen und bearbeiten MPMediaPickerController
E N D
Techniken: iPhone Multimedia Universität zu Köln Re-usable Content in 3D Johannes Döhrn SS 2012
Inhalt • Audio • SystemSounds • AVAudioPlayer • Audioaufnahme • AudioToolbox • Video • MediaPlayer • Videoaufnahme • MediaKit • Filme auswählen und bearbeiten • MPMediaPickerController • MPMusicPlayerController
Audio • Gebrauch in Applications • Soundeffekte (Klicks, Warnungen, andere kurze Sounds) • Musik, Podcasts, Hörbücher etc. • Streams aus dem Internet • Aufgenommene Audioinhalte
Audio • CoreAudio: • Einfacher Gebrauch: • System Sound API – kurze Soundgeräusche • AVAudioPlayer – ObjC, simple API • Komplex, aber mit besseren ‚Controls‘: • AudioToolbox – aufnehmen und abspielen, Streaming • AudioUnits – komplexe Audio-Plug-Ins zum Bearbeiten von Audio-Dateien (Filterung, Hall, Sampling, MIDI-basierte Synthesizer etc.) • OpenAL – 3D Sound (z.B. bei Ego-Shootern)
Xcode: Vor dem Start… • Disable Automatic Reference Counting (ARC) • Project/Build Settings/Levels -> in die Suchleiste ‚automatic‘ eingeben/ARC von ‚YES‘ auf ‚NO‘ • Frameworks hinzufügen: • - Project Navigator / Project / Build Phases / Link Binary With Libraries –> Add (+) -> AVFoundation.framework; AudioToolbox.framwork; MediaPlayer.framework
Audio • System Sound API • Kurze Soundgeräusche (> 5 sec) • Sehr simple API, aber • Keine Schleifenwiedergabe • Keine Handhabung der Lautstärke • Umgehendes Playback • Nur wenige unterstützte Formate • Linear PCM oder IMA4 • .caf-, .aif-, oder .wav-Dateien • Code: • NSURL *dateiURL = ... // url zu der Datei • SystemSoundID myID; • // Sound initialisieren • AudioServicesCreateSystemSoundID ((CFURLRef)dateiURL, &myID); • // Dann abspielen • AudioServicesPlaySystemSound (myID);
Audio • System Sound API • Aufräumen: • Wenn abgespielt oder eine Warnung auftritt, abbrechen • Code: • SystemSoundID myID; • //abbrechen des zuvor initialisierten Sounds • AudioServicesDisposeSystemSoundID (myID); • Vibration • Erlaubt das Auslösen der Vibration • - (void) vibrate { • AudioServicesPlaySystemSound (kSystemSoundID_Vibrate); • }
Audio • AVAudioPlayer • Ermöglicht das Abspielen längerer Sounds • Lokal gespeicherte Daten (kein Streaming) • Ermöglicht Schleifenwiedergabe, bestimmen und wählen der Wiedergabeposition, Play, Pause • Audiopegel können überwacht werden • Gleichzeitige Wiedergabe mehrerer Sound-Daten • Cocoa-basiertes Interface • Initialisierung über Datei-URL oder Daten • Ermöglicht die Delegation zwischen Objekten • Unterstützt viele Audio-Formate
Audio • AVAudioPlayer: • Initialisierung • self.player= [[AVAudioPlayeralloc] initWithContentsOfURL:[NSURL fileURLWithPath:self.path] error:&error]; • if(!self.player) • { • NSLog(@"Error: %@", [errorlocalizedDescription]); • returnNO; • } • Einfache Methoden zum Starten/Stoppen • If (!self.player.playing) { • [self.playerplay]; • } else { • [self.player pause]; • }
Audio • AVAudioPlayer: • Vorbereitung des Players, um mit der Wiedergabe beginnen zu können • [self.player prepareToPlay] • Vollständiges Beenden der Wiedergabe durch self.player stop • Audiopegel: • Einrichten der Eigenschaft meteringEnabled = YES; • Aktualisierung der Pegelstände durch updateMeters -> ablesen der Stände durch peakPowerForChannel und averagePowerForChannel • Die Lautstärke wird mit der Eigenschaft volume ermittelt • - (void) setVolume: (id) sender //Anpassung der Lautstärke bei Betätigung des Reglers • { • if (self.player) self.player.volume = volumeSlider.value; • }
Audio • AVAudioPlayer: • Wiedergabeposition bestimmen und wählen • Eigenschaften currentTime und duration • self.player.currentTime = scrubber.value * self.player.duration; // Positionswahl durch UISlider • Nach Ende der Bewegung des Slider, wird Wiedergabe an der gewählten Position wieder aufgenommen • - (void) scrubbingDone: (id) sender • { • [self play:nil]; • } • Ende der Wiedergabe • Delegierungs-Callback audioPlayerDidFinishPlaying:successfully • Bsp. • https://github.com/erica/iphone-3.0-cookbook-/tree/b8ca8905d17015839a0917e1dcd407d055890236/C15-Media/01-Play%20Audio
Audio • Schleifenwiedergabe: • Ermöglicht das Gestalten von Hintergrundgeräuschen, durch Schleifenwiedergabe (self.player setNumberOfLoops) • Fading-Effekt • https://github.com/erica/iphone-3.0-cookbook-/tree/b8ca8905d17015839a0917e1dcd407d055890236/C15-Media/02-Audio%20Loop • Unterbrechungen: • z.B. bei Eingang eines Telefonats, Gerät übernimmt • Audiositzung wird deaktiviert (audioPlayerBeginInteruption) • Wird das Telefonat abgelehnt oder endet, bevor der Benutzer antworten konnte, wird die Wiedergabe wieder aufgenommen (audioPlayerEndInteruption) • Die Aktuelle Abspielposition kann gespeichert werden • https://github.com/erica/iphone-3.0-cookbook-/tree/b8ca8905d17015839a0917e1dcd407d055890236/C15-Media/03-Audio%20Interruptions
Audio • Audioaufnahme: • Einrichtung einer AVAudioSession • Verwenden einer Aufnahmesitzung (AVAudioSessionCategoryRecord) o. Wiedergabe- und Aufnahme (AVAudioSessionCategoryPlayAndRecord) • Aufnahme • Aufnahmeeinstellungen, die beschreiben, wie die Aufnahme erfasst werden soll • z.B. AudioFormat, Sample-Rate (Abtastvorgänge), Kanäle (mono, stereo) etc. • Initialisierung des zugewiesenen Recorders durch Datei-URL und Dictionary • Initialisierung der Delegierung, Pegelmessung etc. • Einrichten eines Timers zur Beobachtung der Pegel und der Aufnahmeposition
Audio • Audioaufnahme: • Audiometer (updateMeters) funktioniert wie beim AVAudioPlayer • Durch stopRecording wird audioRecorderDidFinishRecording:successfully ausgelöst und die Oberfläche für die Wiedergabe bereitgemacht • Bsp. • https://github.com/erica/iphone-3.0-cookbook-/tree/b8ca8905d17015839a0917e1dcd407d055890236/C15-Media/05-Record%20Audio
Audio • AudioToolbox: • - Audio File Stream Services & Audio Queue Services • Unterstützt eine größere Anzahl von Formaten • Bessere Kontrolle über die Wiedergabe • z.B. Streaming von Audio über ein Netzwerk • Queue: • Ermöglicht die Aneinanderreihung von Audio-Dateien in einer Warteschlange • Spezifiziert, welcher Song wann gespielt werden soll • Bsp. iPod (Playlist) • Ermöglicht Aufnahme • Leistungsfähige, systemnahe, aufwendige Audioroutinen
Audio • Audioaufnahme: • Erstelle eine Queue • Definiere eine callback-Funktion um das Aufgenommene zu erhalten • Starte die Queue • Speicherung der erhaltenen Daten • Beende die Queue • Bsp: • ‚SpeakHere‘ (iOSDev Center) • https://github.com/erica/iphone-3.0-cookbook-/blob/b8ca8905d17015839a0917e1dcd407d055890236/C15-Media/06-AudioQueue%20Recording
Video • Gebrauch von Video: • Szenische Animationen in einem Spiel • Stream-Inhalte aus dem Internet • Abspielen lokaler Videos • MediaPlayer: • Abspielen von Videos über application bundle oder URL • Player immer ‚Full Screen‘ • Maßstab kann konfiguriert werden • Optionale controls • Unterstützt: • .mov, .mp4, .m4v, .3gp • Bsp. • https://github.com/erica/iphone-3.0-cookbook-/tree/b8ca8905d17015839a0917e1dcd407d055890236/C15-Media/07-OffsiteVideo
Video • MPMoviePlayerController: • Gehört zum Framework ‚MediaPlayer‘ • (id)initWithContentURL:(NSURL *)url; • (void)play; • (void)stop; • Eigenschaften: • backgroundColor (u.a. clear) • scalingMode – aspect fit, aspect fill, fill, no scaling • movieControlMode – default, volume only, hidden • Notifikationen: • MPMoviePlayerPlaybackDidFinishNotification (bei Ende der Wiedergabe oder ‚Done‘) • Video ist bereit zu starten • Änderungen des Maßstabs
Video • Videoaufnahme: • Überprüfung, ob Kamera vorhanden • - (BOOL) videoRecordingAvailable • { • if (![UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) return NO; • return [[UIImagePickerController availableMediaTypesForSourceType:UIImagePickerControllerSourceTypeCamera] containsObject:@"public.movie"]; • } • Videoaufzeichnung ähnelt Aufnahme von Einzelbildern • Zuweisung und Initialisierung eines Bild-Pickers • Einrichtung seiner Delegierung • Auswahl, ob Bearbeitung und Darstellung
Video • Videoaufnahme: • Festlegung von Eigenschaften im Videorecorder: • Bildqualität (ipc.videoQuality) • Maximale Filmdauer in Sekunden (ipc.videoMaximumDuration) • Medientyp-Array: eine Liste mit dem Objekt public.movie • Eventuell auch public.image, um zwischen Video und Bild zu wechseln • - (void) recordVideo: (id) sender { • UIImagePickerController *ipc = [[UIImagePickerController alloc] init]; • ipc.sourceType = UIImagePickerControllerSourceTypeCamera; • ipc.delegate = self; • ipc.allowsEditing = YES; • ipc.videoQuality = UIImagePickerControllerQualityTypeMedium; • ipc.videoMaximumDuration = 30.0f; // 30 seconds • ipc.mediaTypes = [NSArray arrayWithObject:@"public.movie"]; • // ipc.mediaTypes = [NSArray arrayWithObjects:@"public.movie", @"public.image", nil]; • [self presentModalViewController:ipc animated:YES]; • }
Video • Videoaufnahme: • Speicherung: • didFinishSavingWithErrorüberprüft, ob Fehler vorhanden • Falls nicht, kann die Datei mit der Funktion UISaveVideoAtPathToSavedPhotosAlbum() gespeichert werden. • Bsp: • https://github.com/erica/iphone-3.0-cookbook-/blob/b8ca8905d17015839a0917e1dcd407d055890236/C15-Media/08-RecordingVideo
Video • Auswählen und Bearbeiten: • Erstellung eines reinen Video-Pickers (s. Videorecorder) • Überprüfung, ob das Video bearbeitet werden kann (Methode canEditVideoAtPathder Klasse UIVideoEditorController) • Wenn ja, neuer Editor weist Eigenschaften delegate und videoPath zu • Callbacks zum Handhaben für den Erfolg / Fehlschlag des Vorgangs oder den Abbruch durch den Benutzer • Nach Beendigung der Bearbeitung, Speicherung (videoEditorController:didSaveEditedVideoToPath) • Bsp: • https://github.com/erica/iphone-3.0-cookbook-/tree/b8ca8905d17015839a0917e1dcd407d055890236/C15-Media/09-Editing%20Video
Audioauswahl • MPMediaPickerController: • Ermöglicht Auswahl von Elementen, wie Musikstücke, Podcasts und Hörbüchern aus der Musikbibliothek • Oberfläche im iPod-Stil (z.B. Durchsuchen von Wiedergabelisten, Listen von Künstlern und Songs, Alben etc.) • Erstellung eines neuen Pickers; Initialisierung mit gewünschtem Medientyp (MPMediaTypeMusic, MPMediaTypePodcast, _Audio, _AnyAudio, _Any) • MPMediaPickerController *mpc = [[MPMediaPickerControlleralloc] initWithMediaTypes:MPMediaTypeMusic]; • mpc.delegate = self; • mpc.prompt = @"Pleaseselect an item"; • mpc.allowsPickingMultipleItems = YES; • [selfpresentModalViewController:mpcanimated:YES];
Audioauswahl • MPMediaPickerController: • Benutzerauswahl abschließen: • Callback mediaPicker:didPickMediaItems • Instanz MPMediaItemCollection: • Kann durch Zugriff auf ihre Elemente aufgelistet werden. • Jedes Element (Item) ist ein Member der Klasse MPMediaItem • Eigenschaften (Property) von MPMediaItem können abgefragt werden (z.B. MPMediaItemPropertyTitle, MPMediaItemPropertyArtist etc.) • Bsp. • https://github.com/erica/iphone-3.0-cookbook-/tree/b8ca8905d17015839a0917e1dcd407d055890236/C15-Media/10-Media%20Picker
Medienabfragen • MPMediaQuery: • Filterung der Inhalte einer iPod-Bibliothek und Einschränkung des Suchbereichs • 9 vordefinierte Suchvorgänge (z.B. albumsQuery, artistsQuery) • Dazugehörige Gruppierungstypen legen die Gliederung der zurückgegebenen Daten fest (z.B. MPMediaGroupingAlbum) • Beispiel einer Abfrage (hier: Anzahl der Alben) • MPMediaQuery *query = [MPMediaQuery albumsQuery]; • NSArray *collections = query.collections; • NSLog(@"You have %d albums in your library\n", collections.count); • Prädikate: • Prädikate aus Medieneigenschaften filtern die zurückgegebenen Elemente • Bsp. • https://github.com/erica/iphone-3.0-cookbook-/tree/b8ca8905d17015839a0917e1dcd407d055890236/C15-Media/11-Media%20Query
Audio • MPMusicPlayerController: • Ein weiterer komplexer Musik-Player für Musiksammlungen • Veröffentlicht optionale Benachrichtigungen, wenn sich der Wiedergabestatus ändert • Ermöglicht zufällige Reihenfolge bei Wiedergabe (Eigenschaft shuffleMode); Wiederholungsmodus (repeatMode) • Ermöglicht das Anzeigen von Grafiken aus einem Album (MPMediaItemArtwork) • Bsp. • https://github.com/erica/iphone-3.0-cookbook-/tree/b8ca8905d17015839a0917e1dcd407d055890236/C15-Media/12-Pick%20and%20Play
Quellen • Sadun, Erica: Das große iPhone Entwicklerbuch. München 2010. • Codes: http://github.com/erica/iphone-3.0-cookbook- • ‚Audio APIs, Video Playback, Displaying Web Content, Settings‘, von Alan Cannistraro (Stanford University) http://www.youtube.com/watch?v=vTFT0G11VfY • ‚Speak Here‘, iOS Developer Library. https://developer.apple.com/library/ios/#samplecode/SpeakHere/Introduction/Intro.html#//apple_ref/doc/uid/DTS40007802