I pacchetti aggiunti al linguaggio sono 4:
Le parti che finiscono per spi servono a leggere e scrivere files sonori, convertirli o leggere files di strumenti nel caso di midi.
Noi non vedremo queste parti, mentre vedremo javax.sound.sampled e javax.sound.midi.
Il pacchetto javax.swing.sampled permette di registrare suonare e modificare dati sonori.
Il contenuto del pacchetto è:
Vediamo come usare questo pacchetto solo per suonare un file sonoro, ad esempio il file chiamato italian.wav.
Inanzitutto dobbiamo reperire il file, e questo lo facciamo come al solito instanziando un oggetto della classe File (di java.io)
File sf=new File("italian.wav");
A questo punto iniziamo una try{} catch, nella quale includeremo tutto quello che ha a che fare con il suono, cattureremo le eccezioni:
catch(UnsupportedAudioFileException ee){}
catch(IOException ea){}
catch(LineUnavailableException LUE){};
Per usare il motore sonoro di Java dobbiamo partire dalla classe AudioSystem, da questa otterremo due oggetti di tipo AudioFileFormat e AudioInputStream
AudioFileFormat aff=AudioSystem.getAudioFileFormat(sf);
AudioInputStream ais=AudioSystem.getAudioInputStream(sf);
che rappresentano il contenuto del file italian.wav
Dobbiamo creare un oggetto AudioFormat da AudioFileFormat per poterlo suonare
AudioFormat af=aff.getFormat();
Il nostro scopo è quello di creare un oggetto che implementi l'interfaccia Clip, il quale contiene i metodi play, per fare questo scriveremo:
DataLine.Info info = new DataLine.Info(
Clip.class,
ais.getFormat(),
((int) ais.getFrameLength() *
af.getFramesize()));
Clip ol = (Clip) AudioSystem.getLine(info);
Da ol, che è di tipo Clip possiamo suonare, e questo si fa aprendo la linea e invocando i metodi per suonare:
ol.open(ais); <-(APRE l'input stream, ovvero il file italian.wav)
e quindiol.loop(NUMERO);
dove NUMERO indica il numero di ripetizioni del dile, nel nostro caso è Clip. LOOP_CONTINUOUSLY per indicare che bisogna ripetere all'infinito.
L'esempio completo, editato in suono.java è il seguente:
import javax.swing.*;
import javax.sound.sampled.*;
import java.io.*;
public class suono extends JFrame
{
public suono()
{
File sf=new File("italian.wav");
AudioFileFormat aff;
AudioInputStream ais;
try
{
aff=AudioSystem.getAudioFileFormat(sf);
ais=AudioSystem.getAudioInputStream(sf);
AudioFormat af=aff.getFormat();
DataLine.Info info = new DataLine.Info(
Clip.class,
ais.getFormat(),
((int) ais.getFrameLength() *
af.getFramesize()));
Clip ol = (Clip) AudioSystem.getLine(info);
ol.open(ais);
ol.loop(Clip.LOOP_CONTINUOUSLY);
System.out.println("Riproduzione iniziata, premere CtrL-C per interrompere");
}
catch(UnsupportedAudioFileException ee){}
catch(IOException ea){}
catch(LineUnavailableException LUE){};
}
public static void main(String[] ar)
{
new suono();
}
}
Sembra un po macchinoso, ma seguendo questa procedura è possiblie leggere e suonare ogni file wav. Per effettuare altre operazioni il pacchetto è abbastanza complesso, e oggi non esistono manuali che ne spiegano il funzionamento (tranne la documentazione del JDK, che come avrete avuto modo di vedere non spiega come usare le cose, ma le descrive soltanto).
Utilizzare OSGi in EclipseArticolo di introduzione all'utilizzo di OSGI in ambiente Eclipse |
Jsoup: parsing semplice di HTML5 in javaPresentazione della libreria JSOUP: un parser molto semplice per... |
The Cube: una demo 3D per Android con JMonkeyUn progetto di demo passo-passo per gestire gli eventi 3d di base in... |
Parsing JSON semplice con google GSONBreve ed essenziale introduzione alla libreria di google per la... |
AppFuse: realizzare un'applicazione completa (implementare i servizi)Prosegue la serie per realizzare una app completa con AppFuse.... |
Guida Apache StrutsIl primo e più utilizzato tra i framework MVC del mondo Java,... |
Guida Java SpringScoprire il lightweight container più famoso del mondo Java.... |
Guida Java 6Prendendo le mosse dalla guida Java, già presente su HTML.it,... |
Ogni mese, direttamente nella tua e-mail: articoli, script e guide su Java, Visual Basic, VB.Net ed i più diffusi linguaggi di programmazione.
Iscriviti alla newsletter
|
|
Corso Google AdWords Base25 Giugno 2012 a Milano |
|
|
Corso Google AdWords Base05 Giugno 2012 a Roma |