View
219
Download
0
Category
Preview:
Citation preview
Processamento audio e videosu piattaforme Android
Un seminario per Laboratorio per l’Elaborazione Multimediale
Ing. Simone SCARDAPANE
Anno Accademico 2014/2015
Parte 1
1. (Brevissima) Introduzione ad Android
2. Fondamenti di OOP
3. Programmare su Android
4. Processamento Audio
5. Processamento Video
29/05/2015
2
Processamento audio e videosu piattaforme Android
Cos’è Android?
Android è un sistema operativo open-source, disponibile perpiattaforme mobile dotate di touch-screen. E’ sviluppato da Google incollaborazione con il consorzio Open Handset Alliance.
Rilasciato per la prima volta nel 2007, è oggi il primo OS persmartphone:
1. 78% dello share complessivo di mercato (75% nel 2012).
2. 1,5 milioni di attivazioni al giorno (1,3 nel 2012).
3. Oltre 1,5M applicazioni già disponibili (700K nel 2012).
(Dati relativi al primo trimestre del 2015)
29/05/2015
3
Processamento audio e videosu piattaforme Android
Versioni
Una prima sfida alla programmazione su Android è data dalla presenza dinumerose versioni in commercio:
29/05/2015
4
Processamento audio e videosu piattaforme Android
Versione Codename %
4.1-4.3 Jelly Bean 39,2%
4.4 KitKat 39,8%
5.0-5.1 Lollipop 9,7%
…
http://developer.android.com/about/dashboards/index.html
Device Android
Altre problematiche da affrontare sono date dall’eterogeneità deidispositivi che sfruttano Android:
1. Grandezza dello schermo (generalmente suddivisa in quattroformati).
2. Densità dello schermo.
3. Presenza di sensoristica varia (GPS, Bluetooth…)
4. Presenza di una/due fotocamere.
5. Capacità di calcolo estremamente varie.
6. Possibilità di disconnessione dalla rete.
7. …
29/05/2015
5
Processamento audio e videosu piattaforme Android
Ulteriori Sfide
L’esempio della disconnessione dalla rete è solo uno degli innumerevolieventi che possono «spezzare» il flusso di una app:
1. L’utente riceve una chiamata.
2. Viene premuto il tasto Home.
3. Un servizio viene chiuso da un task manager.
4. Cambia l’orientamento del device.
5. …
A differenza che nel più familiare caso di applicazione desktop, lamaggior parte di questi eventi va gestita esplicitamente.
29/05/2015
6
Processamento audio e videosu piattaforme Android
Il mercato di Android
29/05/2015
7
Processamento audio e videosu piattaforme Android
Piattaforma di distribuzione per contenuti vari, tra cui (a seconda del paese):
1. Musica (Play Music),2. Libri (Play Books),3. Applicazioni (Play Store),4. Magazine, Film, Device…
Sono richiesti 25$ all’anno per poter esporre app sullo Store. Ogni app viene prima soggetta ad approvazione delle linee guida.
Se l’app è a pagamento, si ottengono il 70% dei ricavi. E’ possibile inserirepubblicità tramite il servizio Google AdMob, che vengono pagate a clickeffettuati.
Parte 2
1. (Brevissima) Introduzione ad Android
2. Fondamenti di OOP
3. Programmare su Android
4. Processamento Audio
5. Processamento Video
29/05/2015
8
Processamento audio e videosu piattaforme Android
Classi ed Oggetti
Una classe è un costrutto di programmazione che contiene al suointerno (tra gli altri) una serie di campi e di metodi:
class Point{
public int x;
public int y;
public double getDistance(){
return Math.sqrt(this.x*this.x + this.y*this.y);
}
}
Un oggetto è un’istanza di tale classe all’interno del codice:
Point myPoint;
...
int dist = myPoint.getDistance();
29/05/2015
9
Processamento audio e videosu piattaforme Android
Ereditarietà
E’ possibile per una classe ereditare (ed estendere) campi e metodi dauna classe base:
class Rectangle{
...
double getPerimeter(){ ... };
}
class Square extends Rectangle { ... }
La classe Square possiede automaticamente i metodi definiti in Rectangle:
Square mySquare;
...
double p = mySquare.getPerimeter();
29/05/2015
10
Processamento audio e videosu piattaforme Android
Interfacce
E’ anche possibile definire un’interfaccia che una classe deve rispettare:
interface Listenable {
void listen();
}
Qualsiasi classe che implementi l’interfaccia deve definire i metodi contenuti nell’interfaccia:
class Song implements Listenable{
void listen() { ... }
}
29/05/2015
11
Processamento audio e videosu piattaforme Android
Packages
Tutti questi concetti (e molti altri), se bene usati, permettono disviluppare codice che sia allo stesso tempo (tra gli altri):
1. Facilmente comprensibile,
2. Estendibile in futuro,
3. Estremamente riusabile.
Ad esempio, possiamo riunire fra loro un insieme di classi ed interfaccecollegate da utilizzare ovunque siano necessarie le funzionalità da essesvolte. Tali insiemi in Java vengono detti «packages» e possono essereimportati all’interno del codice:
import MyPackage;
29/05/2015
12
Processamento audio e videosu piattaforme Android
SDK
Ogni framework sufficientemente complesso mette a disposizione degliutenti un kit di sviluppo software (SDK), che contiene di solito:
1. Un insieme di package per interfacciarsi con le varie funzionalitàdel framework stesso.
2. Strumenti vari di sviluppo, ad esempio per la scrittura del codiceo per il suo corretto debug.
3. Una serie di manuali e/o esempi di sviluppo.
La specifica dell’interfaccia da utilizzare per dialogare con il frameworkviene detta application programming interface (API).
Nel seguito, vedremo proprio cosa mette a disposizione Android e comeè possibile sfruttarlo per sviluppare applicazioni.
29/05/2015
13
Processamento audio e videosu piattaforme Android
Parte 3
1. (Brevissima) Introduzione ad Android
2. Fondamenti di OOP
3. Programmare su Android
4. Processamento Audio
5. Processamento Video
29/05/2015
14
Processamento audio e videosu piattaforme Android
Android ADT Bundle
Sul sito ufficiale per gli sviluppatori Android è possibile scaricare l’ADTbundle:
http://developer.android.com/sdk/index.html
Questi contiene una serie di strumenti per lo sviluppo di applicazioniAndroid:
1. Android Studio.
2. Android SDK e AVD manager.
3. Tools vari di sviluppo.
E’ anche possibile sviluppare utilizzando un IDE di propria sceltascaricando separatamente i vari pacchetti.
29/05/2015
15
Processamento audio e videosu piattaforme Android
Android Studio è un ambiente di sviluppo progettato da Google persviluppare su piattaforma Android, rilasciato stabilmente a Dicembre 2014.
In precedenza, veniva fornito Eclipse con un plugin sviluppatoappositamente. Android studio permette (tra le altre cose):
1. La creazione rapida di progetti Android.2. La propotipazione grafica dei propri progetti.3. Una gestione efficace delle risorse progettuali.
Android Studio
29/05/2015
16
Processamento audio e videosu piattaforme Android
Android SDK Manager
29/05/2015
17
Processamento audio e videosu piattaforme Android
Android AVD Manager
29/05/2015
18
Processamento audio e videosu piattaforme Android
Componenti Principali
29/05/2015
19
Processamento audio e videosu piattaforme Android
Vediamo ora alcuni concetti fondamentali legati allo sviluppo Android,inclusi:
1. Attività, layout delle attività e loro lifecycle.2. Intenti (impliciti ed espliciti).3. Dichiarazione del manifesto.4. Creazione di un progetto su Eclipse.
Toccheremo solo rapidamente molti punti. Per approfondire la maggiorparte, è possibile seguire il training di Android:
http://developer.android.com/training/
O la guida più dettagliata:
http://developer.android.com/guide/
Attività
29/05/2015
20
Processamento audio e videosu piattaforme Android
Un’attività è un componente dotato di interfaccia con cui l’utente puòinteragire. Un’applicazione si compone tipicamente di diverse attivitàche vengono richiamate a seconda delle azioni dell’utente.
La navigazione tra attività si puòimplementare in diversi modi:
• La pressione del tasto Back suldevice riporta alla schermata padre.
• E’ possibile rispondere a determinatigesti (swypes) sullo schermo.
• Si può impostare un layout a tabs.
XML associato all’Attività
29/05/2015
21
Processamento audio e videosu piattaforme Android
Il layout secondo cui sono disposti i componenti è salvato all’interno diun file xml direttamente modificabile dall’utente:
Risorse
29/05/2015
22
Processamento audio e videosu piattaforme Android
Tutte le risorse dell’applicazione sono salvate in una serie di file xml, es.stringhe, numeri e così via.
A ciascuna di esse è associato un ID che permette di richiamarleall’interno del proprio codice:
R.<resource_type>.<resource_name>
O di un file xml:
@[<package_name>:]<resource_type>/<resource_name>
Classe dell’attività
29/05/2015
23
Processamento audio e videosu piattaforme Android
Ovviamente ogni classe ha associato una classe in cui viene dichiarato ilsuo comportamento:
Lifecycle
29/05/2015
24
Processamento audio e videosu piattaforme Android
Intenti
29/05/2015
25
Processamento audio e videosu piattaforme Android
Le attività (così come altri componenti che non vediamo, tra cui i servizi)vengono attivate all’arrivo di un oggetto di tipo Intento, che permette lacomunicazione fra attività diverse.
Attività 1 Attività 2
Intento esplicito
Attività 1
Intento implicito
?
Intenti /2
29/05/2015
26
Processamento audio e videosu piattaforme Android
1) Dichiarazione di un intento esplicito:
2) Ricezione ed utilizzo dell’intento:
Manifesto
29/05/2015
27
Processamento audio e videosu piattaforme Android
Nuovo progetto su Eclipse
29/05/2015
28
Processamento audio e videosu piattaforme Android
La struttura del progetto
29/05/2015
29
Processamento audio e videosu piattaforme Android
Parte 4
1. (Brevissima) Introduzione ad Android
2. Fondamenti di OOP
3. Programmare su Android
4. Processamento Audio
5. Processamento Video
29/05/2015
30
Processamento audio e videosu piattaforme Android
Stream musicali e volume
29/05/2015
31
Processamento audio e videosu piattaforme Android
• Android organizza i suoni in un insieme di streams audio, a ciascunodei quali è associato un diverso volume.
• Quando l’utente alza o abbassa il volume, viene modificato il volumedello stream attivo.
• Una prima esigenza è quindi quella di identificare quale sia lo streamdella vostra applicazione, e selezionarlo come attivo all’avvio:
setVolumeControlStream(AudioManager.STREAM_MUSIC);
Per approfondire:http://developer.android.com/training/managing-audio/volume-playback.html
Audio focus
29/05/2015
32
Processamento audio e videosu piattaforme Android
A ciascuno stream è associato un focus, che determina qualeapplicazione può utilizzarlo per riprodurre audio. Vediamo comeottenerlo.
1. La classe AudioManager ci permette di gestire i vari stream audio:
AudioManager am =
mContext.getSystemService(Context.AUDIO_SERVICE);
2. Richiediamo il focus:
int result =
am.requestAudioFocus(afChangeListener, AudioManager.STREA
M_MUSIC, AudioManager.AUDIOFOCUS_GAIN);
3. Verifichiamo di averlo ottenuto:
if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED)
{ … }
Audio focus /2
29/05/2015
33
Processamento audio e videosu piattaforme Android
Analizziamo i parametri del metodo requestAudioFocus:
am.requestAudioFocus(afChangeListener, AudioManager.STREAM_M
USIC, AudioManager.AUDIOFOCUS_GAIN);
1. Cominciamo dal secondo: si tratta dello stream di cui voleteottenere il focus.
2. Il terzo parametro è la modalità con cui volete il focus:
1.AUDIOFOCUS_GAIN per un focus di durata sconosciuta.2.AUDIOFOCUS_GAIN_TRANSIENT per un focus di durata
breve.3.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK per un focus
di durata breve, nel quale l’app che ha correntemente il focuspuò limitarsi ad abbassare il volume.
http://developer.android.com/training/managing-audio/audio-focus.html
Audio focus /3
29/05/2015
34
Processamento audio e videosu piattaforme Android
Il primo parametro è l’oggetto che deve essere avvisato al successivocambio di focus.
Come funziona?
1. La vostra classe che riproduce i suoni implementa l’interfaccia OnAudioFocusChangeListener.
2. Questa definisce un metodo che l’AudioManager richiamerà e che la classe deve implementare: onAudioFocusChange(intfocusChange).
Questa è una tecnica molto generale, implementata in tutti i casi in cuiuna classe deve essere richiamata al verificarsi di un dato evento.
E’ possibile definire un listener anche in una seconda maniera, dettadichiarazione anonima o inline. Non la vediamo in questo seminario.
MediaPlayer
29/05/2015
35
Processamento audio e videosu piattaforme Android
Adesso che abbiamo gestito (parte) dei problemi di interazione con lealtre applicazioni, vediamo come riprodurre un suono.
La classe MediaPlayer è la principale risorsa fornitaci da Android:
MediaPlayer mediaPlayer =
MediaPlayer.create(context, R.raw.sound_file_1);
mediaPlayer.start();
Possiamo riprodurre anche contenuti dal web o in streaming.
Ovviamente terminata la riproduzione dobbiamo chiudere il mediaplayer e rilasciare il focus.
http://developer.android.com/guide/topics/media/mediap
layer.html
Considerazioni Varie
29/05/2015
36
Processamento audio e videosu piattaforme Android
In realtà rimangono diverse questioni che vanno affrontate inun’implementazione realistica:
1. Se vi connettete in streaming, dovete dichiarare la necessità diutilizzare la connessione sul manifesto:
<uses-permission
android:name="android.permission.INTERNET" />
2. In generale, la preparazione dello stream dovrebbe essere fatta inmaniera asincrona per non bloccare l’interfaccia grafica.
3. Assicurarci che il formato sia supportato:http://developer.android.com/guide/appendix/media-formats.html
4. E’ possibile utilizzare MediaPlayer anche per aggiungere alcunieffetti sull’audio tramite il metodo attachAuxEffect (int effectId).
Registrazione Audio
29/05/2015
37
Processamento audio e videosu piattaforme Android
Android possiede la classe MediaRecorder per gestire la registrazione diuno stream audio:
mRecorder = new MediaRecorder();
mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mRecorder.setOutputFormat
(MediaRecorder.OutputFormat.THREE_GPP);
mRecorder.setOutputFile(mFileName);
mRecorder.setAudioEncoder
(MediaRecorder.AudioEncoder.AMR_NB);
Maggiori dettagli:
http://developer.android.com/guide/topics/media/audio-capture.html
SoundPool
29/05/2015
38
Processamento audio e videosu piattaforme Android
Se la vostra applicazione deve gestire numerosi suoni di breve durata,un’alternativa a gestirli manualmente con MediaPlayer è la classeSoundPool.
SoundPool è sviluppata per ottimizzare la latenza di riproduzione, ilnumero di suoni che possono essere riprodotti simultaneamente ed ingenerale la gestione della CPU.
Ad esempio, in un gioco è possibile sfruttarla per pre-caricare tutti isuoni in memoria durante il caricamento iniziale.
http://developer.android.com/reference/android/media/SoundPool.html
Concludendo
29/05/2015
39
Processamento audio e videosu piattaforme Android
Utilizzare funzionalità native di Android vi garantisce (almeno ad uncerto livello) di mantenere determinate prestazioni. Ad esempio, su JellyBean è stato fatto un grande sforzo a livello implementativo perabbassare la soglia di latenza di riproduzione.
Se avete particolari esigenze di processamento a basso livello, avretebisogno di una libreria esterna a seconda dell’obiettivo, ad esempio:
http://www.surina.net/soundtouch/
Un’alternativo è l’utilizzo di Android NDK per sfruttare codice scritto in C/C++:
http://developer.android.com/tools/sdk/ndk/index.html
Parte 5
1. (Brevissima) Introduzione ad Android
2. Fondamenti di OOP
3. Programmare su Android
4. Processamento Audio
5. Processamento Video
29/05/2015
40
Processamento audio e videosu piattaforme Android
VideoView
29/05/2015
41
Processamento audio e videosu piattaforme Android
Teoricamente la classe MediaPlayer può essere usata per riprodurrevideo, ma in questo caso diventa molto più complessa da gestire.
Un’ulteriore astrazione è data invece dalla classe VideoView che cinasconde tali complessità:
VideoView videoView =
(VideoView)findViewById(R.id.VideoView);
videoView.setVideoPath("/sdcard/something.3gp");
videoView.start();
Notiamo che l’oggetto videoView è un componente inserito all’internodi un’attività che richiamiamo nel codice tramite il suo ID.
VideoView /2
29/05/2015
42
Processamento audio e videosu piattaforme Android
Possiamo registrare un Listener per effettuare determinate azioni altermine del video stesso:
videoView.setOnCompletionListener
((OnCompletionListener) this);
Ovviamente possiamo registrare un Listener per qualsiasi altro evento.
Possiamo anche inserire effetti base sui nostri video:
http://developer.android.com/reference/android/media/effect/package-summary.html
Registrazione di Video
29/05/2015
43
Processamento audio e videosu piattaforme Android
Concludiamo vedendo come possiamo registrare un video.
Inviamo un intento implicito con l’azione da eseguire:
private void dispatchTakeVideoIntent() {
Intent takeVideoIntent = new
Intent(MediaStore.ACTION_VIDEO_CAPTURE);
startActivityForResult
(takeVideoIntent, ACTION_TAKE_VIDEO);
}
Riceviamo l’intento di ritorno e mostriamo il video:
private void handleCameraVideo(Intent intent) {
mVideoUri = intent.getData();
mVideoView.setVideoURI(mVideoUri);
}
http://developer.android.com/training/camera/videobasics.html
29/05/2015
44
Processamento audio e videosu piattaforme Android
Grazie per l’attenzione.
Domande?
(Buono sviluppo su Android!)
Recommended