9

我正在尝试向 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');

但我不确定我是否可以指望这条可用的路径。
所以,三个问题:

  1. 有没有更好的方法在 Gnome 中调用默认声音
  2. 这条路是否相当普遍(至少在 Debain/Ubuntu 风格中)
  3. paplay播放声音后需要一段时间才能退出,有没有更好的方法来调用它?

我宁愿远离系统扬声器的哔哔声,这听起来很糟糕(这会被播放很多)而且 Ubuntu 无论如何都会将 PC 扬声器列入黑名单。
谢谢!

4

1 回答 1

3

获取路径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 并直接运行请求的程序。这避免了危险的错误(并且更有效。)

于 2012-10-10T20:27:36.190 回答