使用 java 8 sdk 播放声音

Posted

技术标签:

【中文标题】使用 java 8 sdk 播放声音【英文标题】:playing sound with java 8 sdk 【发布时间】:2014-11-09 13:30:05 【问题描述】:

我尝试播放哔声,我使用 Toolkit.getDefaultToolkit().beep(),它适用于 Java 7。

import java.awt.Toolkit;

public class testbeep 

    public static void main(String[] args) 

        Toolkit.getDefaultToolkit().beep();
      


但是,我需要使用 JavaFX,而 JavaFX 可以在 Java 8 上运行。有人可以帮我配置我的项目吗? 我在 Eclipse 上工作,当我使用 Java 8 时,哔声有效,但 JavaFX 无效,当我使用 Java 7 时,哔声无效,JavaFX 无效。 我注意到 icetea-sound.jar 存在于 Java 7 上,但不存在于 Java 8 上,我可以在某处找到它吗?

【问题讨论】:

【参考方案1】:

混合 AWT 和 JavaFX 可能有点棘手;但是这对我来说似乎很好用(Java 1.8.0_20;Mac OS X 10.9.5):

import java.awt.Toolkit;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;


public class TestBeep extends Application 

    @Override
    public void start(Stage primaryStage) 
        Toolkit awtToolkit = Toolkit.getDefaultToolkit();
        Button button = new Button("Beep");
        button.setOnAction(e -> awtToolkit.beep());
        StackPane root = new StackPane(button);
        primaryStage.setScene(new Scene(root, 250, 75));
        primaryStage.show();
    

    public static void main(String[] args) 
        launch(args);
    


我不知道是否可以从 AWT 事件处理线程以外的线程调用 toolkit.beep()(在这里,我这样做了)。

【讨论】:

我在 Ubuntu 14.04.1 LTS【参考方案2】:

在编写 JavaFX 应用程序时,您可能应该使用内置的 JavaFX AudioClip API,而不是基于 AWT 的 API。

AudioClip plonkSound = new AudioClip("http://somehost/path/plonk.mp3");
plonkSound.play();

有关支持的音频格式的说明,请参阅JavaFX media Javadoc。

确保您的系统符合minimum requirements for JavaFX media playback。

对于 ubuntu,要使用 JavaFX,您需要使用 Oracle JDK 或 Emmanuel 在 JavaFX and OpenJDK 中发布的 Debian OpenJFX package。 Debian OpenJFX 包是相当新的,所以在这个阶段,如果可以的话,我建议坚持使用 Oracle Java 运行时。


关于您对 Java 7 中存在 icedtea-sound 而不是 Java 8 的评论,这可能是因为您在 openjdk 中的 Java 7 和您的 Java 8 是 Oracle jdk,也许 Oracle jdk 没有附带 icedtea-sound(我没有'没有检查,并不真正知道)。如果您愿意,您可以尝试使用 openjdk 8 + debian openjfx 软件包,也许其中包括 icedtea-sound 库。纯 JavaFX 媒体播放绝对不需要 icedtea-sound,但可能需要使用 awt beep 命令。无论如何,我可能仍然会推荐使用 JavaFX 媒体库而不是混合 AWT 库的仅 JavaFX 解决方案。

【讨论】:

以上是关于使用 java 8 sdk 播放声音的主要内容,如果未能解决你的问题,请参考以下文章

在 iPhone SDK 中播放声音?

使用按钮 iPhone SDK 进行简单的声音播放

录制/播放声音时音质不佳 - Android SDK

防止 Java 7/8 采样声音在播放时点击(适用于 6)

当我尝试使用 iPhone SDK 的 Finch 库播放声音时,为啥我的应用程序会崩溃?

录制失败时播放声音