Java  »  Guide  »  Guida Java 

Il suono in jdk1.3: javax.swing.sampled



I pacchetti aggiunti al linguaggio sono 4:

  1. javax.sound.midi
  2. javax.sound.midi.spi
  3. javax.sound.sampled
  4. javax.sound.sampled.spi

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 è:

Interfacce

  • Clip
  • DataLine
  • Line
  • LineListener
  • Mixer
  • Port
  • SourceDataLine
  • TargetdataLine

Classi

  • AudioFileFormat
  • AudioFileFormat.Type
  • AudioFormat
  • AudioFormat.Encoding
  • AudioInputStream
  • AudioPermission
  • AudioSystem
  • BooleanControl
  • BooleanControl.Type
  • CompoundControl
  • CompoundControl.Type
  • Control
  • Control.Type
  • DataLine.Info
  • EnumControl
  • EnumControl.Type
  • FloatControl
  • FloatControl.Type
  • Line.Info
  • LineEvent
  • LineEvent.Type
  • Mixer.Info
  • Port.Info
  • ReverbType

Eccezioni

  • LineUnavailableException
  • UnsupportedAudioFileException

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 quindi

ol.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).

Ultimi articoli Java

Utilizzare OSGi in Eclipse

Articolo di introduzione all'utilizzo di OSGI in ambiente Eclipse

Jsoup: parsing semplice di HTML5 in java

Presentazione della libreria JSOUP: un parser molto semplice per...

The Cube: una demo 3D per Android con JMonkey

Un progetto di demo passo-passo per gestire gli eventi 3d di base in...

Parsing JSON semplice con google GSON

Breve 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....

Altri articoli

Guide Java

Guida Apache Struts

Il primo e più utilizzato tra i framework MVC del mondo Java,...

Guida Java Spring

Scoprire il lightweight container più famoso del mondo Java....

Guida Java 6

Prendendo le mosse dalla guida Java, già presente su HTML.it,...

Altre guide

Newsletter @Programmazione

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

Altre newsletter

Corsi in aula

Corso Google AdWords Base

25 Giugno 2012 a Milano
Disponibilità: 7 Posti

Corso Google AdWords Base

05 Giugno 2012 a Roma
Disponibilità: 7 Posti