Apakah ada cara untuk membuat R bip / memainkan suara di akhir naskah?

149

Ketika saya menjalankan skrip R, saya melakukan sesuatu yang lain di desktop yang berbeda. Jika saya tidak sering memeriksa, saya tidak pernah tahu kapan sesuatu selesai. Apakah ada cara untuk memanggil bip (seperti bip sistem) atau meminta R untuk memainkan suara atau memberi tahu growl melalui beberapa kode di akhir skrip saya?

Maiasaura
sumber

Jawaban:

98
alarm()

Fungsi alarm . Ini bekerja dengan mengirim \ake konsol

Deinst
sumber
1
Sederhana dan sempurna, tetapi tidak berguna jika Anda telah menonaktifkan speaker PC. Meskipun saya tidak tahu bagaimana cara kerjanya di Windows.
aL3xa
@Mulone: ​​berfungsi untuk saya, MacOSX 10.11.1, R 3.2.2; Anda mendengar suara "poump" yang samar.
Benjamin
5
Tidak berfungsi untuk saya di Windows 7, x64, R 3.2.2. The beeprpaket di bawah ini bekerja dengan baik meskipun.
Augustin
159

Saya punya paket ( beepr) dengan tujuan tunggal untuk membuat suara notifikasi di R yang seharusnya bekerja lintas platform. Jalankan yang berikut ini untuk menginstal beepr dan buat suara:

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

Info lebih lanjut di github: https://github.com/rasmusab/beepr

Rasmus Bååth
sumber
1
Hai Rasmus, terlihat keren. Saya pikir saya akan bertanya di sini karena halaman ini memiliki banyak visibilitas: dapat beepr dipanggil dari opsi, yaitu opsi (error = beepr (sound = 9))? Memanggilnya setelah proses yang berhasil berguna U & saya akan menggunakannya, tetapi juga akan lebih baik untuk menyebutnya jika kode crash ... Cheers!
dez93_2000
4
Tentu! Anda hanya perlu membungkusnya menjadi fungsi seperti ini: options(error = function() {beep(9)}). Sangat menyebalkan :)
Rasmus Bååth
3
Hore! Ini bekerja pada mesin Windows 7 saya ketika beberapa saran lainnya tidak.
jeramy townley
5
Ini sekarang telah menyusul dplyr sebagai paket favorit saya: D
Mullefa
2
@ LukeA while (1) beepr::beep(3) itu seaneh bagimu seperti halnya bagiku? :}
rawr
59

Pada MacOSX Anda dapat membiarkan komputer berbicara:

system("say Just finished!")

dan Anda juga dapat mengubah suara buatan yang akan berbicara:

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

Anda dapat memilih suara apa pun yang tersedia di komputer Anda. Di Yosemite Anda dapat melihat suara mana yang diinstal di System Preferences -> Dictation & Speech -> Text to Speech .

VLC
sumber
50

Anda harus menge-tweet-nya setelah selesai: http://cran.r-project.org/web/packages/twitteR/index.html

Ken Williams
sumber
2
Ken: Itu sangat brilian! Sekarang saya bahkan tidak perlu menggantung di kamar yang sama. Saya bisa pergi ke happy hour dan minum bir atau beberapa sampai saya melihat dm mengatakan kode selesai! Saya baru saja mencobanya dan itu bekerja dengan baik.
Maiasaura
33

alarm tidak bekerja pada mesin Windows saya jadi saya membuat fungsi yang benar-benar membuat kebisingan.

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

Ini jelas hanya bisa bekerja pada Windows tetapi saya tidak menjamin itu bahkan akan berjalan pada komputer Windows yang sewenang-wenang. Saya hanya mengujinya di komputer saya, tetapi saya pikir saya akan mempostingnya kalau-kalau ada yang memiliki masalah yang sama dengan alarmyang saya lakukan.

Alasan
sumber
1
Aneh. alarm()membuat mesin saya mengeluarkan suara (XP, menjalankan R secara interaktif)
BenBarnes
1
Kode Dason tampaknya tidak berfungsi di mesin Windows 7 saya.
russellpierce
@drknexus Pilihan lain tidak berfungsi pada mesin saya. Yang ini bekerja pada mesin saya. Saya tidak pernah mengklaim itu akan berfungsi pada mesin sembarang tetapi hanya menyediakannya karena alarm()tidak berfungsi pada mesin saya dan untuk beberapa alasan ini tidak.
Dason
29

cat ('Halo dunia! \ a')

mpk
sumber
Maaf Mario tapi itu tidak membantu sama sekali. Jika saya bisa melihat layar maka saya pasti bisa tahu kapan itu selesai. Saya tidak perlu mengeluarkan apapun lagi. Saya mencari sesuatu yang terdengar. Maaf saya sudah menjawab jawaban Anda (sepertinya tidak bisa membatalkannya).
Maiasaura
5
Mengapa ini diturunkan? Lihatlah alarmsumbernya dan Anda akan melihat bahwa yang dilakukannya hanyalah cat("\a")panggilan.
nico
Nah, apa yang Anda ketahui ... inilah uraiannya: Memberi sinyal suara atau visual kepada pengguna. tapi itu sama dengan cat("foo\a"). Mungkin pengguna sudah membaca ini cat("Hello world!\n")? Sulit
dikatakan
2
Tidak menyadari alarm () = cat ('\ a'), terima kasih atas tipnya. Sebagai catatan, kita juga dapat melakukan '\ a' dalam C dan C ++ (yang merupakan cara saya menggunakannya untuk memberi tahu saya tentang hal-hal yang sedang dilakukan). Catatan sisi kedua, jika Anda menggunakan OS X dan melakukan 'System Preferences'> 'Universal Access'> 'Hearing'> aktifkan 'Flash the screen ...' seluruh layar Anda berkedip ketika 'a' dieksekusi.
mpk
17

