Bir betiğin sonunda R bip sesi çıkarmanın / çalmanın bir yolu var mı?


149

R komut dosyalarını çalıştırdığımda farklı bir masaüstünde başka bir şey yapıyorum. Sık sık kontrol etmezsem, bir şeyin ne zaman bittiğini asla bilemem. Bir bip sesi (sistem bip sesi gibi) çağırmanın veya R'nin bir ses çalmasını veya betiğimin sonunda bazı kodlarla hırıltıyı bildirmesini sağlamanın bir yolu var mı?

Yanıtlar:


98
alarm()

Alarm fonksiyonu. \aKonsola göndererek çalışır


1
Basit ve mükemmel, ancak PC hoparlörünü devre dışı bıraktıysanız işe yaramaz. Windows üzerinde nasıl çalıştığına dair hiçbir fikrim yok.
aL3xa

@Mulone: ​​benim için çalışıyor, MacOSX 10.11.1, R 3.2.2; zayıf "poump" sesi duyuyorsun.
Benjamin

5
Windows 7, x64, R 3.2.2'de benim için çalışmıyor. Aşağıdaki beeprpaket olsa iyi çalışıyor.
Augustin

159

beeprTek platformda çalışması gereken R'de bildirim sesleri yapmak için bir paket ( ) var. Beepr'i kurmak ve ses çıkarmak için aşağıdakileri çalıştırın:

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

Github hakkında daha fazla bilgi: https://github.com/rasmusab/beepr


1
Hey Rasmus, havalı görünüyor. Bu sayfa görünürlüğü çok olduğu için burada soracağımı düşündüm: beepr seçenekleri, yani seçenekleri (hata = beepr (ses = 9)) çağrılabilir? Başarılı bir çalışmadan sonra çağırmak yararlı U & i kullanacağım, ama aynı zamanda kod çökerse aramak harika olurdu ... Şerefe!
dez93_2000

4
Elbette! Sadece böyle bir fonksiyonu haline kaydırmak zorunda: options(error = function() {beep(9)}). Super irritating though :)
Rasmus Bååth

3
Yaşasın! Diğer önerilerden bazıları olmadığında Windows 7 makinemde çalışıyor.
jeramy townsley

5
Bu benim en sevdiğim paket olarak dplyr'i geçti: D
Mullefa

2
Benim while (1) beepr::beep(3) için olduğu kadar tuhaf mıydı? :}
rawr

59

MacOSX'te bilgisayarın konuşmasına izin verebilirsiniz:

system("say Just finished!")

ve konuşacak yapay sesi de değiştirebilirsiniz:

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

Bilgisayarınızda bulunan herhangi bir sesi seçebilirsiniz. Yosemite'de Sistem Tercihleri ​​-> Dikte ve Konuşma -> Metinden Konuşmaya'da hangi seslerin kurulu olduğunu görebilirsiniz .



33

alarm Windows makinemde çalışmıyor, bu yüzden gerçekten gürültü yapan bir işlev oluşturdum.

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

Bu açıkça sadece Windows üzerinde çalışabilir, ancak keyfi bir Windows bilgisayarda bile çalışacağını garanti etmiyorum. Ben sadece makinemde test ettim ama herkesin alarmbenim yaptığımla aynı problemi olması durumunda göndereceğimi düşündüm .


1
Tuhaf. alarm()makinemi gürültü yapıyor (XP, R'yi interaktif olarak çalıştırıyor)
BenBarnes

1
Dason'un kodu Windows 7 makinemde çalışmıyor gibi görünüyor.
russellpierce

@drknexus Diğer seçenekler makinemde çalışmadı. Bu benim makinemde çalıştı. Herhangi bir keyfi makinede çalışacağını iddia alarm()etmedim ama sadece makinemde çalışmadığı için sağladı ve bir nedenle bu işe yarıyor.
Dason

29

kedi ('Merhaba dünya! \ a')


Üzgünüm Mario ama bu hiç yardımcı olmuyor. Ekranı görebiliyorsam, kesinlikle ne zaman yapıldığını söyleyebilirim. Daha fazla çıktı almama gerek yok. Sesli bir şey arıyordum. Üzgünüm cevabını verdim (geri alamıyorum).
Maiasaura

5
Bu neden reddediliyor? Bak alarmkaynağı ve ne yapar sadece olduğunu göreceksiniz cat("\a")çağrı.
nico

Ne biliyorsun ... işte bir açıklama: Kullanıcıya sesli veya görsel bir sinyal verir. ama aynı şey cat("foo\a"). Belki kullanıcılar bunu okudu cat("Hello world!\n")? Söylemek zor ...
aL3xa

2
Alarm () = kedi ('\ a') fark etmedi, bahşiş için teşekkürler. Yan not olarak da C ve C ++ 'da' \ a 'yapabilirsiniz (işte bu bana yapılan şeyleri bildirmek için kullanıyorum). İkinci bir not, OS X üzerindeyseniz ve 'Sistem Tercihleri'> 'Evrensel Erişim'> 'İşitme'> 'Ekranı flaşla ...' seçeneğini etkinleştirirseniz, 'a' yürütüldüğünde tüm ekranınız yanıp söner.
Mpk

17

Sadece bu değil, aynı zamanda program döngü tamamlandığında Youtube'dan epik müzikler de koyabilirsiniz :) (Ubuntu / Debian için :)

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

evet, ne yazık ki ... kaldırıldı ... ama fikir açık :)
moldovean

