Ответ 1
Если вам просто нужен звуковой сигнал или быстрое оповещение, попробуйте
Toolkit.getDefaultToolkit().beep();
Я работаю с обработкой SMS, программным обеспечением на основе Java и хочу воспроизводить звуковой сигнал/предупреждающий звук всякий раз, когда мы получаем сообщение. Я пробовал смотреть на библиотеки java.sound и ничего не нашел. Я не знаю, будет ли процесс апплета играть звук будет в порядке в приложении Java! Есть ли какие-либо предопределенные звуки в любых java-библиотеках, которые мы можем вызвать в приложении? Любые указатели будут оценены!
Если вам просто нужен звуковой сигнал или быстрое оповещение, попробуйте
Toolkit.getDefaultToolkit().beep();
Вы можете создать свой собственный звук, если вы ищете что-то менее скучное, чем звуковой сигнал() без внешнего звукового файла.
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);
}
}
Дополнительные звуковые эксперименты здесь: Произвести специальный звуковой эффект
Вы можете взглянуть на звуковой сигнал в классе Toolkit, как показано здесь
Маршрут апплета должен быть хорошим (и очень простым). Чтобы избежать создания экземпляра апплета, вы можете использовать статический метод 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
.
Если вы хотите использовать звуковой пакет для воспроизведения произвольного звукового файла, вы можете использовать пакет 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(); } }