web-dev-qa-db-fra.com

Existe-t-il un moyen de faire sonner R/jouer un son à la fin d'un script?

Lorsque j'exécute des scripts R, je fais autre chose sur un autre bureau. Si je ne vérifie pas souvent, je ne sais jamais quand quelque chose est fini. Y a-t-il un moyen d'invoquer un bip (comme un bip système) ou de faire jouer un son par R ou de notifier le grondement via un code à la fin de mon script?

118
Maiasaura
alarm()

La fonction d'alarme.

85
deinst

J'ai un paquetage (beepr) dans le seul but de faire des sons de notification en R qui devraient fonctionner sur plusieurs plates-formes. Exécutez ce qui suit pour installer beepr et créer un son:

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

Plus d'infos sur github: https://github.com/rasmusab/beepr

118
Rasmus Bååth

Sur MacOSX, vous pouvez laisser l'ordinateur parler:

system("say Just finished!")

et vous pouvez aussi changer la voix artificielle qui parlera:

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

Vous pouvez choisir n'importe quelle voix disponible sur votre ordinateur. Sur Yosemite, vous pouvez voir quelles voix sont installées dans Préférences système -> Dictée et parole -> Text to Speech.

52
VLC

Vous devriez l'avoir Tweet quand c'est fait: http://cran.r-project.org/web/packages/Twitter/index.html

47
Ken Williams

alarm ne fonctionne pas sur mon ordinateur Windows, j'ai donc créé une fonction qui fait du bruit.

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

Cela ne pourrait évidemment fonctionner que sous Windows, mais je ne garantis pas qu'il fonctionnera même sur un ordinateur Windows arbitraire. Je ne l'ai testé que sur ma machine, mais je me suis dit que je le posterais au cas où quelqu'un aurait le même problème avec alarm que moi.

30
Dason

chat ('Bonjour tout le monde!\a')

27
mpk

De plus, vous pouvez aussi mettre de la musique épique de Youtube lorsque le programme est terminé en boucle :) (pour Ubuntu/Debian :)

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

METTRE À JOUR:

Avec macOS 10.9 (Mavericks) et versions ultérieures, vous pouvez publier des notifications à l'aide de AppleScript standard:

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

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

Cela supprime la nécessité d'installer terminal-notifier, référencé ci-dessous.

-

Terminal-notifier est installé sur mon Mac pour recevoir les notifications du Bureau à partir de la ligne de commande. Vous pouvez ensuite conclure un appel à la commande system() comme ceci (changez le chemin, évidemment):

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

}

Vous pouvez appeler la fonction comme ceci

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

pour obtenir un message comme celui-ci:

enter image description here

Mise à jour: inclus la commande say de VLC.

11
smacdonald

Veuillez utiliser Shell.exec("url") pour ouvrir un clip YouTube sous Windows.

10
Sweden

Ou, si vous utilisez la distribution GNU/Linux et que le module pcspkr est sur liste noire (le haut-parleur du PC m'a toujours ennuyé), essayez de combiner system avec une notification auditive/visuelle, par exemple.

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

Vous pouvez vérifier zenity manual si vous préférez être alerté, par exemple dans la zone de notification ... Mais, avec la fonction system, vous pouvez faire à peu près n'importe quoi: envoyer un email, exécuter un autre script, redémarrer l'ordinateur, Sudo rm -rf *.*, etc. n'importe quoi ... et je le pense vraiment.

Mais cela ne vaut queSIvous utilisez une distribution GNU/Linux (ou UNIX), sinon, respectez les commandes spécifiques à Windows, bien que dans ce cas, je ne puisse pas vous donner beaucoup d’informations. ..

8
aL3xa

Inspiré de beepr, voici la fonction que j'utilise actuellement pour ce type de problèmes: 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)
  }
}
4
Mullefa

Que diriez-vous de jouer de la musique?

Shell.exec("foo/Born.to.be.wild.mp3")
4
Chirayu Chamoli

jetez un oeil à ce paquet: RPushBullet

Une interface R avec le service de messagerie Pushbullet qui fournit rapidement et notifications efficaces (et transfert de fichiers) entre ordinateurs, téléphones et tablettes

RPushbullet est totalement gratuit et multi-plateforme. Pour ce qui est de votre question, vous pouvez utiliser cette bibliothèque pour envoyer un Push à votre navigateur, mais cela devient évidemment étonnant lorsque vous avez besoin de quelque chose qui peut vous avertir en votre absence ..__ De plus, le créateur du package R est le même. du bien connu Rcpp, Dirk Eddelbuettel. Je dirais que ça vaut le coup!

4
Meme

Vous pouvez utiliser la commande notify-send:

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

En raison de ces nombreuses idées, j'ai créé une solution sans accès à Internet, car je travaille avec un client VPN avec Windows. Donc, il joue un son Windows typique, qui est généralement sur n'importe quel système d'exploitation 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)
      }
    }

Fonction sans boucle

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