Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Java AudioClip: come riprodurre brevi clip audio

Impariamo a implementare la classe javafx.scene.media.AudioClip del linguaggio Java per la riproduzione di clip audio a latenza minima
Impariamo a implementare la classe javafx.scene.media.AudioClip del linguaggio Java per la riproduzione di clip audio a latenza minima
Link copiato negli appunti

In Java è possibile gestire file video e audio utilizzando le JavaFX Media API. Un aspetto particolarmente interessante è la possibilità di riprodurre file attraverso uno streaming HTTP. I formati supportati sono AAC, AIFF, WAV ed MP3 per l'audio, FLV (contenenti video VP6 e audio MP3) e MPEG-4 (supportando anche i formati video H.264/AVC) per il video.

In questo articolo andiamo ad illustrare la classe javafx.scene.media.AudioClip, pensata per la riproduzione di clip audio a latenza minima.

Classe AudioClip

I file audio a latenza minima sono in genere file audio di breve durata. Pensiamo ad esempio a un effetto beep o a un effetto audio relativo a un alert di errore. La classe AudioClip fornisce un solo costruttore che accetta l'URL della sorgente audio da riprodurre. L'audio è immediatamente caricato in memoria in un formato raw e decompresso. Questo aspetto ci fa capire subito il perchè non dovremmo usare questa classe per riprodurre brani di lunga durata.

L'URL di input può utilizzare i protocolli HTTP, JAR e FILE, questo significa che possiamo riprodurre file provenienti da un indirizzo Internet remoto, da file system o da un file jar.

Audio clip in streaming

Vediamo un esempio di riproduzione di un file presente su un server remoto. Per illustrare l'utilizzo della classe AudioClip, mostriamo il codice di una semplice applicazione JavaFX che utilizzi un oggetto AudioClip i cui metodi di play/stop siano azionati attraverso due pulsanti.

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.HBox;
import javafx.scene.media.AudioClip;
import javafx.stage.Stage;
public class AudioClipDemo extends Application {
	    private AudioClip sound;
	    public static void main(String[] args) {
	        Application.launch(args);
	    }
	    @Override
	    public void init() {
	        sound = new AudioClip("http://soundbible.com/mp3/van-sliding-door-daniel_simon.mp3");
	    }
	    @Override
	    public void start(Stage primaryStage) throws Exception {
	        Button play = new Button("Play");
	        Button stop = new Button("Stop");
	        play.setOnAction(e -> sound.play());
	        stop.setOnAction(e -> sound.stop());
	        HBox root = new HBox(10, play, stop);
	        root.setStyle("-fx-padding:10;");
	        Scene scene = new Scene(root);
	        primaryStage.setScene(scene);
	        primaryStage.setTitle("Audio clip Demo");
	        primaryStage.show();
	    }
}

Al termine della creazione dell'oggetto AudioClip, il file audio è caricato interamente in memoria e pronto per essere eseguito.

Proprietà audio di riproduzione

La classe AudioClip supporta il setting di diverse proprietà:

  1. cycleCount (numero di volte che l'audio verrà riprodotto);
  2. volume (volume audio), rate (velocità relativa di esecuzione, valori validi sono compresi tra 0.125 a 8.0);
  3. balance (livello di bilanciamento);
  4. pan (il centro relativo di un clip: un valore pan 0 riproduce il clip normalmente, un valore di -1.0 effettua uno shift del clip interamente verso il canale sinistro mentre un valore di 1.0 applica uno shift interamente sul canale destro);
  5. priority (livello di priorità del clip rispetto ad altri clip).

Vediamo un esempio. Per riprodurre il clip 5 volte, utilizziamo un'impostazione del tipo:

sound.setCycleCount(5);

Mentre per avere un loop indefinito utilizziamo il valore AudioClip.INDEFINITE:

sound.setCycleCount(AudioClip.INDEFINITE);

Ti consigliamo anche