有没有办法让R在手写结束时发出嘟嘟声/播放声音?

Mai*_*ura 133 r

当我运行R脚本时,我会在另一个桌面上执行其他操作.如果我不经常检查,我永远不知道什么时候完成.有没有办法调用蜂鸣声(如系统蜂鸣声)或让R播放声音或通过脚本末尾的某些代码通知咆哮?

Ras*_*åth 138

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

install.packages("beepr")
library(beepr)
beep()
Run Code Online (Sandbox Code Playgroud)

更多信息,请访问github:https://github.com/rasmusab/beepr

  • omg,FF8`beepr :: beep(3)` - 我喜欢它.:-) (6认同)
  • 当然!你只需将它包装成这样的函数:`options(error = function(){beep(9)})`.虽然超级刺激:) (4认同)
  • 万岁!当其他一些建议没有时,它可以在我的Windows 7机器上运行. (3认同)
  • 现在已经取代dplyr成为我最喜欢的套餐:D (3认同)
  • @lukeA `while (1) beepr::beep(3)` 对你来说和我一样奇怪吗?:} (2认同)
  • stringr 似乎只是用于检测文件格式?删除这种依赖关系是有意义的,因此更容易在服务器上安装 (2认同)
  • @dez93_2000 还有 `beepr::beep_on_error` (2认同)

dei*_*nst 89

alarm()
Run Code Online (Sandbox Code Playgroud)

Tha报警功能.

  • 在Windows 7,x64,R 3.2.2上对我不起作用.下面的`beepr`包工作正常. (5认同)
  • 在Windows R 3.4.1上对我不起作用 (2认同)

VLC*_*VLC 55

在MacOSX上,你可以让电脑说话:

system("say Just finished!")
Run Code Online (Sandbox Code Playgroud)

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

system("say -v Kathy Just finished!")
Run Code Online (Sandbox Code Playgroud)

您可以选择计算机上可用的任何语音.在Yosemite上,您可以在" 系统偏好设置" - >"听写与语音" - >"文字转语音"中查看已安装的语音.


Ken*_*ams 47

你应该有它鸣叫时,它的完成:http://cran.r-project.org/web/packages/twitteR/index.html

  • 肯:那太棒了!现在我甚至不必挂在同一个房间里.我可以去欢乐时光,喝一杯啤酒,直到我看到dm说代码已经完成!我刚试了一下,效果很好. (2认同)

Das*_*son 33

alarm 在我的Windows机器上不起作用,所以我创建了一个实际产生噪音的功能.

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

这显然只适用于Windows,但我不保证它甚至可以在任意Windows计算机上运行.我只是在我的机器上进行了测试,但我想我会发布它,以防任何人遇到与alarm我相同的问题.


mpk*_*mpk 28

猫('Hello world!\ a')

  • 为什么这会被贬低?看看`alarm`来源,你会看到它的作用只是一个`cat("\ a")`来电. (4认同)
  • 没有实现alarm()= cat('\ a'),感谢提示.作为旁注,人们也可以在C和C++中做'\ a'(这就是我一直用它来通知我正在做的事情).第二个注意事项,如果您使用OS X并执行"系统偏好设置">"通用访问">"听力">启用"屏幕闪烁...",则执行"a"时整个屏幕会闪烁. (2认同)

mol*_*ean 16

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

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


小智 11

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


Ste*_*ald 11

更新:

使用macOS 10.9(Mavericks)及更高版本,您可以使用普通的AppleScript发布通知:

theTitle <- "A Title"
theMsg <- "A message here"

cmd <- paste("osascript -e ", "'display notification ", '"', theMsg, '"', ' with title ', '"', theTitle, '"', "'", sep='')
system(cmd)
Run Code Online (Sandbox Code Playgroud)

这消除了安装的需要terminal-notifier,如下所述.

-

我的Mac上安装了终端通知程序,可以从命令行获取桌面通知.然后你可以system()像这样结束对命令的调用(显然改变路径):

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))
    }

}
Run Code Online (Sandbox Code Playgroud)

你可以像这样调用这个函数

notify("R is done", "Message from R", speakIt=TRUE)
Run Code Online (Sandbox Code Playgroud)

得到这样的消息:

在此输入图像描述

更新:包含@ VLC的say命令.


rus*_*rce 9

对于具有GUI和Web浏览器的操作系统,某些合理的OS独立性如何?它甚至可以在RStudio服务器上运行!

__CODE__

  • 我有一半期待一次摇滚乐 (4认同)
  • 我认为你的意思是 browserURL('https://www.youtube.com/watch?v=dQw4w9WgXcQ') (2认同)

aL3*_*3xa 8

或者,如果您正在使用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
Run Code Online (Sandbox Code Playgroud)

您可以检查zenity手册,如果你喜欢,比方说,通知区域警报......但是,随着system功能,你可以做很多漂亮的事:发送电子邮件,运行一些其他的脚本,重新启动机器,sudo rm -rf *.*什么?我的意思是.

但这个身高只有IF你正在运行的GNU/Linux(或UNIX)分配,否则,坚持到Windows的特定命令,但在这种情况下,我不能给你多少信息...

  • 与此相当的MacOSX是`growlnotify`脚本(与Growl(http://growl.info/)一起打包):`system("growlnotify -t'R script info'-m'完成!'") (7认同)

Mul*_*efa 6

受启发beepr,这是我目前用于解决此类问题的功能: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)
  }
}
Run Code Online (Sandbox Code Playgroud)


Mem*_*eme 5

看一下这个包:RPushBullet

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

RPushbullet是完全免费的多平台。至于您的问题,您可以使用此库将“推”发送到浏览器,但是显然,当您需要某些东西时,它比离开时可以通知您的情况变得令人惊讶。而且,R包的创建者与著名的Rcpp Dirk Eddelbuettel相同。我会说值得一试!


Chi*_*oli 5

播放音乐怎么样?

shell.exec("foo/Born.to.be.wild.mp3")
Run Code Online (Sandbox Code Playgroud)


小智 5

这个帖子确实很老了,但它仍然是这个问题的最佳 Google 结果之一,并让我使用了 beepr 一段时间。不幸的是,beepr 似乎已被放弃,更不幸的是,它会导致频繁的崩溃(至少在带有 RStudio 的 Windows 10 上)。

幸运的是,自这篇文章发表以来,R 似乎添加了一些功能,使您能够相当轻松地播放声音:

library(audio)
fname = "C:\\sounds\\sound.wav"
sfx <- load.wave(fname)
play(sfx)
Run Code Online (Sandbox Code Playgroud)

然而,这几乎正是 beepr 播放声音的方式,因此它很可能在相同的情况下崩溃。@MikolajM 的解决方案适用于 Windows 10,但它有点不太健壮且更笨重(而且不那么有趣)。对于 Windows,@aL3xa 提出的解决方案似乎是最有前途的,尽管它需要一些预先设置。您需要一个可以从命令行播放声音的程序,例如 VLC。使用 VLC,您需要将其添加到系统路径中。完成此操作后,您可以使用他们建议的相同方法,如下所示:

system("vlc -I dummy --dummy-quiet c:\\sounds\\sound.wav vlc://quit", ignore.stdout = TRUE, ignore.stderr = TRUE)
Run Code Online (Sandbox Code Playgroud)

忽略是可选的,但如果没有它们,命令会返回一些我不希望在控制台中看到的乱码。