如何在 Java FX 2 中播放警报声音?有没有办法使用操作系统默认通知声音?
问问题
11500 次
3 回答
10
使用纯 JavaFX 播放声音
只需使用AudioClip
. 这个非常适合只播放单个短音。
播放默认通知声音
关于 Windows 操作系统,有一种方法可以通过java.awt.Toolkit
. 返回的声音属性很简单Runnable
,可以直接触发,无需担心声源等。
使用下面的示例来查看这两个选项是如何工作的(您必须将“alert.wav”添加到您的 src 文件夹中)。
package audioplayer;
import java.awt.Toolkit;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.VBox;
import javafx.scene.media.AudioClip;
import javafx.stage.Stage;
public class AudioPlayer extends Application {
private static final AudioClip ALERT_AUDIOCLIP = new AudioClip(AudioPlayer.class.getResource("/alert.wav").toString());
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
VBox root = new VBox();
Scene scene = new Scene(root, 300, 250);
Button btn = new Button();
btn.setText("Play (My Sound)");
btn.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
AudioPlayer.ALERT_AUDIOCLIP.play();
}
});
Button btn2 = new Button();
btn2.setText("Play (Windows Default)");
btn2.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
final Runnable runnable = (Runnable) Toolkit.getDefaultToolkit().getDesktopProperty("win.sound.default");
if (runnable != null) {
runnable.run();
}
}
});
root.getChildren().add(btn);
root.getChildren().add(btn2);
primaryStage.setScene(scene);
primaryStage.show();
}
}
于 2012-05-18T09:39:22.170 回答
9
JavaFX 本身目前没有任何东西可以访问操作系统默认的警报声音(您可以使用 JavaFX 触发事件以播放火并忘记音频剪辑以及跟踪的媒体音频,如 mp3)。
有一个开放的功能请求:RT-21634(任何人都可以注册查看 jira)。
您可以通过 awt 发出哔声:
Toolkit.getDefaultToolkit().beep();
根据谷歌搜索,打印一个很好地命名为 007 的哔声字符应该可以工作,但在我的机器上没有 - 我猜它访问机器中的蜂鸣器而不是扬声器系统,并且我的机器不能连接或启用蜂鸣器。
System.out.print("\007");
System.out.flush();
于 2012-05-18T18:13:36.277 回答
6
这就是我演奏声音的方式,
private void playMedia(Media m){
if (m != null){
MediaPlayer mp = new MediaPlayer(m);
mp.play();
}
}
public void playSomeSound(){
try{
Media someSound = new Media(getClass().getResource("some-sound.mp3").toString());
playMedia(someSound);
}catch(Exception ex){
GeeLogger.error(getClass(), ex.getLocalizedMessage(), ex);
}
}
虽然不知道 SO 细节。希望能帮助到你。
于 2012-05-17T23:18:38.457 回答