MediaPlayer: riprodurre file audio

10 ottobre 2014

La multimedialità è una delle facoltà più importanti di un dispositivo mobile. Basti pensare a quanto siano state innovative e di successo le introduzioni della radio e del lettore MP3 sui telefoni cellulari. Anche Android, quindi, ha un suo componente integrato per la fruizione di contenuti multimediali: il MediaPlayer.

In questo capitolo si imparerà ad utilizzarlo integrandolo rapidamente all’interno di un’app. Con poche righe di codice creeremo un lettore MP3 rudimentale ma funzionante, in grado di riprodurre una sola canzone, che per sempicità salveremo tra le risorse con ID R.id.canzone. Partendo dall’esempio che vedremo, estenderne l’utilizzo a raccolte di file musicali risulterà abbastanza semplice.

I metodi che sfrutteremo della classe MediaPlayer sono i seguenti:

  • create: serve per ottenere un riferimento all’istanza del MediaPlayer. Non ne creeremo direttamente uno nuovo mediante l’operatore new di Java, ma faremo in modo che sia il sistema stesso ad instanziarlo. Tra i parametri di questo metodo passeremo anche l’ID della risorsa che corrisponde alla canzone da ascoltare;
  • play, stop e pause: dopo tutti i mangianastri, videoregistratori e lettori CD che hanno affollato la nostra vita sin da piccoli, appare quasi superfluo spiegare a cosa servano questi tre metodi. A scanso di equivoci, specifichiamo che essi consentono rispettivamente di avviare, arrestare e mettere in pausa la fruizione del contenuto multimediale;
  • getDuration e getCurrentPosition: forniscono informazioni temporali sull’esecuzione del contenuto. Il primo restituisce la durata complessiva della canzone mentre con il secondo otteniamo l’intervallo tempo che separa l’inizio della canzone con la posizione temporale attualmente in riproduzione.

Il lettore MP3

Nel layout del nostro lettore inseriremo una SeekBar (che mostrerà l’avanzamento della musica in esecuzione) ed i pulsanti che consentono di utilizzare i controlli fondamentali:

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TableRow 
        android:gravity="center"
        android:padding="20dp">
        <SeekBar
            android:id="@+id/bar"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="wrap_content"  />
    </TableRow>
    <TableRow 
        android:gravity="center"
        android:padding="20dp">
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="play"
            android:text="Play" />
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="pause"
            android:text="Pause" />
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="stop"
            android:text="Stop" />
    </TableRow>
</TableLayout>

Il risultato finale è mostrato nella figura seguente.

All’interno dell’Activity, il metodo onCreate fisserà i riferimenti principali alla SeekBar e al MediaPlayer:

public class MainActivity extends Activity 
{

	private MediaPlayer mp=null;
	private Handler handler = new Handler();
	private double startTime = 0;
	private SeekBar sk=null;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) 
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		sk=(SeekBar) findViewById(R.id.bar);
		mp=MediaPlayer.create(this, R.raw.canzone );
		
	}
	
	. . .
	. . .
}

I metodi play, pause e stop sono molto semplici, a dimostrazione della facilità di interazione con il MediaPlayer:

	private Runnable updateBar = new Runnable() {
	      public void run() 
	      {
	    	 startTime = mp.getCurrentPosition();
	         sk.setProgress((int)startTime);
	         handler.postDelayed(this, 100);
	      }
	};
	
	public void play(View v)
	{
		mp.start();
		sk.setMax((int) mp.getDuration());
		handler.postDelayed(updateBar,100);
	}
	
	public void pause(View v)
	{
		mp.pause();
	}
	
	public void stop(View v)
	{
		mp.stop();
	}

Nel codice presentato, si vede che per richiedere le tre operazioni di base del Mediaplayer – start, stop, pause – è sufficiente richiamare i metodi omonimi. Tra di essi si inserisce il meccanismo di aggiornamento della barra di progresso. Il suo avanzamento rappresenta l’andamento della riproduzione. Essa è realizzata in maniera piuttosto semplice: si è usato un handler temporizzato che legge ogni 100 millisecondi la posizione attuale di riproduzione, ed attui il conseguente aggiornamento della barra. Il valore massimo cui il progresso può arrivare è la durata totale del brano, e viene impostato all’interno del metodo play utilizzando come fonte di informazione il risultato del metodo getDuration del Mediaplayer.

Tutte le lezioni

1 ... 48 49 50 ... 85

Se vuoi aggiornamenti su MediaPlayer: riprodurre file audio inserisci la tua e-mail nel box qui sotto:
Tags:
 
X
Se vuoi aggiornamenti su MediaPlayer: riprodurre file audio

inserisci la tua e-mail nel box qui sotto:

Ho letto e acconsento l'informativa sulla privacy

Acconsento al trattamento di cui al punto 3 dell'informativa sulla privacy