มีวิธีที่จะทำให้ R ส่งเสียงบี๊บ / เล่นเสียงในตอนท้ายของสคริปต์หรือไม่?


149

เมื่อฉันเรียกใช้สคริปต์ R ฉันไปทำอย่างอื่นบนเดสก์ท็อปอื่น ถ้าฉันไม่ตรวจสอบบ่อยครั้งฉันจะไม่มีทางรู้ว่าเมื่อบางสิ่งเสร็จสิ้น มีวิธีเรียกใช้เสียงบี๊บ (เช่นเสียงบี๊บของระบบ) หรือรับ R เพื่อเล่นเสียงหรือแจ้งคำรามผ่านโค้ดบางส่วนเมื่อสิ้นสุดสคริปต์ของฉันหรือไม่

คำตอบ:


98
alarm()

ปลุกฟังก์ชั่น มันทำงานได้โดยการส่ง\aไปยังคอนโซล


1
เรียบง่ายและสมบูรณ์แบบ แต่ไร้ประโยชน์หากคุณปิดใช้งานลำโพง PC แม้ว่าฉันจะไม่รู้ว่ามันทำงานบน Windows ได้อย่างไร
aL3xa

@Mulone: ​​ทำงานได้สำหรับฉัน MacOSX 10.11.1, R 3.2.2; คุณได้ยินเสียง "poump" จาง ๆ
Benjamin

5
ใช้งานไม่ได้กับฉันใน Windows 7, x64, R 3.2.2 beeprแพคเกจดังต่อไปนี้ทำงานได้ดีแม้ว่า
Augustin

159

ฉันมีแพ็คเกจ ( beepr) โดยมีวัตถุประสงค์เพียงอย่างเดียวในการส่งเสียงเตือนใน R ซึ่งควรใช้ข้ามแพลตฟอร์ม รันสิ่งต่อไปนี้เพื่อติดตั้ง beepr และส่งเสียง:

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

ข้อมูลเพิ่มเติมได้ที่ github: https://github.com/rasmusab/beepr


1
เฮ้ราสมุสดูเท่ ฉันคิดว่าฉันถามที่นี่เนื่องจากหน้านี้มีการเปิดเผยจำนวนมาก: สามารถส่งเสียงบี๊บจากตัวเลือกได้เช่นตัวเลือก (error = beepr (sound = 9))? การเรียกใช้หลังจากการเรียกใช้ที่ประสบความสำเร็จนั้นเป็นประโยชน์ U & ฉันจะใช้มัน แต่มันก็เป็นการดีที่จะเรียกมันว่าถ้ารหัสขัดข้อง ... ไชโย!
dez93_2000

4
แน่นอน! คุณต้องใส่มันเข้าไปในฟังก์ชั่นแบบนี้: options(error = function() {beep(9)}). น่ารำคาญสุด ๆ :)
Rasmus Bååth

3
ไชโย! ใช้งานได้กับเครื่อง Windows 7 ของฉันเมื่อไม่ได้รับคำแนะนำอื่น ๆ
# # # # # # # # # # # # # # # # #2010

5
นี่คือตอนนี้ได้แซงหน้า dplyr เป็นแพ็คเกจที่ฉันชอบ: D
Mullefa

2
@lukeA while (1) beepr::beep(3) มันแปลกสำหรับคุณเหมือนที่ฉัน :}
rawr

59

ใน MacOSX คุณสามารถให้คอมพิวเตอร์พูดได้:

system("say Just finished!")

และคุณยังสามารถเปลี่ยนเสียงประดิษฐ์ที่จะพูดได้:

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

คุณสามารถเลือกเสียงใด ๆ ที่มีอยู่ในคอมพิวเตอร์ของคุณ เมื่อวันที่โยเซมิตีคุณสามารถดูว่าเสียงมีการติดตั้งในการตั้งค่าระบบ -> คำสั่งและคำพูด -> ข้อความที่จะพูด


50

คุณควรทวีตเมื่อเสร็จแล้ว: http://cran.r-project.org/web/packages/twitteR/index.html


