Я работаю с обработкой SMS, программным обеспечением на основе Java и хочу воспроизводить звуковой сигнал/предупреждающий звук всякий раз, когда мы получаем сообщение. Я пробовал смотреть на библиотеки java.sound и ничего не нашел. Я не знаю, будет ли процесс апплета играть звук будет в порядке в приложении Java! Есть ли какие-либо предопределенные звуки в любых 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();
}
}