当我运行R脚本时,我会在另一个桌面上执行其他操作。如果我不经常检查,我永远不知道什么时候完成。有没有办法调用蜂鸣声(如系统蜂鸣声)或让R播放声音或通过脚本末尾的某些代码通知咆哮?
答案 0 :(得分:125)
我有一个包(beepr
),其唯一目的是在R中发出通知声音,这应该可以跨平台工作。运行以下命令安装beepr并发出声音:
install.packages("beepr")
library(beepr)
beep()
github上的更多信息:https://github.com/rasmusab/beepr
答案 1 :(得分:87)
alarm()
Tha警报功能。
答案 2 :(得分:54)
在MacOSX上,您可以让电脑说话:
system("say Just finished!")
你也可以改变说话的人造声音:
system("say -v Kathy Just finished!")
您可以选择计算机上可用的任何语音。在Yosemite上,您可以在系统偏好设置 - >中看到安装了哪些声部。听写与演讲 - >文字转语音。
答案 3 :(得分:47)
答案 4 :(得分:32)
alarm
在我的Windows机器上不起作用,所以我创建了一个实际上会产生噪音的功能。
beep <- function(n = 3){
for(i in seq(n)){
system("rundll32 user32.dll,MessageBeep -1")
Sys.sleep(.5)
}
}
这显然只适用于Windows,但我不保证它甚至可以在任意Windows计算机上运行。我只是在我的机器上进行了测试,但我想我会发布它,以防任何人遇到与我alarm
相同的问题。
答案 5 :(得分:27)
cat('Hello world!\ a')
答案 6 :(得分:16)
不仅如此,当程序完成循环时,你还可以从Youtube上放一些史诗音乐:)(对于Ubuntu / Debian:)
system("xdg-open 'http://www.youtube.com/watch?v=9jK-NcRmVcw'")
答案 7 :(得分: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)
这样就无需安装terminal-notifier
,如下所述。
-
我已经在我的Mac上安装了terminal-notifier来从命令行获取桌面通知。然后你可以像这样结束对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))
}
}
你可以像这样调用这个函数
notify("R is done", "Message from R", speakIt=TRUE)
获取这样的消息:
更新:包含@ VLC&#39; say
命令。
答案 8 :(得分:10)
请使用shell.exec("url")
在Windows上打开一些YouTube剪辑
答案 9 :(得分:9)
对于具有GUI和Web浏览器的操作系统,某些合理的OS独立性如何?它甚至适用于RStudio Server!
browseURL('https://www.youtube.com/watch?v=QH2-TGUlwu4')
答案 10 :(得分:8)
或者,如果您正在使用GNU / Linux发行版并将 pcspkr 模块列入黑名单(PC扬声器总是令我烦恼),请尝试将system
与一些听觉/视觉通知相结合,例如< / p>
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 手册...但是,使用system
功能,您几乎可以做任何事情:发送电子邮件,运行其他一些脚本,重启机器,sudo rm -rf *.*
等任何 ......我的意思是。
但这只是 IF 你正在运行GNU / Linux(或UNIX)发行版,否则,坚持使用Windows特定命令,不过在这种情况下,我可以不给你太多信息......
答案 11 :(得分:5)
看看这个包:RPushBullet
Pushbullet消息传递服务的R接口,提供快速 计算机之间的高效通知(和文件传输), 手机和平板电脑
RPushbullet是完全免费的多平台。至于你的问题,你可以使用这个库向你的浏览器发送推送,但显然当你需要的东西比你不在时通知你时它会变得惊人。 此外,R包的创造者与众所周知的Rcpp,Dirk Eddelbuettel相同。我说它值得一试!
答案 12 :(得分:4)
受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)
}
}
答案 13 :(得分:4)
播放一些音乐怎么样?
shell.exec("foo/Born.to.be.wild.mp3")
答案 14 :(得分:2)
您可以使用notify-send
命令:
system("notify-send \"R script finished running\"")
答案 15 :(得分:0)
由于这些主意,我创建了一个无法访问Internet的解决方案,因为我使用Windows的VPN客户端。因此,它可以播放典型的Windows声音,通常可以在任何Windows操作系统上使用。
#Function with loop, press Esc to stopp
alarm2 <- function(){
while(TRUE){
system("cmd.exe",input="C:/Windows/WinSxS/amd64_microsoft-windows-shell-sounds_31bf3856ad364e35_10.0.17134.1_none_fc93088a1eb3fd11/tada.wav")
Sys.sleep(1)
}
}
alarm3 <- function(){
system("cmd.exe",input="C:/Windows/WinSxS/amd64_microsoft-windows-shell-sounds_31bf3856ad364e35_10.0.17134.1_none_fc93088a1eb3fd11/tada.wav")
Sys.sleep(1)
}
答案 16 :(得分:0)
如何使用Windows SpeechSynthesizer?
message <- "job done!"
system2(command = "PowerShell",
args = c("-Command",
"\"Add-Type -AssemblyName System.Speech;",
"$speak = New-Object System.Speech.Synthesis.SpeechSynthesizer;",
paste0("$speak.Speak('", message, "');\"")
))
这可以很好地用于迭代操作中,并读取诸如“第一项工作已完成”,“第二项工作已完成”等内容:
say_something <- function(message) {
message <- paste0("$speak.Speak('", message, "');\"")
system2(command = "PowerShell",
args = c("-Command",
"\"Add-Type -AssemblyName System.Speech;",
"$speak = New-Object System.Speech.Synthesis.SpeechSynthesizer;",
message
))
}
operations <- c("1st.", "2nd.", "3rd.")
lapply(operations, function(x) say_something(message=paste(x, "job done")))
*请注意,这使用系统默认语言设置。该示例基于英语讲师,可以使用SelectVoice
方法进行更改。要检查可用的讲师,请使用:
system2(command = "PowerShell",
args = c("-Command",
"\"Add-Type -AssemblyName System.Speech;",
"$speak = New-Object System.Speech.Synthesis.SpeechSynthesizer;",
"$speak.GetInstalledVoices().VoiceInfo")
)
给出:
Gender : Female
Age : Adult
Name : Microsoft Paulina Desktop
Culture : pl-PL
Id : TTS_MS_PL-PL_PAULINA_11.0
Description : Microsoft Paulina Desktop - Polish
SupportedAudioFormats : {}
AdditionalInfo : {[Age, Adult], [Gender, Female], [Language, 415], [Name, Microsoft Paulina Desktop]...}
Gender : Male
Age : Adult
Name : Microsoft David Desktop
Culture : en-US
Id : TTS_MS_EN-US_DAVID_11.0
Description : Microsoft David Desktop - English (United States)
SupportedAudioFormats : {}
AdditionalInfo : {[Age, Adult], [Gender, Male], [Language, 409], [Name, Microsoft David Desktop]...}
最后一个功能,可以通过他的“名字”(例如“ David”,“ Paulina”或“ Hazel”)来选择演讲人:
say_something <- function(message , voice) {
voice <- paste0("\"$speak.SelectVoice('Microsoft ", voice, " Desktop');" )
message <- paste0("$speak.Speak('", message, "');\"")
system2(command = "PowerShell",
args = c("-Command",
"\"Add-Type -AssemblyName System.Speech;",
"$speak = New-Object System.Speech.Synthesis.SpeechSynthesizer;",
voice,
message
))
}
operations <- c("1st.", "2nd.", "3rd.")
lapply(operations, function(x) say_something(message=paste(x, "job done"), voice="David"))
答案 17 :(得分:0)
以下代码会产生提示音,并且不依赖于 .mp3 或 .wav 文件:
switch(Sys.info()[['sysname']],
Linux = {
system('play -n synth 0.1 tri 1000.0')}
)
答案 18 :(得分:0)
这样做:
song <- function() {
for(i in 1:2) {
for(i in 1:4) {
for(i in 1:4) {
beep(7)
Sys.sleep(0.25)
beep()
Sys.sleep(0.22)
}
beep(2)
}
beep(11)
}
beep(4)
}
song()
你可以全力以赴。