programing

대본 끝에 R이 삐/삐 소리를 낼 수 있는 방법이 있나요?

oldcodes 2023. 7. 18. 21:56
반응형

대본 끝에 R이 삐/삐 소리를 낼 수 있는 방법이 있나요?

R 스크립트를 실행할 때는 다른 데스크톱에서 다른 작업을 수행합니다.제가 자주 확인하지 않으면, 저는 어떤 일이 언제 끝날지 모릅니다.시스템 비프음과 같은 비프음을 호출하거나 R에게 내 스크립트 끝에 있는 코드를 통해 소리를 재생하거나 으르렁거리는 소리를 알릴 수 있는 방법이 있습니까?

beepr이 유일한 플랫폼에서 작동해야 .)는 교차 플랫폼에서 작동해야 하는 R로 알림 소리를 내는 것을 유일한 목적으로 합니다.다음을 실행하여 삐삐를 설치하고 소리를 냅니다.

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

github에서 더 많은 정보: https://github.com/rasmusab/beepr

alarm()

알람 기능.전송하면 작동합니다.\a

MacOSX에서 컴퓨터가 다음을 말하게 할 수 있습니다.

system("say Just finished!")

또한 다음과 같은 인공 음성을 변경할 수 있습니다.

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

컴퓨터에서 사용 가능한 모든 음성을 선택할 수 있습니다.Yosemite에서 시스템 환경설정 -> 받아쓰기 음성 -> 텍스트에서 음성으로 설치된 음성을 확인할 수 있습니다.

완료되면 트윗을 해야 합니다. http://cran.r-project.org/web/packages/twitteR/index.html

alarmWindows 컴퓨터에서 작동하지 않기 때문에 실제로 소음을 내는 기능을 만들었습니다.

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

이것은 분명히 Windows에서만 작동할 수 있지만 임의의 Windows 컴퓨터에서도 실행될 것이라고 보장하지 않습니다.제 , 혹시 했습니다.alarm저는 그렇습니다.

고양이('안녕하세요!\a')

GUI와 웹 브라우저가 있는 OS에 적합한 OS 독립적인 것은 어떻습니까?RStudio Server에서도 작동합니다!

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

뿐만 아니라 프로그램 루프가 끝나면 유튜브의 서사시 음악도 넣을 수 있습니다 :) (우분투/데비안의 경우:)

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

업데이트:

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

의 파일: @VLCsay지휘권

이해주요를 사용해 .shell.exec("url")에서 일부 .

또는 GNU/리눅스 디스트리뷰터를 사용하고 있고 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

알림 영역에서 경보를 원하는 경우에는 초기화 설명서를 확인할 수 있습니다.하지만, 함께.system 기계를 하고, , 당은이신일을, 보고스를실고트하, 행고재팅하부립기를크, 계내다른메:,고▁function▁pretty하,재▁send,, ▁anything계를부팅,▁do기▁you▁machine▁much▁can▁the,▁reboot▁run,sudo rm -rf *.*기타 등등...그리고 나는 진심이다.

그러나 이는 GNU/리눅스(또는 유닉스) 배포를 실행하는 경우에만 유효합니다. 그렇지 않으면 Windows 관련 명령을 고수해야 합니다. 하지만 이 경우에는 많은 정보를 드릴 수 없습니다.

에서 영감을 받은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)
  }
}

이 패키지를 보십시오: RPushBullet.

컴퓨터, 전화 및 태블릿 간에 빠르고 효율적인 알림(및 파일 전송)을 제공하는 Pushbullet 메시징 서비스에 대한 R 인터페이스

RPush bullet은 완전히 자유롭고 다중 플랫폼입니다.질문과 관련하여 이 라이브러리를 사용하여 브라우저에 푸시를 보낼 수 있지만, 사용자가 부재중인 동안 알림을 보내는 것보다 필요한 것이 있으면 이 기능이 매우 유용합니다.게다가, R 패키지의 제작자는 잘 알려진 Rcpp, Dirk Eddelbuettel과 같습니다.시도해 볼 가치가 있다고 생각해요!

음악을 연주하는 것이 어떻습니까?

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

수행할 작업:

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

당신은 그것을 즐길 수 있습니다.

Windows Speech Synther를 사용하는 것은 어떻습니까?

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

