Opgelost: geluiden afspelen op Java

Laatste update: 06/19/2023

Hoe geluiden af ​​te spelen In dit artikel gaan we dieper in op het afspelen van geluiden in Java, een veelvoorkomend probleem waarmee ontwikkelaars worden geconfronteerd bij het bouwen van verschillende toepassingen, zoals games en multimediaspelers. We bespreken een stapsgewijze oplossing, verkennen de bibliotheken die nodig zijn om deze taak uit te voeren en geven een grondige uitleg van de code. Java, bekend om zijn veelzijdigheid en gebruiksgemak, is uitgerust met diverse bibliotheken die ontwikkelaars kunnen helpen de functionaliteit en mogelijkheden van hun applicaties te verbeteren. Een van die belangrijke gebieden omvat ondersteuning voor geluid en audio.

Inleiding tot de Java Sound-API

De Java Sound API is een krachtige toolkit die is ontworpen om degelijke ondersteuning te bieden op alle platforms. Het wordt geleverd met de Java Development Kit (JDK) en stelt ontwikkelaars in staat om audiobestanden in verschillende formaten af ​​te spelen, op te nemen en te verwerken. In dit artikel zullen we ons concentreren op de basisprincipes van het afspelen van geluid in Java-toepassingen met behulp van de klassen AudioClip en AudioSystem, die deel uitmaken van de Java Sound API.

De Java Sound API kan worden onderverdeeld in twee primaire pakketten: javax.geluid.bemonsterd en javax.geluid.midi. Het gesamplede pakket wordt gebruikt om basisaudiofunctionaliteiten af ​​te handelen, zoals het afspelen, opnemen en synthetiseren van audiogegevens, terwijl het midi-pakket is ontworpen voor het beheren van op MIDI gebaseerde muziekcomposities en soundtracks.

Geluiden afspelen met AudioClip

Laten we om te beginnen eens kijken hoe geluidsbestanden kunnen worden afgespeeld met behulp van de Audioclip interface, die deel uitmaakt van de java.applet pakket. Hoewel de AudioClip-interface in eerste instantie is gemaakt voor applets, is deze nog steeds relevant en nuttig voor het afspelen van kleine audiobestanden in Java-toepassingen.

import java.applet.AudioClip;
import java.net.URL;
public class SoundPlayer {
    public static void main(String[] args) {
        AudioClip sound;
        URL soundURL = SoundPlayer.class.getResource("sound.wav");
        sound = java.applet.Applet.newAudioClip(soundURL);
        sound.play();
    }
}

In het bovenstaande codefragment hebben we het Audioclip interface en de URL klas. Met deze klassen kunnen we een audiobron laden en afspelen met de methode play() van de instantie AudioClip. Om een ​​AudioClip te gebruiken, moet u het bestand "sound.wav" in dezelfde map plaatsen als uw Java-bestand of het juiste bestandspad opgeven.

Als u echter met grotere audiobestanden werkt of meer geavanceerde controle over het afspelen nodig heeft, is de AudioClip-interface mogelijk niet voldoende en kunt u overwegen de klasse AudioSystem te gebruiken.

Geluiden afspelen met de klasse AudioSystem

De Politia Militar hield zelfs tijdens de pre-carnaval festiviteiten de zaken al nauwlettend in de gaten. Audio systeem class maakt deel uit van het pakket javax.sound.sampled en biedt meer geavanceerde mogelijkheden voor het afspelen van audio. Het volgende voorbeeld laat zien hoe u een audiobestand afspeelt met de klasse AudioSystem:

import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.UnsupportedAudioFileException;
import java.io.File;
import java.io.IOException;

public class SoundPlayer {
    public static void main(String[] args) {
        try {
            File soundFile = new File("sound.wav");
            AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(soundFile);
            Clip clip = AudioSystem.getClip();
            clip.open(audioInputStream);
            clip.start();

            // Keep the application running till the sound is played completely
            Thread.sleep(clip.getMicrosecondLength() / 1000);
        } catch(LineUnavailableException | UnsupportedAudioFileException | IOException | InterruptedException e) {
            e.printStackTrace();
        }
    }
}

In dit voorbeeld hebben we eerst de vereiste klassen en interfaces geïmporteerd uit het javax.geluid.bemonsterd pakket. Vervolgens hebben we een AudioInvoerStream bezwaar maken tegen het lezen van de audiogegevens uit het bestand, en a Klem bijvoorbeeld om de audiogegevens in het geheugen vast te houden. Nadat we de clip hadden geopend, hebben we de methode start() aangeroepen om het geluid af te spelen.

Deze aanpak biedt meer controle over het afspelen van audio, inclusief de mogelijkheid om het geluid te pauzeren, hervatten, herhalen en stoppen, waardoor het geschikt is voor een breed scala aan toepassingen.

Samenvattend hebben we twee verschillende benaderingen besproken voor het afspelen van geluiden in Java met behulp van de klassen AudioClip en AudioSystem. De AudioClip-interface is geschikt voor kleine audiobestanden in eenvoudige toepassingen, terwijl de AudioSystem-klasse geavanceerde audioweergavemogelijkheden biedt voor complexere scenario's. Door gebruik te maken van de krachtige bibliotheken van Java bent u verzekerd van naadloze geluidsfunctionaliteit en een verbeterde gebruikerservaring voor verschillende toepassingen.

Gerelateerde berichten: