Is er een manier om R te laten piepen/een geluid af te spelen aan het einde van een script?

Als ik R-scripts uitvoer, ga ik iets anders doen op een ander bureaublad. Als ik niet vaak kijk, weet ik nooit wanneer iets af is. Is er een manier om een ​​pieptoon op te roepen (zoals een systeempiep) of om R een geluid te laten spelen of een gegrom te laten horen via een code aan het einde van mijn script?


Antwoord 1, autoriteit 100%

Ik heb een pakket (beepr) met als enig doel het maken van meldingsgeluiden in R die platformonafhankelijk zouden moeten werken. Voer het volgende uit om beepr te installeren en een geluid te maken:

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

Meer info op github: https://github.com/rasmusab/beepr


Antwoord 2, autoriteit 55%

alarm()

De alarm-functie. Het werkt door \anaar de console te sturen


Antwoord 3, autoriteit 34%

Op MacOSX kun je de computer laten spreken:

system("say Just finished!")

en je kunt ook de kunstmatige stem die zal spreken veranderen:

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

Je kunt elke stem kiezen die beschikbaar is op je computer. Op Yosemite kun je zien welke stemmen zijn geïnstalleerd in Systeemvoorkeuren -> Dictaat & amp; Spraak -> Tekst naar spraak.


Antwoord 4, autoriteit 28%

Je zou het moeten laten tweeten als het klaar is: http://cran .r-project.org/web/packages/twitteR/index.html


Antwoord 5, autoriteit 19%

alarmwerkt niet op mijn Windows-computer, dus heb ik een functie gemaakt die echt geluid maakt.

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

Dit zou duidelijk alleen op Windows kunnen werken, maar ik kan niet garanderen dat het zelfs op een willekeurige Windows-computer zal werken. Ik heb het alleen op mijn computer getest, maar ik dacht ik post het voor het geval iemand hetzelfde probleem met alarmheeft als ik.


Antwoord 6, autoriteit 16%

cat(‘Hallo wereld!\a’)


Antwoord 7, autoriteit 10%

Wat dacht je van iets dat redelijk onafhankelijk is van besturingssystemen voor besturingssystemen met GUI’s en webbrowsers? Het werkt zelfs op RStudio Server!

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

Antwoord 8, autoriteit 9%

Niet alleen dat, je kunt ook wat epische muziek van YouTube plaatsen als het programma klaar is met loopen 🙂 (Voor Ubuntu/Debian:)

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

Antwoord 9, autoriteit 7%

UPDATE:

Met macOS 10.9 (Mavericks) en hoger kun je meldingen posten met gewoon AppleScript:

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

Hierdoor vervalt de noodzaak om terminal-notifierte installeren, waarnaar hieronder wordt verwezen.

Ik heb terminal-notifiergeïnstalleerd op mijn Mac om bureaubladmeldingen van de opdrachtregel. U kunt dan een aanroep van de opdracht system()als volgt afronden (uiteraard het pad wijzigen):

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

Je kunt de functie zo aanroepen

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

om een ​​bericht als dit te krijgen:

voer hier de afbeeldingsbeschrijving in

Update: Inclusief @VLC’s saycommando.


Antwoord 10, autoriteit 6%

Gebruik shell.exec("url")om een ​​YouTube-clip op Windows te openen


Antwoord 11, autoriteit 5%

Of als je GNU/Linux distro gebruikt en de pcspkr-module op de zwarte lijst staat (de pc-luidspreker irriteerde me altijd), probeer het systemte combineren met een auditieve/visuele melding , bijv.

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

Je kunt de zenity-handleiding raadplegen als je de voorkeur geeft aan een waarschuwing in bijvoorbeeld het systeemvak… Maar met de functie systemkun je vrijwel alles doen: stuur een e-mail, voer een ander script uit, start de machine opnieuw op, sudo rm -rf *.*, enz. alles… en ik meen het.

Maar dit geldt alleen ALSje GNU/Linux (of UNIX)-distributie gebruikt, anders houd je je aan specifieke Windows-commando’s, hoewel ik in dat geval kan geef je niet veel info…


Antwoord 12, autoriteit 3%

Geïnspireerd door beepr, dit is de functie die ik momenteel gebruik voor dit soort problemen 😀

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

Antwoord 13, autoriteit 3%

Zou je wat muziek willen spelen?

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

Antwoord 14, autoriteit 3%

bekijk dit pakket: RPushBullet

Een R-interface naar de Pushbullet-berichtenservice die snelle
en efficiënte meldingen (en bestandsoverdracht) tussen computers,
telefoons en tablets

RPushbullet is volledig gratis en multi-platform. Wat betreft je vraag, je kunt deze bibliotheek gebruiken om een ​​push naar je browser te sturen, maar het wordt natuurlijk geweldig als je iets nodig hebt dat je op de hoogte kan stellen terwijl je weg bent.
Bovendien is de maker van het R-pakket dezelfde van de bekende Rcpp, Dirk Eddelbuettel. Ik zou zeggen dat het het proberen waard is!


Antwoord 15

Hoe zit het met het gebruik van 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, "');\"")
        ))

Dit kan mooi worden gebruikt in itererende bewerkingen en iets lezen als “Eerste klus geklaard”, “Tweede klus gedaan” enz.:

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

*Let op, dit gebruikt de standaard taalinstellingen van het systeem. Het voorbeeld is gebaseerd op de Engelse lector, het kan worden gewijzigd met de SelectVoice-methode. Gebruik om de beschikbare lectoren te controleren:

 system2(command = "PowerShell", 
        args = c("-Command", 
                 "\"Add-Type -AssemblyName System.Speech;",
                  "$speak = New-Object System.Speech.Synthesis.SpeechSynthesizer;",
                 "$speak.GetInstalledVoices().VoiceInfo")
        )

Dat geeft:

   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]...}

Eindelijk een functie om de lector te selecteren op zijn “naam” zoals “David”, “Paulina” of “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"))

Antwoord 16

Doe dit:

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

Je kunt ervoor jammen.


Antwoord 17

U kunt de opdracht notify-sendgebruiken:

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

Antwoord 18

Vanwege deze vele ideeën heb ik een oplossing gemaakt zonder internettoegang, omdat ik met een VPN-client met Windows werk. Het speelt dus een typisch Windows-geluid af, dat meestal op elk Windows-besturingssysteem staat.

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

Functie zonder lus

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

Antwoord 19

De volgende code produceert een pieptoon en is niet afhankelijk van een .mp3- of .wav-bestand:

switch(Sys.info()[['sysname']],
Linux = {
    system('play -n synth 0.1 tri  1000.0')}
)

Other episodes