Có cách nào để tạo ra tiếng bíp R / phát âm thanh ở cuối tập lệnh không?


149

Khi tôi chạy tập lệnh R, tôi sẽ làm một cái gì đó khác trên một máy tính để bàn khác. Nếu tôi không kiểm tra thường xuyên, tôi sẽ không bao giờ biết khi nào một cái gì đó kết thúc. Có cách nào để gọi tiếng bíp (như tiếng bíp hệ thống) hoặc để R phát âm thanh hoặc thông báo gầm gừ thông qua một số mã ở cuối tập lệnh của tôi không?

Câu trả lời:


98
alarm()

Các chức năng báo động . Nó hoạt động bằng cách gửi \ađến bàn điều khiển


1
Đơn giản và hoàn hảo, nhưng vô dụng nếu bạn đã tắt loa PC. Mặc dù tôi không biết làm thế nào để nó chạy trên Windows.
aL3xa

@Mulone: ​​hoạt động với tôi, MacOSX 10.11.1, R 3.2.2; bạn nghe thấy âm thanh "poump" mờ nhạt.
Benjamin

5
Không hoạt động với tôi trên Windows 7, x64, R 3.2.2. Các beeprgói dưới đây hoạt động tốt mặc dù.
Augustin

159

Tôi có một gói ( beepr) với mục đích duy nhất là tạo âm thanh thông báo trong R, hoạt động đa nền tảng. Chạy phần sau để cài đặt tiếng bíp và phát ra âm thanh:

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

Thêm thông tin tại github: https://github.com/rasmusab/beepr


1
Này Rasmus, trông thật ngầu. Tôi nghĩ tôi sẽ hỏi ở đây vì trang này có rất nhiều khả năng hiển thị: có thể gọi tiếng bíp từ các tùy chọn, tức là tùy chọn (error = beepr (sound = 9))? Gọi nó sau khi chạy thành công là hữu ích U & tôi sẽ sử dụng nó, nhưng cũng thật tuyệt khi gọi nó nếu mã gặp sự cố ... Chúc mừng!
dez93_2000

4
Chắc chắn rồi! Bạn chỉ cần bọc nó vào một chức năng như thế này : options(error = function() {beep(9)}). Mặc dù siêu khó chịu :)
Rasmus Bååth

3
Hoan hô! Nó hoạt động trên máy Windows 7 của tôi khi một số đề xuất khác không có.
jerleyy townley 20/215

5
Điều này hiện đã vượt qua dplyr như gói yêu thích của tôi: D
Mullefa 30/03/2015

2
@lukeA while (1) beepr::beep(3) điều đó có kỳ lạ với bạn như đối với tôi không? :}
rawr

59

Trên MacOSX, bạn có thể để máy tính nói:

system("say Just finished!")

và bạn cũng có thể thay đổi giọng nói nhân tạo sẽ nói:

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

Bạn có thể chọn bất kỳ giọng nói có sẵn trên máy tính của bạn. Trên Yosemite, bạn có thể xem giọng nói nào được cài đặt trong Tùy chọn hệ thống -> Đọc chính tả & Phát biểu -> Chuyển văn bản thành giọng nói .



33

alarm không hoạt động trên máy Windows của tôi vì vậy tôi đã tạo ra một chức năng thực sự gây ra tiếng ồn.

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

Điều này rõ ràng chỉ có thể hoạt động trên Windows nhưng tôi không đảm bảo nó thậm chí sẽ chạy trên máy tính Windows tùy ý. Tôi chỉ thử nghiệm nó trên máy của mình nhưng tôi nghĩ rằng tôi sẽ đăng nó trong trường hợp có ai gặp vấn đề tương tự với alarmtôi.


1
Kỳ dị. alarm()làm cho máy của tôi phát ra tiếng ồn (XP, chạy R tương tác)
BenBarnes

1
Mã của Dason dường như không hoạt động trên máy Windows 7 của tôi.
russellpierce

@drknexus Các tùy chọn khác không hoạt động trên máy của tôi. Cái này hoạt động trên máy của tôi. Tôi không bao giờ tuyên bố nó sẽ hoạt động trên bất kỳ máy tùy ý nào mà chỉ cung cấp nó vì nó alarm()không hoạt động trên máy của tôi và vì một số lý do, điều này không xảy ra.
Dason

29

mèo ('Xin chào thế giới! \ a')


Xin lỗi Mario nhưng điều đó chẳng giúp ích gì cả. Nếu tôi có thể nhìn thấy màn hình thì tôi chắc chắn có thể biết khi nào nó hoàn thành. Tôi không cần phải xuất bất cứ thứ gì nữa. Tôi đang tìm kiếm một cái gì đó nghe được. Xin lỗi tôi đã trả lời câu trả lời của bạn (dường như không thể hoàn tác điều đó).
Maiasaura

5
Tại sao điều này nhận được xuống cấp? Nhìn vào alarmnguồn và bạn sẽ thấy rằng những gì nó làm chỉ là một cat("\a")cuộc gọi.
nico

Chà, bạn biết gì ... đây là một mô tả: Cung cấp tín hiệu âm thanh hoặc hình ảnh cho người dùng. nhưng đó là điều tương tự như cat("foo\a"). Có lẽ người dùng đã đọc điều này như cat("Hello world!\n")? Thật khó để nói ...
aL3xa

