让PC扬声器发出蜂鸣声

多年来,有很多关于从Ubuntu版本获得哔声的文章。 示例: 固定蜂鸣声

我的需求略有不同,因为我不想确保声卡发出哔哔声。 相反,我想要PC扬声器,这是原始内置扬声器产生的那种,因为我相信它们会产生更少的CPU负载。 我通过拔下外部扬声器并关闭Ubuntu来确认我的电脑有PC扬声器。 在关机和重启过程中的某个时刻,即使外部扬声器没有电源,也会听到蜂鸣声。

我尝试过以下方法:

/etc/modprobe.d/blacklist.conf ,将这些行转换为注释:

 #blacklist snd_pcsp #blacklist pcspkr 

.bashrc

 /usr/bin/xset b on /usr/bin/xset b 100 

在gnome终端中启用:编辑>配置文件首选项>常规>终端铃声

确保没有“静音”选项:系统>首选项>声音>各种选项卡(取消全选)。

在“系统>首选项>声音>声音效果”中选择“启用窗口和按钮声音”

gconf-editor桌面> gnome>声音中,选择三个声音复选框。

gconf-editor apps> metacity> general中选择audible bell复选框。

当我通过我的Java程序将代码7发送到控制台或使用时,我仍然没有发出PC扬声器的蜂鸣声

 echo -e '\a' 

或者等价的

 echo -e "\a" 

在bash命令行上。 (-e选项表示启用转义序列解释。)我还应该尝试什么?

更新由于我的目标是最小化CPU上的负载,因此这是经过时间的比较。 每次测试都是100,000次迭代。 每个变体进行三次,因此每个变体显示三个结果。

 printwriter.format("%c", 7); // 1.3 seconds, 1.5 seconds, 1.5 seconds Toolkit.getDefaultToolkit().beep(); // 0.8 seconds, 0.3 seconds, 0.5 seconds try { Runtime.getRuntime().exec("beep"); } catch (IOException e) { } // 10.3 seconds, 16.3 seconds, 11.4 seconds 

这些运行是在Eclipse内部完成的,因此对于独立执行,请乘以小于1的值。 不幸的是,Toolkit的哔哔声在我的电脑上是静音的,代码7也是如此。蜂鸣声实用程序工作但成本最高。

在我的Oneiric系统上,我必须执行以下操作才能让XBell / XkbBell再次运行:

  1. 加载模块pcspkr (就像你已经通过/etc/modprobe.d/blacklist.conf做的那样)
  2. 删除包pulseaudio-module-x11 (似乎吸收了所有XBell事件)
  3. options snd-hda-intel beep_mode=2放入/etc/modprobe.d/enable-beep.conf (您只需要拥有一个带有像我的Latitude E6420一样的intel音频芯片的系统)。 之后,在alsamixer中取消静音。

一些终端(如konsole,请参阅错误错误177861 )忽略了铃声字符。 使用xkbbell命令测试系统蜂鸣声的好方法。

在我完成所有这些之后,java调用Toolkit.getDefaultToolkit().beep()就可以了。

在14.04.3 LTS它现在似乎足以编辑/etc/modprobe.d/blacklist.conf并通过注释掉黑名单行来启用pcspkr

#blacklist pcspkr

#将该行转换为注释。

确保终端(gnome-terminal)允许首选项选项卡中的控制台铃声。

这是通过空终端线上的退格测试的。 这也是通过beep实用程序测试的(假设您已安装它)。 相反,您可以通过java.awt.Toolkit对象进行编程式蜂鸣:

java.awt.Toolkit.getDefaultToolkit().beep()

Toolkit对象比beep实用程序更有效。

顺便说一句,有些人不喜欢PC扬声器。 链接

确保您的终端和主题不吃该活动。

你说, 外部工具有效。 你可以深入研究他们的代码。 这可能有所帮助。

使用beep程序(http://johnath.com/beep/),我编译了v1.3,因为Lucid存储库中的1.2.2不起作用。

  • 你需要用sudo运行它
  • 必须加载pcspkr模块,就像你们所做的一样