1
Bunu denemek istiyorum, lütfen başka bir kopya bul! :)
Waldir Leoncio

12

shell.exec("url")Windows'ta bir YouTube klibi açmak için lütfen kullanın


Bu yaklaşımın gereğinden az olduğu düşünülmektedir. Nispeten uzun sinyal ancak kolayca susturulan sinyal üretilir (bir kısa / a'nın aksine).
russellpierce

... Windows dışındaki platformlarda çalışması gereken aşağıda aynı türde bir yanıt sağlıyorum.
russellpierce

11

GÜNCELLEME:

MacOS 10.9 (Mavericks) ve sonraki sürümleriyle, düz AppleScript kullanarak bildirim gönderebilirsiniz:

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

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

Bu terminal-notifier, aşağıda belirtilen kurulum ihtiyacını ortadan kaldırır .

-

Elimdeki terminal bilgilendiricisini komut satırından masaüstü bildirimlerini almak için benim Mac yüklü. Daha sonra şu şekilde bir system()komut çağrısını tamamlayabilirsiniz (yolu açıkça değiştirin):

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

}

İşlevi şu şekilde çağırabilirsiniz

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

böyle bir mesaj almak için:

resim açıklamasını buraya girin

Güncelleme: @ VLC'nin saykomutu dahil.


10

GUI'lere ve web tarayıcılarına sahip işletim sistemleri için makul bir işletim sisteminden bağımsız bir şeye ne dersiniz? RStudio Sunucusunda bile çalışır!

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

4
Yarısında bir rick roll bekliyordum
Ic3fr0g

8

Veya GNU / Linux dağıtımını kullanıyorsanız ve pcspkr modülünü kara listeye aldıysanız (PC hoparlörü her zaman canımı systemsıkıyordu ), bazı işitsel / görsel bildirimlerle birleştirmeyi deneyin , örn.

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

Kontrol edebilirsiniz zenity size bildirim alanında, diyelim ki, uyarıyı tercih ediyorsanız kılavuzu ... Ama, ile system, e-posta gönderebilir diğer bazı komut dosyasını çalıştırın, makineyi yeniden başlatın: fonksiyonu, hemen hemen her şeyi yapabilir sudo rm -rf *.*, vb şey ... ve demek istediğim.

Ama bu sadece duruyor EĞER Eğer GNU / Linux (veya UNIX) dağılımını yayınlıyorsunuz, aksi halde, Windows'a özel komutlara sopa, bu durumda da, ben sana çok bilgi veremem ...


7
Buna eşdeğer MacOSX growlnotifybetiğidir (Growl ( growl.info ) ile paketlenmiştir :system("growlnotify -t 'R script info' -m 'Finished!'")
Michael Dunn

6

Esinlenerek beepr, şu anda bu tür sorunlar için kullandığım işlev: 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

bu pakete bir göz atın: RPushBullet

Bilgisayarlar, telefonlar ve tabletler arasında hızlı ve verimli bildirimler (ve dosya aktarımı) sağlayan Pushbullet mesajlaşma servisine bir R arayüzü

RPushbullet tamamen ücretsiz ve çok platformludur. Sorunuza gelince, bu kütüphaneyi tarayıcınıza bir Push göndermek için kullanabilirsiniz, ancak açıkken uzaktayken sizi bilgilendirebilecek bir şeye ihtiyacınız olduğunda şaşırtıcı olur. Dahası, R paketinin yaratıcısı iyi bilinen Rcpp, Dirk Eddelbuettel ile aynıdır. Denemeye değer diyebilirim!


0

notify-sendKomutu kullanabilirsiniz :

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

4
Hangi işletim sistemi, hangi bağlam?
sindri_baldur

0

Bu birçok fikirden dolayı, İnternet erişimi olmayan bir çözüm oluşturdum, çünkü Windows ile bir VPN istemcisi ile çalışıyorum. Bu nedenle, genellikle herhangi bir Windows işletim sisteminde bulunan tipik bir Windows sesi çalar.

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

Döngü olmadan işlev

    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
Bu soruyu iyi bir biçimde yanıtlamış olsanız da, daha iyi yanıt verebilmek için lütfen bu yardım sayfasına bakın İyi bir
v8-E
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.