我正在尝试向 Perl 脚本添加声音以提醒用户事务正常(用户在工作时可能不会一直看着屏幕)。我希望尽可能保持可移植性,因为脚本可以在 Windows 和 Linux 站上运行。
我可以
use Win32::Sound;
Win32::Sound::Play('SystemDefault',SND_ASYNC);
适用于 Windows。但我不确定如何在 Linux (Gnome) 上调用通用声音。到目前为止,我想出了
system('paplay /usr/share/sounds/gnome/default/alert/sonar.ogg');
但我不确定我是否可以指望这条可用的路径。
所以,三个问题:
- 有没有更好的方法在 Gnome 中调用默认声音
- 这条路径是否相当普遍(至少在 Debain/Ubuntu 风格中)
paplay
播放声音后需要一段时间退出,有没有更好的调用方式?
我宁愿远离系统扬声器发出哔哔声,这听起来很糟糕(这会被播放很多次)而且 Ubuntu 还是将 PC 扬声器列入黑名单。
谢谢!
最佳答案
获取 paplay
路径(假设它在那里)的更便携的方法可能是使用 File::Which
.然后你可以得到这样的路径:
use File::Which;
my $paplay_path = which 'paplay';
要异步播放声音,你可以fork
一个子进程:
my $pid = fork;
if ( !$pid ) {
# in the child process
system $paplay_path, '/usr/share/sounds/gnome/default/alert/sonar.ogg';
}
# parent proc continues here
还请注意,我使用了 system
的多参数形式;这样做可以避免 shell 并直接运行请求的程序。这避免了危险的错误(并且效率更高。)
关于windows - 在 Perl 脚本中播放声音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12826634/