有没有办法让R哔/在剧本结束时播放声音?

当我运行R脚本时,我会在其他桌面上执行其他操作。 如果我不经常检查,我不知道什么时候结束。 有没有办法调用一个哔声(如系统哔声)或让R发挥声音或通过一些代码在脚本的末尾通知咆哮?

alarm() 

Tha警报function。

我有一个软件包( beepr ),其唯一目的是在R中发出通知声音,这个声音应该是跨平台的。 运行以下命令安装beepr并发出声音:

 install.packages("beepr") library(beepr) beep() 

更多信息在github: https : //github.com/rasmusab/beepr

你应该在它完成时发出推特: http : //cran.r-project.org/web/packages/twitteR/index.html

在MacOSX上,您可以让计算机说话:

 system("say Just finished!") 

你也可以改变会说话的人造声音:

 system("say -v Kathy Just finished!") 

您可以select计算机上可用的任何语音。 在优胜美地上,您可以看到在系统偏好设置 – >默认和语音 – >文本到语音中安装了哪些语音

猫('Hello world!\ a')

alarm不能在我的Windows机器上工作,所以我创build了一个实际上会产生噪音的function。

 beep <- function(n = 3){ for(i in seq(n)){ system("rundll32 user32.dll,MessageBeep -1") Sys.sleep(.5) } } 

这显然只能在Windows上工作,但我不保证它甚至可以在任意Windows计算机上运行。 我只是在我的机器上testing过,但我想我会张贴它,以防有人遇到与我一样的alarm问题。

不仅如此,当程序完成循环时,您还可以从Youtube上放入一些史诗般的音乐:)(对于Ubuntu / Debian 🙂

 system("xdg-open 'http://www.youtube.com/watch?v=9jK-NcRmVcw'") 

请使用shell.exec("url")在Windows上打开一些YouTube剪辑

或者如果你使用的是GNU / Linux发行版,并且把pcspkr模块列入黑名单(PC扬声器总是令人讨厌的话),可以尝试将system与一些听觉/视觉通知

 system("aplay -t wav /usr/share/sounds/phone.wav") # for auditive bell (an I mean it literary) system("zenity --title=\"R script info\" --text=\"Script has finished with zero exit status\" --info") # for GTK dialog 

你可以检查zenity手册,如果你喜欢在通知区域的警报…但是,与systemfunction,你可以做任何事情:发送电子邮件,运行其他脚本,重新启动机器, sudo rm -rf *.*等等什么 …我的意思是。

但是, 如果你正在运行GNU / Linux(或者UNIX)发行版,那么这个标准是站不住脚的,否则,坚持Windows特定的命令,尽pipe在这种情况下,我不能给你太多的信息。

我在我的Mac上安装了terminal通知程序,从命令行获取桌面通知。 然后你可以像这样把一个调用包装到system()命令中(显然,改变path):

 notify <- function(msgString='Message from R', titleString='Message from R', speakIt=FALSE) { cmd <- paste('~/terminal-notifier/terminal-notifier.app/Contents/MacOS/terminal-notifier -message ', '"', msgString, '" -title "', titleString, '"', sep='') system(cmd) if (speakIt) { system(paste('say', msgString)) } } 

你可以像这样调用函数

 notify("R is done", "Message from R", speakIt=TRUE) 

得到这样的消息:

在这里输入图像说明

更新:包括@ VLC的say命令。

如何合理的操作系统独立的操作系统与GUI和网页浏览器? 它甚至在RStudio服务器上工作!

browseURL('https://www.youtube.com/watch?v=QH2-TGUlwu4')

受到beepr启发,这是我目前用于解决这些问题的function:D

 work_complete <- function() { cat("Work complete. Press esc to sound the fanfare!!!\n") on.exit(beepr::beep(3)) while (TRUE) { beepr::beep(4) Sys.sleep(1) } } 

看看这个包: RPushBullet

Pushbullet消息服务的R接口,提供计算机,手机和平板电脑之间的快速高效的通知(以及文件传输)

RPushbullet是完全免费的和多平台。 至于你的问题,你可以使用这个库发送一个推送到你的浏览器,但显然当你需要的东西比你可以通知你时更惊人。 此外,R软件包的创build者和知名的Rcpp,Dirk Eddelbuettel一样。 我会说这是值得的一枪!

您可以使用notify-send命令:

 system("notify-send \"R script finished running\"") 

玩一些音乐怎么样?

 shell.exec("foo/Born.to.be.wild.mp3")