2
Không nhận ra báo động () = cat ('\ a'), cảm ơn vì tiền boa. Là một lưu ý phụ, người ta cũng có thể thực hiện '\ a' trong C và C ++ (đó là cách tôi đã sử dụng nó để thông báo cho tôi về những việc đang được thực hiện). Lưu ý bên thứ hai, nếu bạn đang dùng OS X và thực hiện 'Tùy chọn hệ thống'> 'Truy cập toàn cầu'> 'Nghe'> bật 'Flash màn hình ...' toàn bộ màn hình của bạn sẽ nhấp nháy khi 'a' được thực thi.
mpk

17

Không chỉ vậy, bạn cũng có thể đặt một số bản nhạc hoành tráng từ Youtube khi chương trình hoàn thành vòng lặp :) (Đối với Ubuntu / Debian :)

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

vâng, thật không may ... nó đã bị xóa ... nhưng ý tưởng đã rõ ràng :)
moldovean

1
Tôi muốn thử cái này, xin vui lòng tìm một bản sao khác! :)
Waldir Leoncio

12

Vui lòng sử dụng shell.exec("url")để mở một số clip YouTube trên Windows


Đây là cách tiếp cận được đánh giá thấp. Tín hiệu tương đối dài nhưng tín hiệu im lặng dễ dàng được tạo ra (trái ngược với tóm tắt / a).
russellpierce

... Tôi cung cấp một câu trả lời cùng loại dưới đây sẽ hoạt động trên các nền tảng khác ngoài Windows.
russellpierce

11

CẬP NHẬT:

Với macOS 10.9 (Mavericks) trở lên, bạn có thể đăng thông báo bằng AppleScript đơn giản:

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

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

Điều này loại bỏ sự cần thiết phải cài đặt terminal-notifier, được tham khảo dưới đây.

-

Tôi đã cài đặt trình thông báo đầu cuối trên máy Mac của mình để nhận thông báo trên màn hình từ dòng lệnh. Sau đó, bạn có thể kết thúc một cuộc gọi đến system()lệnh như thế này (rõ ràng thay đổi đường dẫn):

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

}

Bạn có thể gọi hàm như thế này

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

để nhận được một tin nhắn như thế này:

nhập mô tả hình ảnh ở đây

Cập nhật: Đã bao gồm saylệnh @ VLC .


10

Làm thế nào về một cái gì đó hợp lý độc lập hệ điều hành cho các hệ điều hành với GUI và trình duyệt web? Nó thậm chí hoạt động trên RStudio Server!

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

4
Tôi đã mong đợi một nửa cuộn phim rick
Ic3fr0g

8

Hoặc nếu bạn đang sử dụng phân phối GNU / Linux và có danh sách đen mô-đun pcpkr (loa PC luôn làm phiền tôi), hãy thử kết hợp systemvới một số thông báo bằng âm thanh / hình ảnh, ví dụ:

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

Bạn có thể kiểm tra zenity thủ công nếu bạn thích cảnh báo trong, nói, khu vực thông báo ... Tuy nhiên, với systemchức năng, bạn có thể làm khá nhiều bất cứ điều gì: gửi email, chạy một số kịch bản khác, khởi động lại máy, sudo rm -rf *.*vv bất cứ điều gì ... và tôi có nghĩa là nó.

Nhưng điều này chỉ tồn tại NẾU bạn đang chạy phân phối GNU / Linux (hoặc UNIX), nếu không, hãy tuân theo các lệnh cụ thể của Windows, mặc dù trong trường hợp đó, tôi không thể cung cấp cho bạn nhiều thông tin ...


7
MacOSX tương đương với điều này là growlnotifytập lệnh (được đóng gói với Growl ( growl.info ):system("growlnotify -t 'R script info' -m 'Finished!'")
Michael Dunn

6

Lấy cảm hứng từ beepr, đây là chức năng tôi hiện đang sử dụng cho các loại vấn đề này: 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)
  }
}

6

Làm thế nào về việc chơi một số âm nhạc?

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

5

hãy xem gói này: RPushBONS

Giao diện R cho dịch vụ nhắn tin PushbONS cung cấp thông báo nhanh và hiệu quả (và truyền tệp) giữa máy tính, điện thoại và máy tính bảng

RPushbONS là hoàn toàn miễn phí và đa nền tảng. Đối với câu hỏi của bạn, bạn có thể sử dụng thư viện này để gửi Push tới trình duyệt của mình, nhưng rõ ràng nó sẽ trở nên tuyệt vời khi bạn cần thứ gì đó hơn là có thể thông báo cho bạn khi bạn đi vắng. Hơn nữa, người tạo ra gói R cũng giống như Rcpp nổi tiếng, Dirk Eddelbuettel. Tôi muốn nói rằng nó đáng để thử!


0

Bạn có thể sử dụng notify-sendlệnh:

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

4
Os gì, bối cảnh gì?
sindri_baldur

0

Do nhiều ý tưởng này, tôi đã tạo ra một giải pháp mà không cần truy cập Internet, vì tôi làm việc với máy khách VPN với Windows. Vì vậy, nó phát một âm thanh Windows điển hình, thường có trên bất kỳ hệ điều hành Windows nào.

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

Chức năng không có vòng lặp

    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
Mặc dù bạn đã trả lời câu hỏi này ở định dạng tốt, vui lòng tham khảo trang trợ giúp này để biết cách trả lời tốt hơn Làm thế nào để tôi viết một câu trả lời hay?
v8-E
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.