Как играть звук (предупреждение) в Java-приложении?

Я работаю с обработкой SMS, программным обеспечением на основе Java и хочу воспроизводить звуковой сигнал/предупреждающий звук всякий раз, когда мы получаем сообщение. Я пробовал смотреть на библиотеки java.sound и ничего не нашел. Я не знаю, будет ли процесс апплета играть звук будет в порядке в приложении Java! Есть ли какие-либо предопределенные звуки в любых java-библиотеках, которые мы можем вызвать в приложении? Любые указатели будут оценены!

Ответы

Ответ 1

Если вам просто нужен звуковой сигнал или быстрое оповещение, попробуйте

Toolkit.getDefaultToolkit().beep();

Ответ 2

Вы можете создать свой собственный звук, если вы ищете что-то менее скучное, чем звуковой сигнал() без внешнего звукового файла.

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);

  }
}

Дополнительные звуковые эксперименты здесь: Произвести специальный звуковой эффект

Ответ 3

Вы можете взглянуть на звуковой сигнал в классе Toolkit, как показано здесь

Ответ 4

Маршрут апплета должен быть хорошим (и очень простым). Чтобы избежать создания экземпляра апплета, вы можете использовать статический метод newAudioClip, а затем вызвать play() AudioClip созданного AudioClip.

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

Здесь файл sound.wav файл jar в пакете foo/bar, который вы создаете. Полнофункциональный класс (где wav файл находится в пакете sounds) будет выглядеть так:

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();
    }
}

Здесь путь задан как /sounds/ потому что когда вы извлекаете jar, вы увидите, что файл wav находится в первой папке в jar, которая является sounds.

Ответ 5

Если вы хотите использовать звуковой пакет для воспроизведения произвольного звукового файла, вы можете использовать пакет javax.sound.sampled. Вот код, который будет воспроизводить звуковой файл:

private void playSound(File f) {
    Runnable r = new Runnable() {
        private File f;

        public void run() {
            playSoundInternal(this.f);
        }

        public Runnable setFile(File f) {
            this.f = f;
            return this;
        }
    }.setFile(f);

    new Thread(r).start();
}

private void playSoundInternal(File f) {
    try {
        AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(f);
        try {
            Clip clip = AudioSystem.getClip();
            clip.open(audioInputStream);
            try {
                clip.start();
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                clip.drain();
            } finally {
                clip.close();
            }
        } catch (LineUnavailableException e) {
            e.printStackTrace();
        } finally {
            audioInputStream.close();
        }
    } catch (UnsupportedAudioFileException e) {
        e.printStackTrace();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}