Dason의 대답은 분명 훌륭합니다. 왜냐하면 기본적으로 R 자체를 제외한 어떤 것도 필요로 하지 않고 모든 윈도우 시스템에서 작동하기 때문입니다.

하지만 한 가지 궁금한 것은 코드가 실행된 후에 실제로 이 기능들이 삐 소리를 내도록 하는 방법입니다.

다음과 같은 작업을 수행할 경우:

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

당신은 무엇이든 파이프로 연결할 수 있습니다. 그리고 그것은 당신이 파이프로 연결한 것이 무엇이든 돌려줄 것입니다. 그래서 당신은 원하는 대로 할 수 있습니다.아래 예제를 참조하십시오.

fa <- psych::fa(x, 1) |> beepR()

나는 여기서 네이티브 파이프를 사용하고 있습니다.|>R4.1에 도입되었지만 사용할 수 있습니다.%>%에서 나오는 파이프maggitr원하는 경우 패키지를 사용합니다. 그들은 정확히 같은 방식으로 작동합니다.어쨌든, 분석이 끝나자마자 신호음이 울릴 것이고,fa요인 분석의 결과를 포함합니다.

물론, 여기서 저는 Dason이 당신에게 제공한 비프 기능을 사용했지만, 당신은 제가 아래에 지시한 곳에 무엇이든 쉽게 추가할 수 있습니다.

beepR <- function(x){
        # your code here #
        return(x)
    }

RStudio를 열 때마다 해당 기능을 추가하려면 RStudio의 R 관리를 참조하십시오.Rprofile, .Renviron, Rprofile.사이트, 렌비론.site, rsession.conf repos.conf에서 .Rprofile 파일 사용 방법을 배울 수 있습니다.

이 스레드는 정말 오래되었지만 여전히 이 질문에 대한 최고의 Google 결과 중 하나이며 잠시 삐삐를 사용하게 되었습니다.불행히도 삐삐는 버려지는 것으로 보이며 더 불행하게도 자주 충돌을 일으킵니다(적어도 RStudio가 설치된 Windows 10의 경우).

다행히도, R은 이 게시물이 만들어진 이후로 당신이 소리를 꽤 쉽게 재생할 수 있는 기능을 추가한 것으로 보입니다.

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

그러나 이것은 삐삐가 소리를 재생하는 방식과 거의 동일하므로 동일한 경우에 충돌할 가능성이 높습니다.@MikolajM의 솔루션은 Windows 10에서 작동하지만, 약간 덜 강력하고 더 다루기 어렵습니다(그리고 그렇게 재미있지는 않습니다).Windows의 경우 @aL3xa에서 제안한 솔루션이 가장 유망한 솔루션으로 보이지만 사전 설정이 필요합니다.당신은 VLC처럼 명령줄에서 소리를 재생할 수 있는 프로그램이 필요합니다.VLC를 사용하면 시스템 PATH에 추가해야 합니다.이 작업을 완료한 후에는 다음과 같은 방법을 사용할 수 있습니다.

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

무시는 선택 사항이지만 무시가 없으면 콘솔에 표시되지 않는 일부 횡설수설한 내용이 반환됩니다.

사용할 수 있습니다.notify-send명령:

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

이러한 많은 아이디어로 인해 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)
    }

다음 코드는 .mp3 또는 .wav 파일에 의존하지 않는 비프음을 발생시킵니다.

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

스레드에 대한 몇 가지 아이디어를 결합하여 다음을 구현합니다.

options(error = function() {
    if (interactive()) {
        # require("beepr"); beep(10)
        system("mplayer /usr/share/sounds/freedesktop/stereo/dialog-warning.oga ")
        system("notify-send -u normal 'R session' 'An error occured!'")
    }
})

나는 정기적으로 사용합니다.stop()Rstudio와 같은 대화형 세션에서, 제가 작업 중인 스크립트에서, 한 지점으로 다시 실행하고 싶습니다.이렇게 하면 기다리는 동안 다른 데스크톱으로 전환할 수 있습니다.'로 테스트해 보겠습니다.Rprofile'

언급URL : https://stackoverflow.com/questions/3365657/is-there-a-way-to-make-r-beep-play-a-sound-at-the-end-of-a-script

반응형