Есть ли способ сделать R звуковой сигнал/воспроизвести звук в конце script?

Когда я запускаю R-скрипты, я делаю что-то еще на другом рабочем столе. Если я не проверю часто, я никогда не знаю, когда что-то закончится. Есть ли способ вызвать звуковой сигнал (например, системный звуковой сигнал) или заставить R воспроизвести звук или уведомить рычание через некоторый код в конце моего script?

Ответ 1

alarm()

Функция тревоги.

Ответ 2

У меня есть пакет (beepr) с единственной целью сделать звуки уведомлений в R, которые должны работать кросс-платформенными. Для установки beepr и создания звука выполните следующее:

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

Дополнительная информация в github: https://github.com/rasmusab/beepr

Ответ 3

В MacOSX вы можете позволить компьютеру говорить:

system("say Just finished!")

и вы также можете изменить искусственный голос, который будет говорить:

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

Вы можете выбрать любой голос, доступный на вашем компьютере. На Yosemite вы можете видеть, какие голоса установлены в Системных настройках → Дикция и речь → Текст в речь.

Ответ 5

alarm не работает на моей машине Windows, поэтому я создал функцию, которая действительно создает шум.

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

Это явно может работать только на Windows, но я не гарантирую, что он будет работать даже на любом компьютере под управлением Windows. Я тестировал его только на своей машине, но я решил, что опубликую его на случай, если у кого-то будет такая же проблема с alarm, что я и делаю.

Ответ 6

cat ('Hello world!\a')

Ответ 7

Не только это, вы также можете поместить некоторую эпическую музыку с Youtube, когда программа будет завершена. (Для Ubuntu/Debian:)

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

Ответ 8

ОБНОВИТЬ:

В 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 установлен терминал-уведомитель для получения уведомлений на рабочем столе из командной строки. Затем вы можете завершить вызов команды 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)

чтобы получить сообщение, подобное этому:

enter image description here

Обновление: включена команда @VLC say.

Ответ 9

Используйте shell.exec("url"), чтобы открыть какой-либо клип YouTube в Windows

Ответ 10

Как насчет чего-то достаточно независимого от ОС для ОС с графическим интерфейсом и веб-браузерами? Это даже работает на RStudio Server!

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

Ответ 11

Или, если вы используете дистрибутив GNU/Linux и имеете черный список в модуле pcspkr (динамик ПК всегда раздражал меня), попробуйте объединить 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, если вы предпочитаете оповещение в, скажем, области уведомлений... Но, с функцией system, вы можете сделать почти что угодно: отправить электронное письмо, запустить еще один script, перезагрузить компьютер, sudo rm -rf *.* и т.д. что-нибудь... и я имею в виду это.

Но это стоит только IF, вы используете дистрибутив GNU/Linux (или UNIX), в противном случае придерживаетесь определенных команд Windows, хотя в этом случае я не могу дать вам много информации...

Ответ 12

взгляните на этот пакет: RPushBullet

Интерфейс R для службы обмена сообщениями Pushbullet, которая обеспечивает быстрое и эффективные уведомления (и передача файлов) между компьютерами, телефоны и планшеты

RPushbullet полностью свободен и имеет многоплатформенную платформу. Что касается вашего вопроса, вы можете использовать эту библиотеку для отправки Push в свой браузер, но, очевидно, это становится потрясающе, когда вам нужно что-то, чем вы можете уведомить вас, пока вас нет. Более того, создатель пакета R является тем же самым известным Rcpp, Dirk Eddelbuettel. Я бы сказал, что это стоит того!

Ответ 13

Вдохновленный 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)
  }
}

Ответ 14

Как насчет воспроизведения музыки?

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

Ответ 15

Вы можете использовать команду notify-send:

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

Ответ 16

Из-за этих многочисленных идей я создал решение без доступа в Интернет, потому что я работаю с VPN-клиентом с Windows. Таким образом, он воспроизводит типичный звук 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)
    }