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?

Jawaban:


98
alarm()

Fungsi alarm . Ini bekerja dengan mengirim \ake konsol


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


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 .



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.


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


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

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


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 .


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

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


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


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!



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

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.