2
Ken: นั่นยอดเยี่ยมมาก! ตอนนี้ฉันไม่ต้องแขวนในห้องเดียวกัน ฉันสามารถไปชั่วโมงแห่งความสุขและดื่มเบียร์หรือไม่กี่จนกว่าฉันจะเห็นว่ารหัสพูดเสร็จแล้ว! ฉันลองและใช้งานได้ดี
Maiasaura

33

alarm ไม่ทำงานบนเครื่อง Windows ของฉันดังนั้นฉันจึงสร้างฟังก์ชั่นที่สร้างเสียงรบกวน

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

สิ่งนี้สามารถทำงานได้บน Windows อย่างชัดเจน แต่ฉันไม่รับประกันว่ามันจะทำงานบนคอมพิวเตอร์ที่ใช้ Windows ได้ตามอำเภอใจ ฉันเพิ่งทดสอบมันบนเครื่องของฉัน แต่ฉันคิดว่าฉันโพสต์ไว้ในกรณีที่ใครมีปัญหาเดียวกันกับalarmที่ฉันทำ


1
แปลก. alarm()ทำให้เครื่องของฉันส่งเสียง (XP, รัน R แบบโต้ตอบ)
BenBarnes

1
รหัสของ Dason ไม่ทำงานบนเครื่อง Windows 7 ของฉัน
russellpierce

@drknexus ตัวเลือกอื่นไม่ทำงานบนเครื่องของฉัน อันนี้ใช้ได้กับเครื่องของฉัน ฉันไม่เคยอ้างว่ามันจะใช้งานได้กับเครื่องใดก็ได้ แต่ให้มาตั้งแต่เครื่องalarm()ไม่ทำงานและด้วยเหตุผลบางอย่าง
Dason

29

แมว ('สวัสดีชาวโลก! \ a')


ขออภัยมาริโอ แต่นั่นไม่ได้ช่วยอะไรเลย ถ้าฉันเห็นหน้าจอฉันจะบอกได้อย่างแน่นอนว่าเมื่อเสร็จแล้ว ฉันไม่ต้องการส่งออกอะไรอีก ฉันกำลังมองหาบางสิ่งที่ได้ยิน ขออภัยฉันทำตามคำตอบของคุณ (ดูเหมือนจะไม่สามารถยกเลิกได้)
Maiasaura

5
ทำไมสิ่งนี้ถึงได้รับการโหวตต่ำ ดูalarmแหล่งที่มาและคุณจะเห็นว่าสิ่งที่มันเป็นเพียงการcat("\a")โทร
โก้

คุณรู้อะไร ... นี่คือคำอธิบาย: ให้สัญญาณเสียงหรือภาพแก่ผู้ใช้ cat("foo\a")แต่มันเป็นสิ่งเดียวกับ ผู้ใช้อาจได้อ่านสิ่งนี้เป็นcat("Hello world!\n")? ยากที่จะบอก ...
aL3xa

2
ไม่ได้ตระหนักถึงการเตือน () = cat ('\ a') ขอบคุณสำหรับคำแนะนำ ในฐานะที่เป็นหมายเหตุด้านหนึ่งสามารถทำ '\ a' ใน C และ C ++ (ซึ่งเป็นวิธีที่ฉันใช้มันเพื่อแจ้งให้ฉันทราบถึงสิ่งที่กำลังทำ) ข้อสังเกตด้านที่สองหากคุณอยู่ใน OS X และทำ 'การตั้งค่าระบบ'> 'การเข้าถึงสากล'> 'การได้ยิน'> เปิดใช้งาน 'แฟลชหน้าจอ ... ' หน้าจอทั้งหมดของคุณจะกะพริบเมื่อดำเนินการ 'a'
mpk

17

ไม่เพียงแค่นั้นคุณยังสามารถใส่เพลงมหากาพย์จาก Youtube เมื่อโปรแกรมเสร็จสิ้นการวนลูป :) (สำหรับ Ubuntu / Debian :)

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

ใช่ ... แต่น่าเสียดายที่มันถูกลบออก ... แต่ความคิดที่เป็นที่ชัดเจน :)
moldovean

