8

Java FX 2 で警告音を鳴らすにはどうすればよいですか? OSのデフォルトの通知音を使う方法はありますか?

4

3 に答える 3

10

純粋な JavaFX でサウンドを再生する

のインスタンスを使用するだけですAudioClip。これは、単一の短い音を再生するのに非常に適しています。

デフォルトの通知音を鳴らす

Windows OS に関しては、 経由でプロパティにアクセスする方法がありますjava.awt.Toolkit。返されるサウンド プロパティは、Runnable音源などを気にせずに直接発射できるシンプルなものです。

以下の例を使用して、両方のオプションがどのように機能するかを確認してください (src フォルダーに「alert.wav」を追加する必要があります)。

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 自体には、OS のデフォルトのアラート サウンドにアクセスするものはありません (JavaFX を使用して、イベントをトリガーして、オーディオ クリップを再生したり、mp3 などの追跡されたメディア オーディオを忘れたりすることができます)。

未解決の機能リクエストがあります: RT-21634 (誰でもサインアップして jira を表示できます)。

awt 経由でビープ音を鳴らすことができます:

Toolkit.getDefaultToolkit().beep();

適切な名前の 007 というビープ文字の印刷は、Google 検索によると機能するはずですが、私のマシンでは機能しません。スピーカー システムではなく、マシンのブザーにアクセスしていると思います。マシンにブザーを接続または有効にしてはいけません。

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 に答える