Windows内置系统声音如win.sound.exclamation
,win.sound.asterisk
等。通过内置,我的意思是这些声音已经存在于操作系统上,我不需要依赖提供我的程序的声音文件。
我有访问这些声音的代码(见下文)。
final Runnable runnable =
(Runnable) Toolkit.getDefaultToolkit().getDesktopProperty("win.sound.start");
很遗憾,我找不到点击的内置系统声音。
我不想下载.wav
文件并以编程方式读取文件。是否有系统调用允许我播放操作系统的默认声音以进行单击?
答案 0 :(得分:1)
OP:那么它会像win.sound.windows_navigation_start一样被访问吗?
不....我不相信你可以通过Windows音频反馈属性访问该文件,它似乎没有这种方式可用。在Windows操作系统中可用的所有音频反馈声音中,实际上只有少数支持它们,并且可以与 Toolkit.getDesktopProperty()方法一起使用,这些音频声音属性是:
until p f v = head (dropWhile (not . p) (iterate f v))
如果您想查看Windows系统支持哪些音频反馈声音,请使用以下代码:
win.sound.asterisk
win.sound.close
win.sound.default
win.sound.exclamation
win.sound.exit
win.sound.hand
win.sound.maximize
win.sound.menuCommand
win.sound.menuPopup
win.sound.minimize
win.sound.open
win.sound.question
win.sound.restoreDown
win.sound.restoreUp
win.sound.start
我怀疑你已经知道这一点,我想你已经知道了,因为该属性可用,并不一定意味着当你尝试使用某些时会听到声音(至少不适合所有人)。例如,无论我做什么,使用“win.sound.start”属性都不会给我任何音频反馈。我甚至不确定我知道那个特定的音频反馈是什么。
因此,考虑到上述情况,利用Windows提供的单击声音的唯一方法就是位于 C:\ Windows \ media中的 Windows Navigation Start.wav 文件\ 目录是使用Java的音频类之一。在下面的示例代码中,我们使用 Clip 类以及 AudioInputStream 和 AudioSystem 类,所有这些都来自 javax.sound。采样库。
System.out.println("Supported Windows Audio Property Names");
System.out.println("======================================");
String propnames[] = (String[]) Toolkit.getDefaultToolkit().getDesktopProperty("win.propNames");
for (String propname : propnames) {
if (propname.startsWith("win.sound.")) {
System.out.println(propname);
}
}
并使用此方法:
private void playWav(String soundFilePath) {
File sFile = new File(soundFilePath);
if (!sFile.exists()) {
String ls = System.lineSeparator();
System.err.println("Can not locate the supplied sound file!" +
ls + "(" + soundFilePath + ")" + ls);
return;
}
try {
Clip clip;
try (AudioInputStream audioInputStream = AudioSystem.
getAudioInputStream(sFile.getAbsoluteFile())) {
clip = AudioSystem.getClip();
// Rewind clip to beginning.
// Not really required in this example!
// It's just good to know.
clip.setFramePosition(0);
clip.open(audioInputStream);
}
clip.start();
}
catch (UnsupportedAudioFileException | IOException | LineUnavailableException ex) {
Logger.getLogger("playWav()").log(Level.SEVERE, null, ex);
}
}
如果你已经走了这么远,那么你也可以下载并嵌入你自己的Click声音文件而不是依赖于Windows文件。至少这种方式几乎可以在任何平台上运行。