Sistemiamo nella cartella res del nostro progetto un file wav.
La classe che ci permetterà di riprodurre il suono è Player
la cui istanza è ottenibile dall'oggetto Manager:
Player player = Manager.createPlayer(...);
Sfrutteremo il metodo al quale si passano come parametri: un oggetto InputStream
e una stringa che identifica il tipo di file audio da riprodurre.
Listato 22. Passaggio di parametri: InputStream e stringa con il file da riprodurre
private Player player = null;
......
public void commandAction(Command c, Displayable arg1)
{
if (c == exit)
{
notifyDestroyed();
}
else if (c == next)
{
InputStream is = getClass().getResourceAsStream("/alarm.wav");
try
{
player = Manager.createPlayer(is, "audio/x-wav");
player.realize();
player.start();
}
catch (IOException e)
{
e.printStackTrace();
}
catch (MediaException e)
{
e.printStackTrace();
}
}
}
Otteniamo lo stream leggendo il file che si trova nel jar della nostra applicazione con il metodo getResourceAsStream
.
Successivamente creiamo il Player e lo poniamo nello stato REALIZED (è lo stato in cui il Player ha acquisito i dati per la riproduzione da un server, da un file, ecc.) con l'istruzione realize()
.
Gli altri stati in cui un Player si può trovare sono:
- UNREALIZED: il player non ha ancora acquisito tutte le informazioni di cui ha bisogno;
- PREFETCHED: porre il player in questo stato permette ad esso di acquisire altre risorse o di effettuare task come la bufferizzazione;
- STARTED: è lo stato in cui il Player ha iniziato la riproduzione;
- CLOSED: il Player in questo stato ha rilasciato le risorse e non può essere usato nuovamente.
La chiamata Player.start()
avvia la riproduzione e se stiamo sull'emulatore del WTK potremo sentire il suono direttamente dagli altoparlanti del PC.
Altri modi di riproduzione
La classe Player
è quella che permette al terminale di leggere i file. Se il nostro file wav si fosse trovato in un server web invece che nel jar della nostra applicazione avremo usato il metodo createPlayer
che accetta come parametro la stringa locator. Supponendo che il web server abbia un ip 10.128.2.96 potremo scrivere:
Player player = Manager.createPlayer("http://10.128.2.96/alarm.wav);
In questo caso sarà necessario permettere la connessione di rete che consentirà di effettuare il download del file e successivamente la riproduzione dello stesso.
Con il metodo setLoopCount(..)
, invocato prima dello start, si può decidere se riprodurre più volte consecutivamente (dipende dal valore del parametro del metodo) il suono:
player.setLoopCount(3);
player.start();
premette di riprodurre 3 volte il suono.
Link interessanti
Alcuni link interessanti sull'argomento MMAPI sono:
- Sun - The J2ME Mobile Media API: una prima introduzione alle funzionalità delle MMAPI;
- Sun - Comparing J2ME Multimedia Options: viene offerta una panoramica sulla versione 1.1 MMAPI con alcuni suggerimenti per avere pieno controllo delle classi;
- Articoli nokia: alcuni documenti Nokia con esempi sull'argomento.