Salve, sto scrivendo un programma Java che possa riprodurre l'audio per un progetto a scuola. Il codice, ancora incompleto per via dell'assenza di GUI, è il seguente:
import java.io.*;
import javax.sound.sampled.*;
public class GiocoV01 implements LineListener {
/**
* questo flag indica se la riproduzione è stata completata o meno.
*/
boolean playCompleted;
/**
* Riproduci un determinato file audio.
* @param audioFilePath Percorso del file audio.
*/
void play(String audioFilePath) {
File audioFile = new File(audioFilePath);
try {
AudioInputStream audioStream = AudioSystem.getAudioInputStream(audioFile);
AudioFormat format = audioStream.getFormat();
DataLine.Info info = new DataLine.Info(Clip.class, format);
Clip audioClip = (Clip) AudioSystem.getLine(info);
audioClip.addLineListener(this);
audioClip.open(audioStream);
audioClip.start();
while (!playCompleted) {
// attendere il completamento della riproduzione
try {
Thread.sleep(1000);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
audioClip.close();
} catch (UnsupportedAudioFileException ex) {
System.out.println("The specified audio file is not supported.");
ex.printStackTrace();
} catch (LineUnavailableException ex) {
System.out.println("Audio line for playing back is unavailable.");
ex.printStackTrace();
} catch (IOException ex) {
System.out.println("Error playing the audio file.");
ex.printStackTrace();
}
}
/**
* Ascolta gli eventi START e STOP della linea audio.
*/
@Override
public void update(LineEvent event) {
LineEvent.Type type = event.getType();
if (type == LineEvent.Type.START) {
System.out.println("Playback started.");
} else if (type == LineEvent.Type.STOP) {
playCompleted = true;
System.out.println("Playback completed.");
}
}
public static void main(String[] args) {
String audioFilePath = "<percorso file audio>";
GiocoV01 player = new GiocoV01();
player.play(audioFilePath);
}
}
In compilazione, l'errore è il seguente:
Exception in thread "main" java.lang.IllegalArgumentException: No line matching interface Clip supporting format PCM_SIGNED 48000.0 Hz, 24 bit, stereo, 6 bytes/frame, little-endian is supported.
at java.desktop/javax.sound.sampled.AudioSystem.getLine(AudioSystem.java:425)
at it.itispicerno.gioco.GiocoV01.play(GiocoV01.java:27)
at it.itispicerno.gioco.GiocoV01.main(GiocoV01.java:79)
Come posso risolvere? Che significa little-endian? Grazie in anticipo.