web-dev-qa-db-fra.com

Comment jouer un son (alerte) dans une application Java?

Je travaille avec un SMS manipulation, Java logiciel basé et je veux jouer un bip/alerte chaque fois que nous recevons un message. J'ai essayé de regarder le Java bibliothèques .sound et je n'ai rien trouvé. Je ne sais pas si le mode applet de jouer un son sera correct dans une application Java! Y a-t-il des sons prédéfinis dans une Java que nous pouvons appeler dans une application? Tout pointeur sera apprécié!

26
Krithika

Si vous voulez juste un bip ou une alerte rapide, essayez

Toolkit.getDefaultToolkit().beep();
49
Sean

Vous pouvez générer votre propre son si vous recherchez quelque chose de moins ennuyeux qu'un bip () sans fichier son externe.

import javax.sound.sampled.*;

public class SoundUtils {

  public static float SAMPLE_RATE = 8000f;

  public static void tone(int hz, int msecs) 
     throws LineUnavailableException 
  {
     tone(hz, msecs, 1.0);
  }

  public static void tone(int hz, int msecs, double vol)
      throws LineUnavailableException 
  {
    byte[] buf = new byte[1];
    AudioFormat af = 
        new AudioFormat(
            SAMPLE_RATE, // sampleRate
            8,           // sampleSizeInBits
            1,           // channels
            true,        // signed
            false);      // bigEndian
    SourceDataLine sdl = AudioSystem.getSourceDataLine(af);
    sdl.open(af);
    sdl.start();
    for (int i=0; i < msecs*8; i++) {
      double angle = i / (SAMPLE_RATE / hz) * 2.0 * Math.PI;
      buf[0] = (byte)(Math.sin(angle) * 127.0 * vol);
      sdl.write(buf,0,1);
    }
    sdl.drain();
    sdl.stop();
    sdl.close();
  }

  public static void main(String[] args) throws Exception {
    SoundUtils.tone(1000,100);
    Thread.sleep(1000);
    SoundUtils.tone(100,1000);
    Thread.sleep(1000);
    SoundUtils.tone(5000,100);
    Thread.sleep(1000);
    SoundUtils.tone(400,500);
    Thread.sleep(1000);
    SoundUtils.tone(400,500, 0.2);

  }
}

Plus d'expériences sonores ici: Produire un effet sonore spécial

33
RealHowTo

Vous pouvez jeter un œil à la méthode du bip dans la classe Toolkit, comme indiqué ici

6
npinti

La route de l'applet devrait être correcte (et très simple). Pour éviter de créer une instance d'applet, vous pouvez utiliser la méthode statique newAudioClip , puis appeler play() sur le AudioClip créé.

URL url = getClass().getResource("/foo/bar/sound.wav");
AudioClip clip = Applet.newAudioClip(url);
clip.play();

Ici le sound.wav le fichier est regroupé dans le fichier jar dans le fichier foo/bar package que vous créez. Une classe entièrement fonctionnelle (où le fichier wav est dans le package sounds) ressemblerait à ceci:

package sounds;

import Java.applet.Applet;
import Java.applet.AudioClip;

public class PlaySound {

    public void PlayBeep() {        
        AudioClip clip = Applet.newAudioClip(getClass().getResource("/sounds/beep3.wav"));
        clip.play();
    }
}

Ici, le chemin d'accès est donné comme /sounds/ car lorsque vous extrayez le jar, vous verrez que le fichier wav se trouve dans le premier dossier du jar, qui est sounds .

4
Adamski

Si vous souhaitez utiliser le package audio pour lire un fichier son arbitraire, vous pouvez utiliser le javax.sound.sampled paquet. Voici le code qui jouera un fichier son:

 privé void playSound (Fichier f) {
 Runnable r = nouveau Runnable () {
 Fichier privé f; 
 
 public void run () {
 playSoundInternal (this.f); 
} 
 
 public Runnable setFile (File f) {
 this.f = f; 
 retourner ceci; 
} 
} .setFile (f); 
 
 nouveau Thread (r) .start (); 
} 
 
 privé vide playSoundInternal (Fichier f) {
 essayez {
 AudioInputStream audioInputStream = AudioSystem.getAudioInputStream (f); 
 essayez {
 .] Clip clip = AudioSystem.getClip (); 
 Clip.open (audioInputStream); 
 Essayez {
 Clip.start (); 
 Essayez {
 Thread.sleep (100); 
} Catch (InterruptedException e) {
 E.printStackTrace (); 
} 
 clip.drain (); 
} enfin {
 clip.close (); 
} 
} catch (LineUnavailableException e) {
 e. printStackTrace (); 
} enfin {
 audioInputStream.close (); 
} 
} catch (UnsupportedAudioFileException e) {
 e.printStackTrace ( ); 
} catch (FileNotFoundException e) {
 e.printStackTrace (); 
} catch (IOException e) {
 e.printStackTrace (); 
} 
} 
1
Erick Robertson