Tidak hanya itu, Anda juga dapat menempatkan beberapa musik epik dari Youtube ketika program ini selesai berulang :) (Untuk Ubuntu / Debian :)

system("xdg-open 'http://www.youtube.com/watch?v=9jK-NcRmVcw'")
moldovean
sumber
ya, sayangnya ... itu dihapus ... tapi idenya jelas :)
moldovean
1
Saya ingin mencoba ini, tolong temukan salinan lain! :)
Waldir Leoncio
12

Silakan gunakan shell.exec("url")untuk membuka beberapa klip YouTube di Windows

Swedia
sumber
Ini adalah pendekatan yang diremehkan. Sinyal yang relatif panjang tetapi sinyal yang dibungkam mudah dihasilkan (berbeda dengan brief / a).
russellpierce
... Saya memberikan jawaban dengan tipe yang sama di bawah ini yang seharusnya berfungsi pada platform selain Windows.
russellpierce
11

MEMPERBARUI:

Dengan macOS 10.9 (Mavericks) dan yang lebih baru, Anda dapat memposting pemberitahuan menggunakan AppleScript:

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

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

Ini menghilangkan kebutuhan untuk menginstal terminal-notifier, dirujuk di bawah ini.

-

Saya telah menginstal terminal-notifier pada Mac saya untuk mendapatkan notifikasi desktop dari baris perintah. Anda kemudian dapat mengakhiri panggilan ke system()perintah seperti ini (ubah jalurnya, jelas):

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

}

Anda dapat memanggil fungsi seperti ini

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

untuk mendapatkan pesan seperti ini:

masukkan deskripsi gambar di sini

Pembaruan: Termasuk sayperintah @ VLC .

Stewart Macdonald
sumber
10

Bagaimana dengan sesuatu yang masuk akal untuk OS independen untuk OS dengan GUI dan browser web? Ia bahkan bekerja di RStudio Server!

browseURL('https://www.youtube.com/watch?v=QH2-TGUlwu4')
russellpierce
sumber
4
Saya setengah berharap roll rick
Ic3fr0g
8

Atau jika Anda menggunakan distro GNU / Linux dan memasukkan modul pcspkr ke daftar hitam (pengeras suara PC selalu mengganggu saya), coba gabungkan systemdengan beberapa pemberitahuan auditif / visual, mis.

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

Anda dapat memeriksa manual zenity jika Anda lebih suka menyiagakan, mengatakan, area notifikasi ... Tetapi, dengan systemfungsinya, Anda dapat melakukan hampir semua hal: mengirim email, menjalankan beberapa skrip lain, menyalakan ulang mesin sudo rm -rf *.*,, dll. Apa pun ... dan aku bersungguh-sungguh.

Tetapi ini hanya berlaku JIKA Anda menjalankan distribusi GNU / Linux (atau UNIX), jika tidak, patuhi perintah khusus Windows, meskipun dalam hal itu, saya tidak bisa memberi Anda banyak info ...

aL3xa
sumber
7
Setara dengan MacOSX untuk ini adalah growlnotifyskrip (dikemas dengan Growl ( growl.info ):system("growlnotify -t 'R script info' -m 'Finished!'")
Michael Dunn
6

Terinspirasi oleh beepr, ini adalah fungsi yang saya gunakan saat ini untuk masalah seperti ini: 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)
  }
}
Mullefa
sumber
6

Bagaimana kalau memainkan musik?

shell.exec("foo/Born.to.be.wild.mp3")
Chirayu Chamoli
sumber
5

lihat paket ini: RPushBullet

Antarmuka R ke layanan pesan Pushbullet yang menyediakan pemberitahuan cepat dan efisien (dan transfer file) antara komputer, ponsel, dan tablet

RPushbullet sepenuhnya gratis dan multi platform. Adapun pertanyaan Anda, Anda dapat menggunakan perpustakaan ini untuk mengirim Push ke browser Anda, tetapi jelas itu menjadi luar biasa ketika Anda membutuhkan sesuatu daripada yang bisa memberi tahu Anda saat Anda pergi. Selain itu, pembuat paket R adalah sama dengan Rcpp yang terkenal, Dirk Eddelbuettel. Saya akan mengatakan itu layak dicoba!

Meme
sumber
0

Anda dapat menggunakan notify-sendperintah:

system("notify-send \"R script finished running\"")
JonnyRobbie
sumber
4
Apa os, konteks apa?
sindri_baldur
0

Karena banyak ide ini, saya telah membuat solusi tanpa akses Internet, karena saya bekerja dengan klien VPN dengan Windows. Jadi ia memainkan suara Windows yang khas, yang biasanya pada sistem operasi Windows apa pun.

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

Berfungsi tanpa loop

    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)
    }
Mongutea
sumber
1
Meskipun Anda telah menjawab pertanyaan ini dalam format yang baik, Silakan lihat halaman bantuan ini untuk cara yang lebih baik untuk menjawab Bagaimana
v8-E