让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再次运行:
- 加载模块
pcspkr
(就像你已经通过/etc/modprobe.d/blacklist.conf
做的那样) - 删除包
pulseaudio-module-x11
(似乎吸收了所有XBell事件) - 将
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模块,就像你们所做的一样