1
ฉันอยากลองสิ่งนี้โปรดค้นหาอีกชุด! :)
Waldir Leoncio

12

โปรดใช้shell.exec("url")เพื่อเปิดบางคลิป YouTube บน Windows


นี่คือวิธีการที่ underrated สัญญาณค่อนข้างยาว แต่สร้างสัญญาณเงียบได้ง่าย (ตรงข้ามกับสั้น / a)
russellpierce

... ฉันให้คำตอบเกี่ยวกับประเภทเดียวกันด้านล่างที่ควรใช้กับแพลตฟอร์มอื่นที่ไม่ใช่ Windows
russellpierce

11

UPDATE:

ด้วย 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)

เพื่อรับข้อความเช่นนี้:

ป้อนคำอธิบายรูปภาพที่นี่

อัปเดต: รวมsayคำสั่งของ @ VLC


10

ระบบปฏิบัติการอิสระที่เหมาะสมสำหรับ OS ที่ใช้ GUI และเว็บเบราว์เซอร์เป็นอย่างไร มันยังทำงานบนเซิร์ฟเวอร์ RStudio!

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

4
ฉันครึ่งหนึ่งคาดหวังว่าจะเป็นเรื่องง่าย
Ic3fr0g

8

หรือถ้าคุณใช้ GNU / Linux distro และมี โมดูลขึ้นบัญชีดำของรายการpcpkr (ลำโพงของเครื่องคอมพิวเตอร์มักจะทำให้ฉันรำคาญอยู่เสมอ) ลองใช้การ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ฟังก์ชั่นคุณสามารถทำอะไรได้สวยมาก: ส่งอีเมลเรียกใช้สคริปต์อื่น ๆ รีบูตเครื่องsudo rm -rf *.*ฯลฯอะไร ... และฉันหมายถึงมัน

แต่นี่เป็นเพียงถ้าคุณใช้การกระจาย GNU / Linux (หรือ UNIX) มิฉะนั้นให้ยึดตามคำสั่งเฉพาะของ Windows แม้ว่าในกรณีนี้ฉันไม่สามารถให้ข้อมูลได้มากนัก ...


7
MacOSX เทียบเท่ากับสิ่งนี้คือgrowlnotifyสคริปต์ (บรรจุด้วย Growl ( growl.info ):system("growlnotify -t 'R script info' -m 'Finished!'")
Michael Dunn

6

แรงบันดาลใจจาก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)
  }
}


5

ดูแพ็คเกจนี้: RPushBullet

อินเตอร์เฟส R ไปยังบริการส่งข้อความของ Pushbullet ซึ่งให้การแจ้งเตือนที่รวดเร็วและมีประสิทธิภาพ (และการถ่ายโอนไฟล์) ระหว่างคอมพิวเตอร์โทรศัพท์และแท็บเล็ต

RPushbullet เป็นแพลตฟอร์มที่สมบูรณ์ฟรีและหลากหลาย สำหรับคำถามของคุณคุณสามารถใช้ไลบรารีนี้เพื่อส่ง Push ไปยังเบราว์เซอร์ของคุณได้ แต่แน่นอนว่ามันน่าทึ่งเมื่อคุณต้องการบางสิ่งที่เกินกว่าที่จะสามารถแจ้งให้คุณทราบขณะที่คุณไม่อยู่ ยิ่งกว่านั้นผู้สร้างแพ็คเกจ R ก็เหมือนกันกับ Rcpp ที่รู้จักกันดีคือ Dirk Eddelbuettel ฉันว่ามันคุ้มค่ากับการยิง!



0

เนื่องจากความคิดมากมายเหล่านี้ฉันได้สร้างโซลูชันที่ไม่มีการเข้าถึงอินเทอร์เน็ตเพราะฉันทำงานกับไคลเอนต์ 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)
    }

1
แม้ว่าคุณจะตอบคำถามนี้ในรูปแบบที่ถูกต้อง แต่โปรดดูหน้าความช่วยเหลือนี้เพื่อหาคำตอบที่ดีกว่า ฉันจะเขียนคำตอบที่ดีได้อย่างไร
v8-E
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.