Problema con la riproduzione audio

di il
2 risposte

Problema con la riproduzione audio

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.

2 Risposte

  • Re: Problema con la riproduzione audio

    gabroc18 ha scritto:


    Come posso risolvere?
    Vuol dire che non è supportata la riproduzione di quello specifico formato del file (indicato da quelle caratteristiche tecniche riportate nella eccezione).
    E a naso direi che il problema principale potrebbe essere il fatto del 24 bit.

    Prova a ricodificare il file con un software per la conversione di formati audio, in modo da avere diciamo ad es. PCM_SIGNED, 16 bit, stereo (little o big endian, non dovrebbe influire).
    Se non puoi/non vuoi ricodificare il file, si potrebbe cercare un plugin. La Sound API è una API "pluggabile", si possono aggiungere plugin per supportare altri tipi/formati audio.
    Io sono generalmente sempre un po' a "digiuno" della Sound API (non è una cosa che si usa tutti i giorni) ma una risorsa online molto nota che puoi vedere è: http://jsresources.sourceforge.ne

    gabroc18 ha scritto:


    Che significa little-endian?
    E' bene che tu lo sappia in generale, perché è importante anche in altri contesti:
    https://it.wikipedia.org/wiki/Ordine_dei_byt
  • Re: Problema con la riproduzione audio

    Grazie mille! Sono riuscito a ricodificare il file e ora funziona tutto. Grazie di nuovo
Devi accedere o registrarti per scrivere nel forum
2 risposte